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;
|
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[] = {
|
const luaL_Reg lovrCollider[] = {
|
||||||
{ "destroy", l_lovrColliderDestroy },
|
{ "destroy", l_lovrColliderDestroy },
|
||||||
{ "getWorld", l_lovrColliderGetWorld },
|
{ "getWorld", l_lovrColliderGetWorld },
|
||||||
|
@ -465,5 +491,9 @@ const luaL_Reg lovrCollider[] = {
|
||||||
{ "getLinearVelocityFromLocalPoint", l_lovrColliderGetLinearVelocityFromLocalPoint },
|
{ "getLinearVelocityFromLocalPoint", l_lovrColliderGetLinearVelocityFromLocalPoint },
|
||||||
{ "getLinearVelocityFromWorldPoint", l_lovrColliderGetLinearVelocityFromWorldPoint },
|
{ "getLinearVelocityFromWorldPoint", l_lovrColliderGetLinearVelocityFromWorldPoint },
|
||||||
{ "getAABB", l_lovrColliderGetAABB },
|
{ "getAABB", l_lovrColliderGetAABB },
|
||||||
|
{ "getFriction", l_lovrColliderGetFriction },
|
||||||
|
{ "setFriction", l_lovrColliderSetFriction },
|
||||||
|
{ "getRestitution", l_lovrColliderGetRestitution },
|
||||||
|
{ "setRestitution", l_lovrColliderSetRestitution },
|
||||||
{ NULL, NULL }
|
{ 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.mu = friction;
|
||||||
contacts[i].surface.bounce = restitution;
|
contacts[i].surface.bounce = restitution;
|
||||||
contacts[i].surface.mu = dInfinity;
|
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));
|
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->body = dBodyCreate(world->id);
|
||||||
collider->world = world;
|
collider->world = world;
|
||||||
|
collider->friction = 0;
|
||||||
|
collider->restitution = 0;
|
||||||
dBodySetData(collider->body, collider);
|
dBodySetData(collider->body, collider);
|
||||||
vec_init(&collider->shapes);
|
vec_init(&collider->shapes);
|
||||||
vec_init(&collider->joints);
|
vec_init(&collider->joints);
|
||||||
|
@ -495,6 +501,22 @@ void lovrColliderGetLinearVelocityFromWorldPoint(Collider* collider, float wx, f
|
||||||
*vz = velocity[2];
|
*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]) {
|
void lovrColliderGetAABB(Collider* collider, float aabb[6]) {
|
||||||
dGeomID shape = dBodyGetFirstGeom(collider->body);
|
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 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 lovrColliderGetLinearVelocityFromWorldPoint(Collider* collider, float wx, float wy, float wz, float* vx, float* vy, float* vz);
|
||||||
void lovrColliderGetAABB(Collider* collider, float aabb[6]);
|
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 lovrShapeDestroy(const Ref* ref);
|
||||||
void lovrShapeDestroyData(Shape* shape);
|
void lovrShapeDestroyData(Shape* shape);
|
||||||
|
|
Loading…
Reference in New Issue