mirror of https://github.com/bjornbytes/lovr.git
Move Shape:is/setSensor and Shape:is/setEnabled to Collider;
This commit is contained in:
parent
1a8d05b8b4
commit
d876de66cb
|
@ -17,6 +17,20 @@ static int l_lovrColliderIsDestroyed(lua_State* L) {
|
|||
return 1;
|
||||
}
|
||||
|
||||
static int l_lovrColliderIsEnabled(lua_State* L) {
|
||||
Collider* collider = luax_checktype(L, 1, Collider);
|
||||
bool enabled = lovrColliderIsEnabled(collider);
|
||||
lua_pushboolean(L, enabled);
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int l_lovrColliderSetEnabled(lua_State* L) {
|
||||
Collider* collider = luax_checktype(L, 1, Collider);
|
||||
bool enable = lua_toboolean(L, 2);
|
||||
lovrColliderSetEnabled(collider, enable);
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int l_lovrColliderGetWorld(lua_State* L) {
|
||||
Collider* collider = luax_checktype(L, 1, Collider);
|
||||
World* world = lovrColliderGetWorld(collider);
|
||||
|
@ -123,6 +137,19 @@ static int l_lovrColliderSetKinematic(lua_State* L) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int l_lovrColliderIsSensor(lua_State* L) {
|
||||
Collider* collider = luax_checktype(L, 1, Collider);
|
||||
lua_pushboolean(L, lovrColliderIsSensor(collider));
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int l_lovrColliderSetSensor(lua_State* L) {
|
||||
Collider* collider = luax_checktype(L, 1, Collider);
|
||||
bool sensor = lua_toboolean(L, 2);
|
||||
lovrColliderSetSensor(collider, sensor);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int l_lovrColliderIsContinuous(lua_State* L) {
|
||||
Collider* collider = luax_checktype(L, 1, Collider);
|
||||
bool continuous = lovrColliderIsContinuous(collider);
|
||||
|
@ -585,6 +612,8 @@ static int l_lovrColliderSetGravityIgnored(lua_State* L) {
|
|||
const luaL_Reg lovrCollider[] = {
|
||||
{ "destroy", l_lovrColliderDestroy },
|
||||
{ "isDestroyed", l_lovrColliderIsDestroyed },
|
||||
{ "isEnabled", l_lovrColliderIsEnabled },
|
||||
{ "setEnabled", l_lovrColliderSetEnabled },
|
||||
{ "getWorld", l_lovrColliderGetWorld },
|
||||
{ "getShape", l_lovrColliderGetShape },
|
||||
{ "setShape", l_lovrColliderSetShape },
|
||||
|
@ -595,6 +624,8 @@ const luaL_Reg lovrCollider[] = {
|
|||
{ "setUserData", l_lovrColliderSetUserData },
|
||||
{ "isKinematic", l_lovrColliderIsKinematic },
|
||||
{ "setKinematic", l_lovrColliderSetKinematic },
|
||||
{ "isSensor", l_lovrColliderIsSensor },
|
||||
{ "setSensor", l_lovrColliderSetSensor },
|
||||
{ "isContinuous", l_lovrColliderIsContinuous },
|
||||
{ "setContinuous", l_lovrColliderSetContinuous },
|
||||
{ "getGravityScale", l_lovrColliderGetGravityScale },
|
||||
|
|
|
@ -229,32 +229,6 @@ static int l_lovrShapeGetType(lua_State* L) {
|
|||
return 1;
|
||||
}
|
||||
|
||||
static int l_lovrShapeIsEnabled(lua_State* L) {
|
||||
Shape* shape = luax_checkshape(L, 1);
|
||||
lua_pushboolean(L, lovrShapeIsEnabled(shape));
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int l_lovrShapeSetEnabled(lua_State* L) {
|
||||
Shape* shape = luax_checkshape(L, 1);
|
||||
bool enabled = lua_toboolean(L, 2);
|
||||
lovrShapeSetEnabled(shape, enabled);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int l_lovrShapeIsSensor(lua_State* L) {
|
||||
Shape* shape = luax_checkshape(L, 1);
|
||||
lua_pushboolean(L, lovrShapeIsSensor(shape));
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int l_lovrShapeSetSensor(lua_State* L) {
|
||||
Shape* shape = luax_checkshape(L, 1);
|
||||
bool sensor = lua_toboolean(L, 2);
|
||||
lovrShapeSetSensor(shape, sensor);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void luax_pushshapestash(lua_State* L) {
|
||||
lua_getfield(L, LUA_REGISTRYINDEX, "_lovrshapestash");
|
||||
|
||||
|
@ -321,10 +295,6 @@ static int l_lovrShapeGetAABB(lua_State* L) {
|
|||
#define lovrShape \
|
||||
{ "destroy", l_lovrShapeDestroy }, \
|
||||
{ "getType", l_lovrShapeGetType }, \
|
||||
{ "isEnabled", l_lovrShapeIsEnabled }, \
|
||||
{ "setEnabled", l_lovrShapeSetEnabled }, \
|
||||
{ "isSensor", l_lovrShapeIsSensor }, \
|
||||
{ "setSensor", l_lovrShapeSetSensor }, \
|
||||
{ "getUserData", l_lovrShapeGetUserData }, \
|
||||
{ "setUserData", l_lovrShapeSetUserData }, \
|
||||
{ "getMass", l_lovrShapeGetMass }, \
|
||||
|
|
|
@ -90,6 +90,8 @@ Collider* lovrColliderCreate(World* world, Shape* shape, float x, float y, float
|
|||
void lovrColliderDestroy(void* ref);
|
||||
void lovrColliderDestroyData(Collider* collider);
|
||||
bool lovrColliderIsDestroyed(Collider* collider);
|
||||
bool lovrColliderIsEnabled(Collider* collider);
|
||||
void lovrColliderSetEnabled(Collider* collider, bool enable);
|
||||
void lovrColliderInitInertia(Collider* collider, Shape* shape);
|
||||
World* lovrColliderGetWorld(Collider* collider);
|
||||
Collider* lovrColliderGetNext(Collider* collider);
|
||||
|
@ -106,6 +108,8 @@ float lovrColliderGetRestitution(Collider* collider);
|
|||
void lovrColliderSetRestitution(Collider* collider, float restitution);
|
||||
bool lovrColliderIsKinematic(Collider* collider);
|
||||
void lovrColliderSetKinematic(Collider* collider, bool kinematic);
|
||||
bool lovrColliderIsSensor(Collider* collider);
|
||||
void lovrColliderSetSensor(Collider* collider, bool sensor);
|
||||
bool lovrColliderIsContinuous(Collider* collider);
|
||||
void lovrColliderSetContinuous(Collider* collider, bool continuous);
|
||||
float lovrColliderGetGravityScale(Collider* collider);
|
||||
|
@ -160,10 +164,6 @@ typedef enum {
|
|||
void lovrShapeDestroy(void* ref);
|
||||
void lovrShapeDestroyData(Shape* shape);
|
||||
ShapeType lovrShapeGetType(Shape* shape);
|
||||
bool lovrShapeIsEnabled(Shape* shape);
|
||||
void lovrShapeSetEnabled(Shape* shape, bool enabled);
|
||||
bool lovrShapeIsSensor(Shape* shape);
|
||||
void lovrShapeSetSensor(Shape* shape, bool sensor);
|
||||
void lovrShapeGetMass(Shape* shape, float density, float* cx, float* cy, float* cz, float* mass, float inertia[6]);
|
||||
void lovrShapeGetAABB(Shape* shape, float aabb[6]);
|
||||
|
||||
|
|
|
@ -399,6 +399,18 @@ bool lovrColliderIsDestroyed(Collider* collider) {
|
|||
return !collider->body;
|
||||
}
|
||||
|
||||
bool lovrColliderIsEnabled(Collider* collider) {
|
||||
return JPH_BodyInterface_IsAdded(collider->world->bodies, collider->id);
|
||||
}
|
||||
|
||||
void lovrColliderSetEnabled(Collider* collider, bool enable) {
|
||||
if (enable && !lovrColliderIsEnabled(collider)) {
|
||||
JPH_BodyInterface_AddBody(collider->world->bodies, collider->id, JPH_Activation_DontActivate);
|
||||
} else if (!enable && lovrColliderIsEnabled(collider)) {
|
||||
JPH_BodyInterface_RemoveBody(collider->world->bodies, collider->id);
|
||||
}
|
||||
}
|
||||
|
||||
void lovrColliderInitInertia(Collider* collider, Shape* shape) {
|
||||
//
|
||||
}
|
||||
|
@ -538,6 +550,14 @@ void lovrColliderSetKinematic(Collider* collider, bool kinematic) {
|
|||
}
|
||||
}
|
||||
|
||||
bool lovrColliderIsSensor(Collider* collider) {
|
||||
return JPH_Body_IsSensor(collider->body);
|
||||
}
|
||||
|
||||
void lovrColliderSetSensor(Collider* collider, bool sensor) {
|
||||
JPH_Body_SetIsSensor(collider->body, sensor);
|
||||
}
|
||||
|
||||
bool lovrColliderIsContinuous(Collider* collider) {
|
||||
return JPH_BodyInterface_GetMotionQuality(collider->world->bodies, collider->id) == JPH_MotionQuality_LinearCast;
|
||||
}
|
||||
|
@ -825,24 +845,6 @@ ShapeType lovrShapeGetType(Shape* shape) {
|
|||
return shape->type;
|
||||
}
|
||||
|
||||
bool lovrShapeIsEnabled(Shape* shape) {
|
||||
return true;
|
||||
}
|
||||
|
||||
void lovrShapeSetEnabled(Shape* shape, bool enabled) {
|
||||
if (!enabled) {
|
||||
lovrLog(LOG_WARN, "PHY", "Jolt doesn't support disabling shapes");
|
||||
}
|
||||
}
|
||||
|
||||
bool lovrShapeIsSensor(Shape* shape) {
|
||||
lovrThrow("NYI");
|
||||
}
|
||||
|
||||
void lovrShapeSetSensor(Shape* shape, bool sensor) {
|
||||
lovrThrow("NYI");
|
||||
}
|
||||
|
||||
void lovrShapeGetMass(Shape* shape, float density, float* cx, float* cy, float* cz, float* mass, float inertia[6]) {
|
||||
//
|
||||
}
|
||||
|
|
|
@ -26,6 +26,7 @@ struct Collider {
|
|||
arr_t(Joint*) joints;
|
||||
float friction;
|
||||
float restitution;
|
||||
bool sensor;
|
||||
};
|
||||
|
||||
struct Shape {
|
||||
|
@ -35,7 +36,6 @@ struct Shape {
|
|||
Collider* collider;
|
||||
void* vertices;
|
||||
void* indices;
|
||||
bool sensor;
|
||||
};
|
||||
|
||||
struct Joint {
|
||||
|
@ -279,7 +279,7 @@ int lovrWorldCollide(World* world, Shape* a, Shape* b, float friction, float res
|
|||
|
||||
int contactCount = dCollide(a->id, b->id, MAX_CONTACTS, &contacts[0].geom, sizeof(dContact));
|
||||
|
||||
if (!a->sensor && !b->sensor) {
|
||||
if (!colliderA->sensor && !colliderB->sensor) {
|
||||
for (int c = 0; c < contactCount; c++) {
|
||||
dJointID joint = dJointCreateContact(world->id, world->contactGroup, &contacts[c]);
|
||||
dJointAttach(joint, colliderA->body, colliderB->body);
|
||||
|
@ -500,6 +500,14 @@ bool lovrColliderIsDestroyed(Collider* collider) {
|
|||
return !collider->body;
|
||||
}
|
||||
|
||||
bool lovrColliderIsEnabled(Collider* collider) {
|
||||
return true;
|
||||
}
|
||||
|
||||
void lovrColliderSetEnabled(Collider* collider, bool enable) {
|
||||
//
|
||||
}
|
||||
|
||||
void lovrColliderInitInertia(Collider* collider, Shape* shape) {
|
||||
// compute inertia matrix for default density
|
||||
const float density = 1.0f;
|
||||
|
@ -617,6 +625,14 @@ void lovrColliderSetKinematic(Collider* collider, bool kinematic) {
|
|||
}
|
||||
}
|
||||
|
||||
bool lovrColliderIsSensor(Collider* collider) {
|
||||
return collider->sensor;
|
||||
}
|
||||
|
||||
void lovrColliderSetSensor(Collider* collider, bool sensor) {
|
||||
collider->sensor = sensor;
|
||||
}
|
||||
|
||||
bool lovrColliderIsContinuous(Collider* collider) {
|
||||
return false;
|
||||
}
|
||||
|
@ -895,26 +911,6 @@ Collider* lovrShapeGetCollider(Shape* shape) {
|
|||
return shape->collider;
|
||||
}
|
||||
|
||||
bool lovrShapeIsEnabled(Shape* shape) {
|
||||
return dGeomIsEnabled(shape->id);
|
||||
}
|
||||
|
||||
void lovrShapeSetEnabled(Shape* shape, bool enabled) {
|
||||
if (enabled) {
|
||||
dGeomEnable(shape->id);
|
||||
} else {
|
||||
dGeomDisable(shape->id);
|
||||
}
|
||||
}
|
||||
|
||||
bool lovrShapeIsSensor(Shape* shape) {
|
||||
return shape->sensor;
|
||||
}
|
||||
|
||||
void lovrShapeSetSensor(Shape* shape, bool sensor) {
|
||||
shape->sensor = sensor;
|
||||
}
|
||||
|
||||
void lovrShapeGetMass(Shape* shape, float density, float* cx, float* cy, float* cz, float* mass, float inertia[6]) {
|
||||
dMass m;
|
||||
dMassSetZero(&m);
|
||||
|
|
Loading…
Reference in New Issue