diff --git a/src/api/l_physics_collider.c b/src/api/l_physics_collider.c index b63e2395..7bc48d01 100644 --- a/src/api/l_physics_collider.c +++ b/src/api/l_physics_collider.c @@ -209,8 +209,9 @@ static int l_lovrColliderSetPosition(lua_State* L) { static int l_lovrColliderGetOrientation(lua_State* L) { Collider* collider = luax_checktype(L, 1, Collider); - float angle, x, y, z; - lovrColliderGetOrientation(collider, &angle, &x, &y, &z); + float angle, x, y, z, orientation[4]; + lovrColliderGetOrientation(collider, orientation); + quat_getAngleAxis(orientation, &angle, &x, &y, &z); lua_pushnumber(L, angle); lua_pushnumber(L, x); lua_pushnumber(L, y); @@ -228,9 +229,10 @@ static int l_lovrColliderSetOrientation(lua_State* L) { static int l_lovrColliderGetPose(lua_State* L) { Collider* collider = luax_checktype(L, 1, Collider); - float x, y, z, angle, ax, ay, az; + float x, y, z, angle, ax, ay, az, orientation[4]; lovrColliderGetPosition(collider, &x, &y, &z); - lovrColliderGetOrientation(collider, &angle, &ax, &ay, &az); + lovrColliderGetOrientation(collider, orientation); + quat_getAngleAxis(orientation, &angle, &ax, &ay, &az); lua_pushnumber(L, x); lua_pushnumber(L, y); lua_pushnumber(L, z); diff --git a/src/api/l_physics_shapes.c b/src/api/l_physics_shapes.c index 755eaad8..b6d3488a 100644 --- a/src/api/l_physics_shapes.c +++ b/src/api/l_physics_shapes.c @@ -121,8 +121,9 @@ static int l_lovrShapeSetPosition(lua_State* L) { static int l_lovrShapeGetOrientation(lua_State* L) { Shape* shape = luax_checkshape(L, 1); - float angle, x, y, z; - lovrShapeGetOrientation(shape, &angle, &x, &y, &z); + float angle, x, y, z, orientation[4]; + lovrShapeGetOrientation(shape, orientation); + quat_getAngleAxis(orientation, &angle, &x, &y, &z); lua_pushnumber(L, angle); lua_pushnumber(L, x); lua_pushnumber(L, y); diff --git a/src/modules/physics/physics.c b/src/modules/physics/physics.c index c7d979b2..ddf301f1 100644 --- a/src/modules/physics/physics.c +++ b/src/modules/physics/physics.c @@ -518,10 +518,9 @@ void lovrColliderSetPosition(Collider* collider, float x, float y, float z) { dBodySetPosition(collider->body, x, y, z); } -void lovrColliderGetOrientation(Collider* collider, float* angle, float* x, float* y, float* z) { +void lovrColliderGetOrientation(Collider* collider, quat orientation) { const dReal* q = dBodyGetQuaternion(collider->body); - float quaternion[4] = { q[1], q[2], q[3], q[0] }; - quat_getAngleAxis(quaternion, angle, x, y, z); + quat_set(orientation, q[1], q[2], q[3], q[0]); } void lovrColliderSetOrientation(Collider* collider, quat orientation) { @@ -720,11 +719,10 @@ void lovrShapeSetPosition(Shape* shape, float x, float y, float z) { dGeomSetOffsetPosition(shape->id, x, y, z); } -void lovrShapeGetOrientation(Shape* shape, float* angle, float* x, float* y, float* z) { +void lovrShapeGetOrientation(Shape* shape, quat orientation) { dReal q[4]; dGeomGetOffsetQuaternion(shape->id, q); - float quaternion[4] = { q[1], q[2], q[3], q[0] }; - quat_getAngleAxis(quaternion, angle, x, y, z); + quat_set(orientation, q[1], q[2], q[3], q[0]); } void lovrShapeSetOrientation(Shape* shape, quat orientation) { diff --git a/src/modules/physics/physics.h b/src/modules/physics/physics.h index 616a1447..af54a80c 100644 --- a/src/modules/physics/physics.h +++ b/src/modules/physics/physics.h @@ -140,7 +140,7 @@ void lovrColliderGetMassData(Collider* collider, float* cx, float* cy, float* cz void lovrColliderSetMassData(Collider* collider, float cx, float cy, float cz, float mass, float inertia[6]); void lovrColliderGetPosition(Collider* collider, float* x, float* y, float* z); void lovrColliderSetPosition(Collider* collider, float x, float y, float z); -void lovrColliderGetOrientation(Collider* collider, float* angle, float* x, float* y, float* z); +void lovrColliderGetOrientation(Collider* collider, quat orientation); void lovrColliderSetOrientation(Collider* collider, quat orientation); void lovrColliderGetLinearVelocity(Collider* collider, float* x, float* y, float* z); void lovrColliderSetLinearVelocity(Collider* collider, float x, float y, float z); @@ -174,7 +174,7 @@ void* lovrShapeGetUserData(Shape* shape); void lovrShapeSetUserData(Shape* shape, void* data); void lovrShapeGetPosition(Shape* shape, float* x, float* y, float* z); void lovrShapeSetPosition(Shape* shape, float x, float y, float z); -void lovrShapeGetOrientation(Shape* shape, float* angle, float* x, float* y, float* z); +void lovrShapeGetOrientation(Shape* shape, quat orientation); void lovrShapeSetOrientation(Shape* shape, quat orientation); void lovrShapeGetMass(Shape* shape, float density, float* cx, float* cy, float* cz, float* mass, float inertia[6]); void lovrShapeGetAABB(Shape* shape, float aabb[6]);