forked from enlightenment/efl
parent
d432a4faba
commit
595e8c8195
|
@ -20,6 +20,7 @@ struct _EPhysics_World_Callback {
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _EPhysics_World {
|
struct _EPhysics_World {
|
||||||
|
EINA_INLIST;
|
||||||
btBroadphaseInterface* broadphase;
|
btBroadphaseInterface* broadphase;
|
||||||
btDefaultCollisionConfiguration* collision;
|
btDefaultCollisionConfiguration* collision;
|
||||||
btCollisionDispatcher* dispatcher;
|
btCollisionDispatcher* dispatcher;
|
||||||
|
@ -47,7 +48,7 @@ struct _EPhysics_World {
|
||||||
|
|
||||||
static int _ephysics_world_init_count = 0;
|
static int _ephysics_world_init_count = 0;
|
||||||
static int _worlds_running = 0;
|
static int _worlds_running = 0;
|
||||||
static Eina_List *_worlds = NULL;
|
static Eina_Inlist *_worlds = NULL;
|
||||||
static Ecore_Animator *_anim_simulate = NULL;
|
static Ecore_Animator *_anim_simulate = NULL;
|
||||||
|
|
||||||
struct _ephysics_world_ovelap_filter_cb : public btOverlapFilterCallback
|
struct _ephysics_world_ovelap_filter_cb : public btOverlapFilterCallback
|
||||||
|
@ -126,14 +127,13 @@ _ephysics_world_tick_cb(btDynamicsWorld *dynamics_world, btScalar timeStep)
|
||||||
static Eina_Bool
|
static Eina_Bool
|
||||||
_simulate_worlds(void *data)
|
_simulate_worlds(void *data)
|
||||||
{
|
{
|
||||||
Eina_List *l, *lworlds = (Eina_List *) data;
|
Eina_Inlist *lworlds = (Eina_Inlist *) data;
|
||||||
|
EPhysics_World *world;
|
||||||
double time_now;
|
double time_now;
|
||||||
void *ldata;
|
|
||||||
|
|
||||||
EINA_LIST_FOREACH(lworlds, l, ldata)
|
EINA_INLIST_FOREACH(lworlds, world)
|
||||||
{
|
{
|
||||||
double time_now, delta;
|
double time_now, delta;
|
||||||
EPhysics_World *world = (EPhysics_World *) ldata;
|
|
||||||
|
|
||||||
if (!world->running)
|
if (!world->running)
|
||||||
continue;
|
continue;
|
||||||
|
@ -232,8 +232,6 @@ ephysics_world_init(void)
|
||||||
int
|
int
|
||||||
ephysics_world_shutdown(void)
|
ephysics_world_shutdown(void)
|
||||||
{
|
{
|
||||||
void *ldata;
|
|
||||||
|
|
||||||
if (--_ephysics_world_init_count != 0)
|
if (--_ephysics_world_init_count != 0)
|
||||||
return _ephysics_world_init_count;
|
return _ephysics_world_init_count;
|
||||||
|
|
||||||
|
@ -243,9 +241,11 @@ ephysics_world_shutdown(void)
|
||||||
_anim_simulate = NULL;
|
_anim_simulate = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
EINA_LIST_FREE(_worlds, ldata)
|
while (_worlds)
|
||||||
{
|
{
|
||||||
EPhysics_World *world = (EPhysics_World *) ldata;
|
EPhysics_World *world = EINA_INLIST_CONTAINER_GET(
|
||||||
|
_worlds, EPhysics_World);
|
||||||
|
_worlds = eina_inlist_remove(_worlds, _worlds);
|
||||||
ephysics_world_del(world);
|
ephysics_world_del(world);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -327,7 +327,7 @@ ephysics_world_new(void)
|
||||||
goto no_world;
|
goto no_world;
|
||||||
}
|
}
|
||||||
|
|
||||||
_worlds = eina_list_append(_worlds, world);
|
_worlds = eina_inlist_append(_worlds, EINA_INLIST_GET(world));
|
||||||
if (eina_error_get())
|
if (eina_error_get())
|
||||||
{
|
{
|
||||||
ERR("Couldn't add world to worlds list.");
|
ERR("Couldn't add world to worlds list.");
|
||||||
|
@ -435,7 +435,7 @@ ephysics_world_del(EPhysics_World *world)
|
||||||
}
|
}
|
||||||
|
|
||||||
ephysics_world_running_set(world, EINA_FALSE);
|
ephysics_world_running_set(world, EINA_FALSE);
|
||||||
_worlds = eina_list_remove(_worlds, world);
|
_worlds = eina_inlist_remove(_worlds, EINA_INLIST_GET(world));
|
||||||
|
|
||||||
while (world->callbacks)
|
while (world->callbacks)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue