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"}, "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"},

View File

@@ -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,

View File

@@ -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,

View File

@@ -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,

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 = { 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,

View File

@@ -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,

View File

@@ -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,

View File

@@ -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;

View File

@@ -37,6 +37,11 @@
#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 {
@@ -45,6 +50,9 @@ struct _RenderModeInterface {
/* 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;
/* the size of the local storage for this rendermode */ /* the size of the local storage for this rendermode */
@@ -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);