mirror of https://github.com/bjornbytes/lovr.git
Collider:getAABB;
This commit is contained in:
parent
876a8406b1
commit
6bfea99be6
|
@ -413,6 +413,16 @@ int l_lovrColliderGetLinearVelocityFromWorldPoint(lua_State* L) {
|
||||||
return 3;
|
return 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int l_lovrColliderGetAABB(lua_State* L) {
|
||||||
|
Collider* collider = luax_checktype(L, 1, Collider);
|
||||||
|
float aabb[6];
|
||||||
|
lovrColliderGetAABB(collider, aabb);
|
||||||
|
for (int i = 0; i < 6; i++) {
|
||||||
|
lua_pushnumber(L, aabb[i]);
|
||||||
|
}
|
||||||
|
return 6;
|
||||||
|
}
|
||||||
|
|
||||||
const luaL_Reg lovrCollider[] = {
|
const luaL_Reg lovrCollider[] = {
|
||||||
{ "destroy", l_lovrColliderDestroy },
|
{ "destroy", l_lovrColliderDestroy },
|
||||||
{ "getWorld", l_lovrColliderGetWorld },
|
{ "getWorld", l_lovrColliderGetWorld },
|
||||||
|
@ -454,5 +464,6 @@ const luaL_Reg lovrCollider[] = {
|
||||||
{ "getWorldVector", l_lovrColliderGetWorldVector },
|
{ "getWorldVector", l_lovrColliderGetWorldVector },
|
||||||
{ "getLinearVelocityFromLocalPoint", l_lovrColliderGetLinearVelocityFromLocalPoint },
|
{ "getLinearVelocityFromLocalPoint", l_lovrColliderGetLinearVelocityFromLocalPoint },
|
||||||
{ "getLinearVelocityFromWorldPoint", l_lovrColliderGetLinearVelocityFromWorldPoint },
|
{ "getLinearVelocityFromWorldPoint", l_lovrColliderGetLinearVelocityFromWorldPoint },
|
||||||
|
{ "getAABB", l_lovrColliderGetAABB },
|
||||||
{ NULL, NULL }
|
{ NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
|
@ -495,6 +495,28 @@ void lovrColliderGetLinearVelocityFromWorldPoint(Collider* collider, float wx, f
|
||||||
*vz = velocity[2];
|
*vz = velocity[2];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void lovrColliderGetAABB(Collider* collider, float aabb[6]) {
|
||||||
|
dGeomID shape = dBodyGetFirstGeom(collider->body);
|
||||||
|
|
||||||
|
if (!shape) {
|
||||||
|
memset(aabb, 0, 6 * sizeof(float));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
dGeomGetAABB(shape, aabb);
|
||||||
|
|
||||||
|
float otherAABB[6];
|
||||||
|
while ((shape = dBodyGetNextGeom(shape)) != NULL) {
|
||||||
|
dGeomGetAABB(shape, otherAABB);
|
||||||
|
aabb[0] = MIN(aabb[0], otherAABB[0]);
|
||||||
|
aabb[1] = MAX(aabb[0], otherAABB[0]);
|
||||||
|
aabb[2] = MIN(aabb[2], otherAABB[2]);
|
||||||
|
aabb[3] = MAX(aabb[3], otherAABB[3]);
|
||||||
|
aabb[4] = MIN(aabb[4], otherAABB[4]);
|
||||||
|
aabb[5] = MAX(aabb[5], otherAABB[5]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void lovrShapeDestroy(const Ref* ref) {
|
void lovrShapeDestroy(const Ref* ref) {
|
||||||
Shape* shape = containerof(ref, Shape);
|
Shape* shape = containerof(ref, Shape);
|
||||||
lovrShapeDestroyData(shape);
|
lovrShapeDestroyData(shape);
|
||||||
|
|
|
@ -131,6 +131,7 @@ void lovrColliderGetLocalVector(Collider* collider, float wx, float wy, float wz
|
||||||
void lovrColliderGetWorldVector(Collider* collider, float x, float y, float z, float* wx, float* wy, float* wz);
|
void lovrColliderGetWorldVector(Collider* collider, float x, float y, float z, float* wx, float* wy, float* wz);
|
||||||
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 lovrShapeDestroy(const Ref* ref);
|
void lovrShapeDestroy(const Ref* ref);
|
||||||
void lovrShapeDestroyData(Shape* shape);
|
void lovrShapeDestroyData(Shape* shape);
|
||||||
|
|
Loading…
Reference in New Issue