mirror of https://github.com/bjornbytes/lovr.git
Merge pull request #249 from jmiskovic/init-inertia
Initialize inertia information for new colliders
This commit is contained in:
commit
f811be431f
|
@ -60,6 +60,7 @@ static int l_lovrWorldNewBoxCollider(lua_State* L) {
|
|||
Collider* collider = lovrColliderCreate(world, x, y, z);
|
||||
BoxShape* shape = lovrBoxShapeCreate(sx, sy, sz);
|
||||
lovrColliderAddShape(collider, shape);
|
||||
lovrColliderInitInertia(collider, shape);
|
||||
luax_pushtype(L, Collider, collider);
|
||||
lovrRelease(Collider, collider);
|
||||
lovrRelease(Shape, shape);
|
||||
|
@ -76,6 +77,7 @@ static int l_lovrWorldNewCapsuleCollider(lua_State* L) {
|
|||
Collider* collider = lovrColliderCreate(world, x, y, z);
|
||||
CapsuleShape* shape = lovrCapsuleShapeCreate(radius, length);
|
||||
lovrColliderAddShape(collider, shape);
|
||||
lovrColliderInitInertia(collider, shape);
|
||||
luax_pushtype(L, Collider, collider);
|
||||
lovrRelease(Collider, collider);
|
||||
lovrRelease(Shape, shape);
|
||||
|
@ -92,6 +94,7 @@ static int l_lovrWorldNewCylinderCollider(lua_State* L) {
|
|||
Collider* collider = lovrColliderCreate(world, x, y, z);
|
||||
CylinderShape* shape = lovrCylinderShapeCreate(radius, length);
|
||||
lovrColliderAddShape(collider, shape);
|
||||
lovrColliderInitInertia(collider, shape);
|
||||
luax_pushtype(L, Collider, collider);
|
||||
lovrRelease(Collider, collider);
|
||||
lovrRelease(Shape, shape);
|
||||
|
@ -107,6 +110,7 @@ static int l_lovrWorldNewSphereCollider(lua_State* L) {
|
|||
Collider* collider = lovrColliderCreate(world, x, y, z);
|
||||
SphereShape* shape = lovrSphereShapeCreate(radius);
|
||||
lovrColliderAddShape(collider, shape);
|
||||
lovrColliderInitInertia(collider, shape);
|
||||
luax_pushtype(L, Collider, collider);
|
||||
lovrRelease(Collider, collider);
|
||||
lovrRelease(Shape, shape);
|
||||
|
|
|
@ -332,6 +332,14 @@ void lovrColliderDestroyData(Collider* collider) {
|
|||
lovrRelease(Collider, collider);
|
||||
}
|
||||
|
||||
void lovrColliderInitInertia(Collider* collider, Shape * shape) {
|
||||
// compute inertia matrix for default density
|
||||
const float density = 1.0f;
|
||||
float cx, cy, cz, mass, inertia[6];
|
||||
lovrShapeGetMass(shape, density, &cx, &cy, &cz, &mass, inertia);
|
||||
lovrColliderSetMassData(collider, cx, cy, cz, mass, inertia);
|
||||
}
|
||||
|
||||
World* lovrColliderGetWorld(Collider* collider) {
|
||||
return collider->world;
|
||||
}
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
#define MAX_CONTACTS 4
|
||||
#define MAX_CONTACTS 10
|
||||
#define MAX_TAGS 16
|
||||
#define NO_TAG ~0u
|
||||
|
||||
|
@ -111,6 +111,7 @@ Collider* lovrColliderInit(Collider* collider, World* world, float x, float y, f
|
|||
#define lovrColliderCreate(...) lovrColliderInit(lovrAlloc(Collider), __VA_ARGS__)
|
||||
void lovrColliderDestroy(void* ref);
|
||||
void lovrColliderDestroyData(Collider* collider);
|
||||
void lovrColliderInitInertia(Collider* collider, Shape * shape);
|
||||
World* lovrColliderGetWorld(Collider* collider);
|
||||
void lovrColliderAddShape(Collider* collider, Shape* shape);
|
||||
void lovrColliderRemoveShape(Collider* collider, Shape* shape);
|
||||
|
|
Loading…
Reference in New Issue