0

added options metadata (and python accessor)

This commit is contained in:
Aaron Griffith
2011-06-10 22:27:46 -04:00
parent 6d667cb262
commit a37d0ce9bc
9 changed files with 70 additions and 2 deletions

View File

@@ -41,6 +41,8 @@ static PyMethodDef COverviewerMethods[] = {
"returns inheritance chain for a particular render mode"},
{"get_render_mode_children", get_render_mode_children, METH_VARARGS,
"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,
"sets the default options for a given render mode"},

View File

@@ -225,6 +225,7 @@ rendermode_cave_draw(void *data, RenderState *state, PyObject *src, PyObject *ma
RenderModeInterface rendermode_cave = {
"cave", "render only caves in normal mode",
NULL,
&rendermode_normal,
sizeof(RenderModeCave),
rendermode_cave_start,

View File

@@ -246,6 +246,7 @@ rendermode_lighting_draw(void *data, RenderState *state, PyObject *src, PyObject
RenderModeInterface rendermode_lighting = {
"lighting", "draw shadows from the lighting data",
NULL,
&rendermode_normal,
sizeof(RenderModeLighting),
rendermode_lighting_start,

View File

@@ -61,6 +61,7 @@ rendermode_night_draw(void *data, RenderState *state, PyObject *src, PyObject *m
RenderModeInterface rendermode_night = {
"night", "like \"lighting\", except at night",
NULL,
&rendermode_lighting,
sizeof(RenderModeNight),
rendermode_night_start,

View File

@@ -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 = {
"normal", "nothing special, just render the blocks",
rendermode_normal_options,
NULL,
sizeof(RenderModeNormal),
rendermode_normal_start,

View File

@@ -129,6 +129,7 @@ rendermode_overlay_draw(void *data, RenderState *state, PyObject *src, PyObject
RenderModeInterface rendermode_overlay = {
"overlay", "base rendermode for informational overlays",
NULL,
NULL,
sizeof(RenderModeOverlay),
rendermode_overlay_start,
rendermode_overlay_finish,

View File

@@ -109,6 +109,7 @@ rendermode_spawn_draw(void *data, RenderState *state, PyObject *src, PyObject *m
RenderModeInterface rendermode_spawn = {
"spawn", "draws a red overlay where monsters can spawn at night",
NULL,
&rendermode_overlay,
sizeof(RenderModeSpawn),
rendermode_spawn_start,

View File

@@ -256,6 +256,51 @@ PyObject *get_render_mode_children(PyObject *self, PyObject *args) {
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 */
PyObject *set_render_mode_options(PyObject *self, PyObject *args) {
const char *rendermode;

View File

@@ -37,13 +37,21 @@
#include <Python.h>
typedef struct {
const char *name;
const char *description;
} RenderModeOption;
/* rendermode interface */
typedef struct _RenderModeInterface RenderModeInterface;
struct _RenderModeInterface {
/* the name of this mode */
const char* name;
const char *name;
/* 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 */
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_inheritance(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 */
PyObject *set_render_mode_options(PyObject *self, PyObject *args);