creature base type defined

develop
doomchild 2010-04-06 18:13:42 -05:00
parent 0ced8164aa
commit ea8290fa6d
1 changed files with 92 additions and 5 deletions

@ -69,6 +69,8 @@ struct DF_Creature_Base
PyObject* like_list; PyObject* like_list;
PyObject* trait_list; PyObject* trait_list;
PyObject* labor_list; PyObject* labor_list;
bool inited;
}; };
static PyObject* BuildCreature(DFHack::t_creature& creature) static PyObject* BuildCreature(DFHack::t_creature& creature)
@ -128,12 +130,45 @@ static PyObject* BuildCreature(DFHack::t_creature& creature)
// API type Allocation, Deallocation, and Initialization // API type Allocation, Deallocation, and Initialization
static PyObject* DF_Creature_Base_new(PyTypeObject* type, PyObject* args, PyObject* kwds)
{
DF_Creature_Base* self;
self = (DF_Creature_Base*)type->tp_alloc(type, 0);
if(self != NULL)
self->inited = false;
return (PyObject*)self;
}
static int DF_Creature_Base_init(DF_Creature_Base* self, PyObject* args, PyObject* kwds)
{
if(!inited)
{
self->origin = NULL;
self->flags1 = NULL;
self->flags2 = NULL;
self->name = NULL;
self->squad_name = NULL;
self->artifact_name = NULL;
self->custom_profession = PyString_FromString("");
self->labor_list = NULL;
self->trait_list = NULL;
self->skill_list = NULL;
self->like_list = NULL;
}
return 0;
}
static void DF_Creature_Base_dealloc(DF_Creature_Base* self) static void DF_Creature_Base_dealloc(DF_Creature_Base* self)
{ {
if(self != NULL) if(self != NULL)
{ {
Py_CLEAR(self->position); Py_CLEAR(self->position);
Py_CLEAR(self->c_type);
Py_CLEAR(self->flags1); Py_CLEAR(self->flags1);
Py_CLEAR(self->flags2); Py_CLEAR(self->flags2);
@ -169,9 +204,61 @@ static PyMemberDef DF_Creature_Base_members[] =
{"profession", T_INT, offsetof(DF_Creature_base, profession), 0, ""}, {"profession", T_INT, offsetof(DF_Creature_base, profession), 0, ""},
{"custom_profession", T_OBJECT_EX, offsetof(DF_Creature_Base, custom_profession), 0, ""}, {"custom_profession", T_OBJECT_EX, offsetof(DF_Creature_Base, custom_profession), 0, ""},
{"happiness", T_SHORT, offsetof(DF_Creature_Base, happiness), 0, ""}, {"happiness", T_SHORT, offsetof(DF_Creature_Base, happiness), 0, ""},
{"id", T_UINT, offsetof(DF_Creature_Base, c_id), 0, ""},
{"agility", T_UINT, offsetof(DF_Creature_Base, agility), 0, ""},
{"strength", T_UINT, offsetof(DF_Creature_Base, strength), 0, ""},
{"toughness", T_UINT, offsetof(DF_Creature_Base, toughness), 0, ""},
{"money", T_UINT, offsetof(DF_Creature_Base, money), 0, ""},
{"squad_leader_id", T_INT, offsetof(DF_Creature_Base, squad_leader_id), 0, ""},
{"sex", T_BYTE, offsetof(DF_Creature_Base, sex), 0, ""},
{"pregnancy_timer", T_UINT, offsetof(DF_Creature_Base, pregnancy_timer), 0, ""},
{"blood_max", T_INT, offsetof(DF_Creature_Base, blood_max), 0, ""},
{"blood_current", T_INT, offsetof(DF_Creature_Base, blood_current), 0, ""},
{"bleed_rate", T_UINT, offsetof(DF_Creature_Base, bleed_rate), 0, ""},
{NULL} {NULL}
}; };
static PyObject* DF_Creature_Base_getLabors(DF_Creature_Base* self, void* closure)
{
if(self->labor_list != NULL)
return self->labor_list;
Py_RETURN_NONE;
}
static PyObject* DF_Creature_Base_getTraits(DF_Creature_Base* self, void* closure)
{
if(self->trait_list != NULL)
return self->trait_list;
Py_RETURN_NONE;
}
static PyObject* DF_Creature_Base_getSkills(DF_Creature_Base* self, void* closure)
{
if(self->skill_list != NULL)
return self->skill_list;
Py_RETURN_NONE;
}
static PyObject* DF_Creature_Base_getLikes(DF_Creature_Base* self, void* closure)
{
if(self->like_list != NULL)
return self->like_list;
Py_RETURN_NONE;
}
static PyGetSetDef DF_Creature_Base_getterSetters[] =
{
{"labors", (getter)DF_Creature_Base_getLabors, NULL, "labors", NULL},
{"traits", (getter)DF_Creature_Base_getTraits, NULL, "traits", NULL},
{"skills", (getter)DF_Creature_Base_getSkills, NULL, "skills", NULL},
{"likes", (getter)DF_Creature_Base_getLikes, NULL, "likes", NULL},
{NULL} // Sentinel
};
static PyTypeObject DF_Creature_Base_type = static PyTypeObject DF_Creature_Base_type =
{ {
PyObject_HEAD_INIT(NULL) PyObject_HEAD_INIT(NULL)
@ -202,17 +289,17 @@ static PyTypeObject DF_Creature_Base_type =
0, /* tp_weaklistoffset */ 0, /* tp_weaklistoffset */
0, /* tp_iter */ 0, /* tp_iter */
0, /* tp_iternext */ 0, /* tp_iternext */
DF_Creature_Base_methods, /* tp_methods */ 0, /* tp_methods */
0, /* tp_members */ DF_Creature_Base_members, /* tp_members */
DF_Creature_Base_getterSetters, /* tp_getset */ DF_Creature_Base_getterSetters, /* tp_getset */
0, /* tp_base */ 0, /* tp_base */
0, /* tp_dict */ 0, /* tp_dict */
0, /* tp_descr_get */ 0, /* tp_descr_get */
0, /* tp_descr_set */ 0, /* tp_descr_set */
0, /* tp_dictoffset */ 0, /* tp_dictoffset */
0, /* tp_init */ (initproc)DF_Creature_Base_init, /* tp_init */
0, /* tp_alloc */ 0, /* tp_alloc */
0, /* tp_new */ DF_Creature_base_new, /* tp_new */
}; };
#endif #endif