World:getColliders;

This commit is contained in:
bjorn 2020-05-11 12:05:30 -06:00
parent 95635b4b02
commit dab0be7055
3 changed files with 27 additions and 0 deletions

View File

@ -110,6 +110,27 @@ static int l_lovrWorldNewSphereCollider(lua_State* L) {
return 1;
}
static int l_lovrWorldGetColliders(lua_State* L) {
World* world = luax_checktype(L, 1, World);
if (lua_istable(L, 2)) {
lua_settop(L, 2);
} else {
lua_newtable(L);
}
Collider* collider = lovrWorldGetFirstCollider(world);
int index = 1;
while (collider) {
luax_pushtype(L, Collider, collider);
lua_rawseti(L, -2, index++);
collider = collider->next;
}
return 1;
}
static int l_lovrWorldDestroy(lua_State* L) {
World* world = luax_checktype(L, 1, World);
lovrWorldDestroyData(world);
@ -255,6 +276,7 @@ const luaL_Reg lovrWorld[] = {
{ "newCapsuleCollider", l_lovrWorldNewCapsuleCollider },
{ "newCylinderCollider", l_lovrWorldNewCylinderCollider },
{ "newSphereCollider", l_lovrWorldNewSphereCollider },
{ "getColliders", l_lovrWorldGetColliders },
{ "destroy", l_lovrWorldDestroy },
{ "update", l_lovrWorldUpdate },
{ "computeOverlaps", l_lovrWorldComputeOverlaps },

View File

@ -179,6 +179,10 @@ int lovrWorldCollide(World* world, Shape* a, Shape* b, float friction, float res
return contactCount;
}
Collider* lovrWorldGetFirstCollider(World* world) {
return world->head;
}
void lovrWorldGetGravity(World* world, float* x, float* y, float* z) {
dReal gravity[3];
dWorldGetGravity(world->id, gravity);

View File

@ -94,6 +94,7 @@ void lovrWorldUpdate(World* world, float dt, CollisionResolver resolver, void* u
void lovrWorldComputeOverlaps(World* world);
int lovrWorldGetNextOverlap(World* world, Shape** a, Shape** b);
int lovrWorldCollide(World* world, Shape* a, Shape* b, float friction, float restitution);
Collider* lovrWorldGetFirstCollider(World* world);
void lovrWorldGetGravity(World* world, float* x, float* y, float* z);
void lovrWorldSetGravity(World* world, float x, float y, float z);
void lovrWorldGetLinearDamping(World* world, float* damping, float* threshold);