Collider constructor accepts position;

This commit is contained in:
bjorn 2017-06-10 14:17:59 -07:00
parent 011b669892
commit 827c92cc38
3 changed files with 33 additions and 16 deletions

View File

@ -37,27 +37,36 @@ static void raycastCallback(Shape* shape, float x, float y, float z, float nx, f
int l_lovrWorldNewCollider(lua_State* L) { int l_lovrWorldNewCollider(lua_State* L) {
World* world = luax_checktype(L, 1, World); World* world = luax_checktype(L, 1, World);
Collider* collider = lovrColliderCreate(world); float x = luaL_optnumber(L, 2, 0);
float y = luaL_optnumber(L, 3, 0);
float z = luaL_optnumber(L, 4, 0);
Collider* collider = lovrColliderCreate(world, x, y, z);
luax_pushtype(L, Collider, collider); luax_pushtype(L, Collider, collider);
return 1; return 1;
} }
int l_lovrWorldNewBoxCollider(lua_State* L) { int l_lovrWorldNewBoxCollider(lua_State* L) {
World* world = luax_checktype(L, 1, World); World* world = luax_checktype(L, 1, World);
float x = luaL_optnumber(L, 2, 1.f); float x = luaL_optnumber(L, 2, 0);
float y = luaL_optnumber(L, 3, x); float y = luaL_optnumber(L, 3, 0);
float z = luaL_optnumber(L, 4, x); float z = luaL_optnumber(L, 4, 0);
Collider* collider = lovrColliderCreate(world); float sx = luaL_optnumber(L, 5, 1.f);
lovrColliderAddShape(collider, lovrBoxShapeCreate(x, y, z)); float sy = luaL_optnumber(L, 6, sx);
float sz = luaL_optnumber(L, 7, sx);
Collider* collider = lovrColliderCreate(world, x, y, z);
lovrColliderAddShape(collider, lovrBoxShapeCreate(sx, sy, sz));
luax_pushtype(L, Collider, collider); luax_pushtype(L, Collider, collider);
return 1; return 1;
} }
int l_lovrWorldNewCapsuleCollider(lua_State* L) { int l_lovrWorldNewCapsuleCollider(lua_State* L) {
World* world = luax_checktype(L, 1, World); World* world = luax_checktype(L, 1, World);
float radius = luaL_optnumber(L, 2, 1.f); float x = luaL_optnumber(L, 2, 0);
float length = luaL_optnumber(L, 3, 1.f); float y = luaL_optnumber(L, 3, 0);
Collider* collider = lovrColliderCreate(world); float z = luaL_optnumber(L, 4, 0);
float radius = luaL_optnumber(L, 5, 1.f);
float length = luaL_optnumber(L, 6, 1.f);
Collider* collider = lovrColliderCreate(world, x, y, z);
lovrColliderAddShape(collider, lovrCapsuleShapeCreate(radius, length)); lovrColliderAddShape(collider, lovrCapsuleShapeCreate(radius, length));
luax_pushtype(L, Collider, collider); luax_pushtype(L, Collider, collider);
return 1; return 1;
@ -65,9 +74,12 @@ int l_lovrWorldNewCapsuleCollider(lua_State* L) {
int l_lovrWorldNewCylinderCollider(lua_State* L) { int l_lovrWorldNewCylinderCollider(lua_State* L) {
World* world = luax_checktype(L, 1, World); World* world = luax_checktype(L, 1, World);
float radius = luaL_optnumber(L, 2, 1.f); float x = luaL_optnumber(L, 2, 0);
float length = luaL_optnumber(L, 3, 1.f); float y = luaL_optnumber(L, 3, 0);
Collider* collider = lovrColliderCreate(world); float z = luaL_optnumber(L, 4, 0);
float radius = luaL_optnumber(L, 5, 1.f);
float length = luaL_optnumber(L, 6, 1.f);
Collider* collider = lovrColliderCreate(world, x, y, z);
lovrColliderAddShape(collider, lovrCylinderShapeCreate(radius, length)); lovrColliderAddShape(collider, lovrCylinderShapeCreate(radius, length));
luax_pushtype(L, Collider, collider); luax_pushtype(L, Collider, collider);
return 1; return 1;
@ -75,8 +87,11 @@ int l_lovrWorldNewCylinderCollider(lua_State* L) {
int l_lovrWorldNewSphereCollider(lua_State* L) { int l_lovrWorldNewSphereCollider(lua_State* L) {
World* world = luax_checktype(L, 1, World); World* world = luax_checktype(L, 1, World);
float radius = luaL_optnumber(L, 2, 1.f); float x = luaL_optnumber(L, 2, 0);
Collider* collider = lovrColliderCreate(world); float y = luaL_optnumber(L, 3, 0);
float z = luaL_optnumber(L, 4, 0);
float radius = luaL_optnumber(L, 5, 1.f);
Collider* collider = lovrColliderCreate(world, x, y, z);
lovrColliderAddShape(collider, lovrSphereShapeCreate(radius)); lovrColliderAddShape(collider, lovrSphereShapeCreate(radius));
luax_pushtype(L, Collider, collider); luax_pushtype(L, Collider, collider);
return 1; return 1;

View File

@ -257,7 +257,7 @@ int lovrWorldIsCollisionEnabledBetween(World* world, const char* tag1, const cha
return (world->masks[*index1] & (1 << *index2)) && (world->masks[*index2] & (1 << *index1)); return (world->masks[*index1] & (1 << *index2)) && (world->masks[*index2] & (1 << *index1));
} }
Collider* lovrColliderCreate(World* world) { Collider* lovrColliderCreate(World* world, float x, float y, float z) {
if (!world) { if (!world) {
error("No world specified"); error("No world specified");
} }
@ -274,6 +274,8 @@ Collider* lovrColliderCreate(World* world) {
vec_init(&collider->shapes); vec_init(&collider->shapes);
vec_init(&collider->joints); vec_init(&collider->joints);
lovrColliderSetPosition(collider, x, y, z);
return collider; return collider;
} }

View File

@ -101,7 +101,7 @@ int lovrWorldDisableCollisionBetween(World* world, const char* tag1, const char*
int lovrWorldEnableCollisionBetween(World* world, const char* tag1, const char* tag2); int lovrWorldEnableCollisionBetween(World* world, const char* tag1, const char* tag2);
int lovrWorldIsCollisionEnabledBetween(World* world, const char* tag1, const char* tag); int lovrWorldIsCollisionEnabledBetween(World* world, const char* tag1, const char* tag);
Collider* lovrColliderCreate(); Collider* lovrColliderCreate(World* world, float x, float y, float z);
void lovrColliderDestroy(const Ref* ref); void lovrColliderDestroy(const Ref* ref);
void lovrColliderDestroyData(Collider* collider); void lovrColliderDestroyData(Collider* collider);
World* lovrColliderGetWorld(Collider* collider); World* lovrColliderGetWorld(Collider* collider);