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* trait_list;
PyObject* labor_list;
bool inited;
};
static PyObject* BuildCreature(DFHack::t_creature& creature)
@ -128,12 +130,45 @@ static PyObject* BuildCreature(DFHack::t_creature& creature)
// 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)
{
if(self != NULL)
{
Py_CLEAR(self->position);
Py_CLEAR(self->c_type);
Py_CLEAR(self->flags1);
Py_CLEAR(self->flags2);
@ -169,9 +204,61 @@ static PyMemberDef DF_Creature_Base_members[] =
{"profession", T_INT, offsetof(DF_Creature_base, profession), 0, ""},
{"custom_profession", T_OBJECT_EX, offsetof(DF_Creature_Base, custom_profession), 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}
};
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 =
{
PyObject_HEAD_INIT(NULL)
@ -202,17 +289,17 @@ static PyTypeObject DF_Creature_Base_type =
0, /* tp_weaklistoffset */
0, /* tp_iter */
0, /* tp_iternext */
DF_Creature_Base_methods, /* tp_methods */
0, /* tp_members */
0, /* tp_methods */
DF_Creature_Base_members, /* tp_members */
DF_Creature_Base_getterSetters, /* tp_getset */
0, /* tp_base */
0, /* tp_dict */
0, /* tp_descr_get */
0, /* tp_descr_set */
0, /* tp_dictoffset */
0, /* tp_init */
(initproc)DF_Creature_Base_init, /* tp_init */
0, /* tp_alloc */
0, /* tp_new */
DF_Creature_base_new, /* tp_new */
};
#endif