vg4->object->mgmt_create()
Create an object-management for an object.
SYNTAX
struct VG_ObjMgmt *
vg4->object->mgmt_create(const char *objid)
FUNCTION PARAMETERS
objid | Object-ID |
RETURN VALUE
Returns created object-management
DESCRIPTION
Create an object-management for an object.
An object-management is mainly used for creating and destroying object-instances of an object.
The functions of the returned object-management must be set individually.
Not all functions must exist, their values may remain NULL:
- f_free() is used for individual freeing if needed
will be called from vg4->object->mgmt_destroy()
- f_run() is used to manage object-instances
will be called from vg4->object->call_mgmt_run()
- f_data() is used to exchange data of the object-management
will be called from vg4->object->call_mgmt_data()
EXAMPLE
obj-otest_mgmt.c /* object-management for "OTEST" */ #define OBJID "OTEST" /* internal data */ struct { int nr_max, nr_curr; } mgmt_data; void new_OTEST_mgmt(int); static void f_run(void *); static int f_data(void *, void *); /* export-function to create a new object-management for object "OTEST" */ void new_OTEST_mgmt(int max) { struct VG_ObjMgmt *omgmt; /* create object-management */ omgmt = vg4->object->mgmt_create(OBJID); /* set functions */ /* f_free() is not needed here */ omgmt->f_data = mgmt_f_data; omgmt->f_run = mgmt_f_run; /* set internal data */ mgmt_data.nr_max = max; mgmt_data.nr_curr = 0; } /* manage object-management, called from vg4->object->call_mgmt_run() */ static void f_run(void *vgame) { /* if current number of object-instances is less then required, create a new one */ if (mgmt_data.nr_curr < mgmt_data.nr_max) { /* create a new object-instance */ [...] mgmt_data.nr_curr++; } } /* exchange data of the object-management, called from vg4->object->call_mgmt_data() */ static int f_data(void *vgame, void *vptr) { /* we just want to return the number of current object-instances */ return mgmt_data.nr_curr; } game.c /* create new object-management of object "OTEST" */ new_OTEST_mgmt(30);