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;
|
||||
}
|
||||
|
||||
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[] = {
|
||||
{ "destroy", l_lovrColliderDestroy },
|
||||
{ "getWorld", l_lovrColliderGetWorld },
|
||||
|
@ -454,5 +464,6 @@ const luaL_Reg lovrCollider[] = {
|
|||
{ "getWorldVector", l_lovrColliderGetWorldVector },
|
||||
{ "getLinearVelocityFromLocalPoint", l_lovrColliderGetLinearVelocityFromLocalPoint },
|
||||
{ "getLinearVelocityFromWorldPoint", l_lovrColliderGetLinearVelocityFromWorldPoint },
|
||||
{ "getAABB", l_lovrColliderGetAABB },
|
||||
{ NULL, NULL }
|
||||
};
|
||||
|
|
|
@ -495,6 +495,28 @@ void lovrColliderGetLinearVelocityFromWorldPoint(Collider* collider, float wx, f
|
|||
*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) {
|
||||
Shape* shape = containerof(ref, 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 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]);
|
||||
|
||||
void lovrShapeDestroy(const Ref* ref);
|
||||
void lovrShapeDestroyData(Shape* shape);
|
||||
|
|
Loading…
Reference in New Issue