mirror of https://github.com/bjornbytes/lovr.git
Collider:setFriction; Collider:setRestitution;
This commit is contained in:
parent
a32eb38026
commit
3b4996b7d0
|
@ -423,6 +423,32 @@ int l_lovrColliderGetAABB(lua_State* L) {
|
|||
return 6;
|
||||
}
|
||||
|
||||
int l_lovrColliderGetFriction(lua_State* L) {
|
||||
Collider* collider = luax_checktype(L, 1, Collider);
|
||||
lua_pushnumber(L, lovrColliderGetFriction(collider));
|
||||
return 1;
|
||||
}
|
||||
|
||||
int l_lovrColliderSetFriction(lua_State* L) {
|
||||
Collider* collider = luax_checktype(L, 1, Collider);
|
||||
float friction = luaL_checknumber(L, 2);
|
||||
lovrColliderSetFriction(collider, friction);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int l_lovrColliderGetRestitution(lua_State* L) {
|
||||
Collider* collider = luax_checktype(L, 1, Collider);
|
||||
lua_pushnumber(L, lovrColliderGetRestitution(collider));
|
||||
return 1;
|
||||
}
|
||||
|
||||
int l_lovrColliderSetRestitution(lua_State* L) {
|
||||
Collider* collider = luax_checktype(L, 1, Collider);
|
||||
float restitution = luaL_checknumber(L, 2);
|
||||
lovrColliderSetRestitution(collider, restitution);
|
||||
return 0;
|
||||
}
|
||||
|
||||
const luaL_Reg lovrCollider[] = {
|
||||
{ "destroy", l_lovrColliderDestroy },
|
||||
{ "getWorld", l_lovrColliderGetWorld },
|
||||
|
@ -465,5 +491,9 @@ const luaL_Reg lovrCollider[] = {
|
|||
{ "getLinearVelocityFromLocalPoint", l_lovrColliderGetLinearVelocityFromLocalPoint },
|
||||
{ "getLinearVelocityFromWorldPoint", l_lovrColliderGetLinearVelocityFromWorldPoint },
|
||||
{ "getAABB", l_lovrColliderGetAABB },
|
||||
{ "getFriction", l_lovrColliderGetFriction },
|
||||
{ "setFriction", l_lovrColliderSetFriction },
|
||||
{ "getRestitution", l_lovrColliderGetRestitution },
|
||||
{ "setRestitution", l_lovrColliderSetRestitution },
|
||||
{ NULL, NULL }
|
||||
};
|
||||
|
|
|
@ -129,6 +129,10 @@ int lovrWorldCollide(World* world, Shape* a, Shape* b, float friction, float res
|
|||
contacts[i].surface.mu = friction;
|
||||
contacts[i].surface.bounce = restitution;
|
||||
contacts[i].surface.mu = dInfinity;
|
||||
|
||||
if (restitution > 0) {
|
||||
contacts[i].surface.mode |= dContactBounce;
|
||||
}
|
||||
}
|
||||
|
||||
int contactCount = dCollide(a->id, b->id, MAX_CONTACTS, &contacts[0].geom, sizeof(dContact));
|
||||
|
@ -203,6 +207,8 @@ Collider* lovrColliderCreate(World* world) {
|
|||
|
||||
collider->body = dBodyCreate(world->id);
|
||||
collider->world = world;
|
||||
collider->friction = 0;
|
||||
collider->restitution = 0;
|
||||
dBodySetData(collider->body, collider);
|
||||
vec_init(&collider->shapes);
|
||||
vec_init(&collider->joints);
|
||||
|
@ -495,6 +501,22 @@ void lovrColliderGetLinearVelocityFromWorldPoint(Collider* collider, float wx, f
|
|||
*vz = velocity[2];
|
||||
}
|
||||
|
||||
float lovrColliderGetFriction(Collider* collider) {
|
||||
return collider->friction;
|
||||
}
|
||||
|
||||
void lovrColliderSetFriction(Collider* collider, float friction) {
|
||||
collider->friction = friction;
|
||||
}
|
||||
|
||||
float lovrColliderGetRestitution(Collider* collider) {
|
||||
return collider->restitution;
|
||||
}
|
||||
|
||||
void lovrColliderSetRestitution(Collider* collider, float restitution) {
|
||||
collider->restitution = restitution;
|
||||
}
|
||||
|
||||
void lovrColliderGetAABB(Collider* collider, float aabb[6]) {
|
||||
dGeomID shape = dBodyGetFirstGeom(collider->body);
|
||||
|
||||
|
|
|
@ -136,6 +136,10 @@ void lovrColliderGetWorldVector(Collider* collider, float x, float y, float z, f
|
|||
void lovrColliderGetLinearVelocityFromLocalPoint(Collider* collider, float x, float y, float z, float* vx, float* vy, float* vz);
|
||||
void lovrColliderGetLinearVelocityFromWorldPoint(Collider* collider, float wx, float wy, float wz, float* vx, float* vy, float* vz);
|
||||
void lovrColliderGetAABB(Collider* collider, float aabb[6]);
|
||||
float lovrColliderGetFriction(Collider* collider);
|
||||
void lovrColliderSetFriction(Collider* collider, float friction);
|
||||
float lovrColliderGetRestitution(Collider* collider);
|
||||
void lovrColliderSetRestitution(Collider* collider, float restitution);
|
||||
|
||||
void lovrShapeDestroy(const Ref* ref);
|
||||
void lovrShapeDestroyData(Shape* shape);
|
||||
|
|
Loading…
Reference in New Issue