Collider:getShapeList;

This commit is contained in:
bjorn 2017-05-19 22:51:16 -06:00
parent 0fb1bd77d8
commit f3a4ce3931
3 changed files with 27 additions and 0 deletions

View File

@ -27,6 +27,20 @@ int l_lovrColliderRemoveShape(lua_State* L) {
return 0;
}
int l_lovrColliderGetShapeList(lua_State* L) {
Collider* collider = luax_checktype(L, 1, Collider);
lua_newtable(L);
int i;
Shape* shape;
for (i = 1, shape = lovrColliderGetFirstShape(collider); shape; shape = lovrColliderGetNextShape(collider, shape), i++) {
luax_pushshape(L, shape);
lua_rawseti(L, -2, i);
}
return 1;
}
int l_lovrColliderGetUserData(lua_State* L) {
Collider* collider = luax_checktype(L, 1, Collider);
int ref = (int) lovrColliderGetUserData(collider);
@ -395,6 +409,7 @@ const luaL_Reg lovrCollider[] = {
{ "getWorld", l_lovrColliderGetWorld },
{ "addShape", l_lovrColliderAddShape },
{ "removeShape", l_lovrColliderRemoveShape },
{ "getShapeList", l_lovrColliderGetShapeList },
{ "getUserData", l_lovrColliderGetUserData },
{ "setUserData", l_lovrColliderSetUserData },
{ "isKinematic", l_lovrColliderIsKinematic },

View File

@ -205,6 +205,16 @@ void lovrColliderRemoveShape(Collider* collider, Shape* shape) {
}
}
Shape* lovrColliderGetFirstShape(Collider* collider) {
dGeomID geom = dBodyGetFirstGeom(collider->body);
return geom ? dGeomGetData(geom) : NULL;
}
Shape* lovrColliderGetNextShape(Collider* collider, Shape* shape) {
dGeomID geom = dBodyGetNextGeom(shape->id);
return geom ? dGeomGetData(geom) : NULL;
}
void* lovrColliderGetUserData(Collider* collider) {
return collider->userdata;
}

View File

@ -69,6 +69,8 @@ void lovrColliderDestroyData(Collider* collider);
World* lovrColliderGetWorld(Collider* collider);
void lovrColliderAddShape(Collider* collider, Shape* shape);
void lovrColliderRemoveShape(Collider* collider, Shape* shape);
Shape* lovrColliderGetFirstShape(Collider* collider);
Shape* lovrColliderGetNextShape(Collider* collider, Shape* shape);
void* lovrColliderGetUserData(Collider* collider);
void lovrColliderSetUserData(Collider* collider, void* data);
int lovrColliderIsKinematic(Collider* collider);