added options metadata (and python accessor)
This commit is contained in:
@@ -41,6 +41,8 @@ static PyMethodDef COverviewerMethods[] = {
|
|||||||
"returns inheritance chain for a particular render mode"},
|
"returns inheritance chain for a particular render mode"},
|
||||||
{"get_render_mode_children", get_render_mode_children, METH_VARARGS,
|
{"get_render_mode_children", get_render_mode_children, METH_VARARGS,
|
||||||
"returns (direct) children for a particular render mode"},
|
"returns (direct) children for a particular render mode"},
|
||||||
|
{"get_render_mode_options", get_render_mode_options, METH_VARARGS,
|
||||||
|
"returns a list of options for this render mode"},
|
||||||
|
|
||||||
{"set_render_mode_options", set_render_mode_options, METH_VARARGS,
|
{"set_render_mode_options", set_render_mode_options, METH_VARARGS,
|
||||||
"sets the default options for a given render mode"},
|
"sets the default options for a given render mode"},
|
||||||
|
|||||||
@@ -225,6 +225,7 @@ rendermode_cave_draw(void *data, RenderState *state, PyObject *src, PyObject *ma
|
|||||||
|
|
||||||
RenderModeInterface rendermode_cave = {
|
RenderModeInterface rendermode_cave = {
|
||||||
"cave", "render only caves in normal mode",
|
"cave", "render only caves in normal mode",
|
||||||
|
NULL,
|
||||||
&rendermode_normal,
|
&rendermode_normal,
|
||||||
sizeof(RenderModeCave),
|
sizeof(RenderModeCave),
|
||||||
rendermode_cave_start,
|
rendermode_cave_start,
|
||||||
|
|||||||
@@ -246,6 +246,7 @@ rendermode_lighting_draw(void *data, RenderState *state, PyObject *src, PyObject
|
|||||||
|
|
||||||
RenderModeInterface rendermode_lighting = {
|
RenderModeInterface rendermode_lighting = {
|
||||||
"lighting", "draw shadows from the lighting data",
|
"lighting", "draw shadows from the lighting data",
|
||||||
|
NULL,
|
||||||
&rendermode_normal,
|
&rendermode_normal,
|
||||||
sizeof(RenderModeLighting),
|
sizeof(RenderModeLighting),
|
||||||
rendermode_lighting_start,
|
rendermode_lighting_start,
|
||||||
|
|||||||
@@ -61,6 +61,7 @@ rendermode_night_draw(void *data, RenderState *state, PyObject *src, PyObject *m
|
|||||||
|
|
||||||
RenderModeInterface rendermode_night = {
|
RenderModeInterface rendermode_night = {
|
||||||
"night", "like \"lighting\", except at night",
|
"night", "like \"lighting\", except at night",
|
||||||
|
NULL,
|
||||||
&rendermode_lighting,
|
&rendermode_lighting,
|
||||||
sizeof(RenderModeNight),
|
sizeof(RenderModeNight),
|
||||||
rendermode_night_start,
|
rendermode_night_start,
|
||||||
|
|||||||
@@ -244,8 +244,15 @@ rendermode_normal_draw(void *data, RenderState *state, PyObject *src, PyObject *
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static RenderModeOption rendermode_normal_options[] = {
|
||||||
|
{"edge_opacity", "darkness of the edge lines, from 0.0 to 1.0"},
|
||||||
|
{"min_depth", "lowest level of blocks to render, default: 0"},
|
||||||
|
{"max_depth", "highest level of blocks to render, default: 127"},
|
||||||
|
};
|
||||||
|
|
||||||
RenderModeInterface rendermode_normal = {
|
RenderModeInterface rendermode_normal = {
|
||||||
"normal", "nothing special, just render the blocks",
|
"normal", "nothing special, just render the blocks",
|
||||||
|
rendermode_normal_options,
|
||||||
NULL,
|
NULL,
|
||||||
sizeof(RenderModeNormal),
|
sizeof(RenderModeNormal),
|
||||||
rendermode_normal_start,
|
rendermode_normal_start,
|
||||||
|
|||||||
@@ -129,6 +129,7 @@ rendermode_overlay_draw(void *data, RenderState *state, PyObject *src, PyObject
|
|||||||
RenderModeInterface rendermode_overlay = {
|
RenderModeInterface rendermode_overlay = {
|
||||||
"overlay", "base rendermode for informational overlays",
|
"overlay", "base rendermode for informational overlays",
|
||||||
NULL,
|
NULL,
|
||||||
|
NULL,
|
||||||
sizeof(RenderModeOverlay),
|
sizeof(RenderModeOverlay),
|
||||||
rendermode_overlay_start,
|
rendermode_overlay_start,
|
||||||
rendermode_overlay_finish,
|
rendermode_overlay_finish,
|
||||||
|
|||||||
@@ -109,6 +109,7 @@ rendermode_spawn_draw(void *data, RenderState *state, PyObject *src, PyObject *m
|
|||||||
|
|
||||||
RenderModeInterface rendermode_spawn = {
|
RenderModeInterface rendermode_spawn = {
|
||||||
"spawn", "draws a red overlay where monsters can spawn at night",
|
"spawn", "draws a red overlay where monsters can spawn at night",
|
||||||
|
NULL,
|
||||||
&rendermode_overlay,
|
&rendermode_overlay,
|
||||||
sizeof(RenderModeSpawn),
|
sizeof(RenderModeSpawn),
|
||||||
rendermode_spawn_start,
|
rendermode_spawn_start,
|
||||||
|
|||||||
@@ -256,6 +256,51 @@ PyObject *get_render_mode_children(PyObject *self, PyObject *args) {
|
|||||||
return children;
|
return children;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* bindings -- get list of options */
|
||||||
|
PyObject *get_render_mode_options(PyObject *self, PyObject *args)
|
||||||
|
{
|
||||||
|
const char *rendermode;
|
||||||
|
PyObject *options;
|
||||||
|
unsigned int i, j;
|
||||||
|
if (!PyArg_ParseTuple(args, "s", &rendermode))
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
options = PyList_New(0);
|
||||||
|
if (!options)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
for (i = 0; render_modes[i] != NULL; i++) {
|
||||||
|
if (strcmp(render_modes[i]->name, rendermode) == 0) {
|
||||||
|
if (render_modes[i]->options == NULL)
|
||||||
|
break;
|
||||||
|
|
||||||
|
for (j = 0; render_modes[i]->options[j].name != NULL; j++) {
|
||||||
|
RenderModeOption opt = render_modes[i]->options[j];
|
||||||
|
PyObject *name = PyString_FromString(opt.name);
|
||||||
|
PyObject *description = PyString_FromString(opt.description);
|
||||||
|
PyObject *option = PyDict_New();
|
||||||
|
if (!name || !description || !option) {
|
||||||
|
Py_XDECREF(name);
|
||||||
|
Py_XDECREF(description);
|
||||||
|
Py_XDECREF(option);
|
||||||
|
Py_DECREF(options);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
PyDict_SetItemString(option, "name", name);
|
||||||
|
PyDict_SetItemString(option, "description", description);
|
||||||
|
PyList_Append(options, option);
|
||||||
|
Py_DECREF(name);
|
||||||
|
Py_DECREF(description);
|
||||||
|
Py_DECREF(option);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return options;
|
||||||
|
}
|
||||||
|
|
||||||
/* python rendermode options bindings */
|
/* python rendermode options bindings */
|
||||||
PyObject *set_render_mode_options(PyObject *self, PyObject *args) {
|
PyObject *set_render_mode_options(PyObject *self, PyObject *args) {
|
||||||
const char *rendermode;
|
const char *rendermode;
|
||||||
|
|||||||
@@ -37,13 +37,21 @@
|
|||||||
|
|
||||||
#include <Python.h>
|
#include <Python.h>
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
const char *name;
|
||||||
|
const char *description;
|
||||||
|
} RenderModeOption;
|
||||||
|
|
||||||
/* rendermode interface */
|
/* rendermode interface */
|
||||||
typedef struct _RenderModeInterface RenderModeInterface;
|
typedef struct _RenderModeInterface RenderModeInterface;
|
||||||
struct _RenderModeInterface {
|
struct _RenderModeInterface {
|
||||||
/* the name of this mode */
|
/* the name of this mode */
|
||||||
const char* name;
|
const char *name;
|
||||||
/* the short description of this render mode */
|
/* the short description of this render mode */
|
||||||
const char* description;
|
const char *description;
|
||||||
|
|
||||||
|
/* a NULL-terminated list of render mode options, or NULL */
|
||||||
|
RenderModeOption *options;
|
||||||
|
|
||||||
/* the rendermode this is derived from, or NULL */
|
/* the rendermode this is derived from, or NULL */
|
||||||
RenderModeInterface *parent;
|
RenderModeInterface *parent;
|
||||||
@@ -78,6 +86,7 @@ PyObject *get_render_mode_info(PyObject *self, PyObject *args);
|
|||||||
PyObject *get_render_mode_parent(PyObject *self, PyObject *args);
|
PyObject *get_render_mode_parent(PyObject *self, PyObject *args);
|
||||||
PyObject *get_render_mode_inheritance(PyObject *self, PyObject *args);
|
PyObject *get_render_mode_inheritance(PyObject *self, PyObject *args);
|
||||||
PyObject *get_render_mode_children(PyObject *self, PyObject *args);
|
PyObject *get_render_mode_children(PyObject *self, PyObject *args);
|
||||||
|
PyObject *get_render_mode_options(PyObject *self, PyObject *args);
|
||||||
|
|
||||||
/* python rendermode options bindings */
|
/* python rendermode options bindings */
|
||||||
PyObject *set_render_mode_options(PyObject *self, PyObject *args);
|
PyObject *set_render_mode_options(PyObject *self, PyObject *args);
|
||||||
|
|||||||
Reference in New Issue
Block a user