Collider API accepts both vec3 and number coords

This commit is contained in:
Josip Miskovic 2020-05-08 09:59:24 +03:00
parent add346519a
commit f2fcc4e5c4
1 changed files with 29 additions and 37 deletions

View File

@ -323,17 +323,16 @@ static int l_lovrColliderSetAngularDamping(lua_State* L) {
static int l_lovrColliderApplyForce(lua_State* L) { static int l_lovrColliderApplyForce(lua_State* L) {
Collider* collider = luax_checktype(L, 1, Collider); Collider* collider = luax_checktype(L, 1, Collider);
float x = luax_checkfloat(L, 2); float force[4];
float y = luax_checkfloat(L, 3); int index = luax_readvec3(L, 2, force, NULL);
float z = luax_checkfloat(L, 4);
if (lua_gettop(L) > 4) { if (lua_gettop(L) >= index) {
float cx = luax_checkfloat(L, 5); float position[4];
float cy = luax_checkfloat(L, 6); luax_readvec3(L, index, position, NULL);
float cz = luax_checkfloat(L, 7); lovrColliderApplyForceAtPosition(collider, force[0], force[1], force[2],
lovrColliderApplyForceAtPosition(collider, x, y, z, cx, cy, cz); position[0], position[1], position[2]);
} else { } else {
lovrColliderApplyForce(collider, x, y, z); lovrColliderApplyForce(collider, force[0], force[1], force[2]);
} }
return 0; return 0;
@ -341,10 +340,9 @@ static int l_lovrColliderApplyForce(lua_State* L) {
static int l_lovrColliderApplyTorque(lua_State* L) { static int l_lovrColliderApplyTorque(lua_State* L) {
Collider* collider = luax_checktype(L, 1, Collider); Collider* collider = luax_checktype(L, 1, Collider);
float x = luax_checkfloat(L, 2); float force[4];
float y = luax_checkfloat(L, 3); luax_readvec3(L, 2, force, NULL);
float z = luax_checkfloat(L, 4); lovrColliderApplyTorque(collider, force[0], force[1], force[2]);
lovrColliderApplyTorque(collider, x, y, z);
return 0; return 0;
} }
@ -360,11 +358,10 @@ static int l_lovrColliderGetLocalCenter(lua_State* L) {
static int l_lovrColliderGetLocalPoint(lua_State* L) { static int l_lovrColliderGetLocalPoint(lua_State* L) {
Collider* collider = luax_checktype(L, 1, Collider); Collider* collider = luax_checktype(L, 1, Collider);
float wx = luax_checkfloat(L, 2); float world[4];
float wy = luax_checkfloat(L, 3); luax_readvec3(L, 2, world, NULL);
float wz = luax_checkfloat(L, 4);
float x, y, z; float x, y, z;
lovrColliderGetLocalPoint(collider, wx, wy, wz, &x, &y, &z); lovrColliderGetLocalPoint(collider, world[0], world[1], world[2], &x, &y, &z);
lua_pushnumber(L, x); lua_pushnumber(L, x);
lua_pushnumber(L, y); lua_pushnumber(L, y);
lua_pushnumber(L, z); lua_pushnumber(L, z);
@ -373,11 +370,10 @@ static int l_lovrColliderGetLocalPoint(lua_State* L) {
static int l_lovrColliderGetWorldPoint(lua_State* L) { static int l_lovrColliderGetWorldPoint(lua_State* L) {
Collider* collider = luax_checktype(L, 1, Collider); Collider* collider = luax_checktype(L, 1, Collider);
float x = luax_checkfloat(L, 2); float local[4];
float y = luax_checkfloat(L, 3); luax_readvec3(L, 2, local, NULL);
float z = luax_checkfloat(L, 4);
float wx, wy, wz; float wx, wy, wz;
lovrColliderGetWorldPoint(collider, x, y, z, &wx, &wy, &wz); lovrColliderGetWorldPoint(collider, local[0], local[1], local[2], &wx, &wy, &wz);
lua_pushnumber(L, wx); lua_pushnumber(L, wx);
lua_pushnumber(L, wy); lua_pushnumber(L, wy);
lua_pushnumber(L, wz); lua_pushnumber(L, wz);
@ -386,11 +382,10 @@ static int l_lovrColliderGetWorldPoint(lua_State* L) {
static int l_lovrColliderGetLocalVector(lua_State* L) { static int l_lovrColliderGetLocalVector(lua_State* L) {
Collider* collider = luax_checktype(L, 1, Collider); Collider* collider = luax_checktype(L, 1, Collider);
float wx = luax_checkfloat(L, 2); float world[4];
float wy = luax_checkfloat(L, 3); luax_readvec3(L, 2, world, NULL);
float wz = luax_checkfloat(L, 4);
float x, y, z; float x, y, z;
lovrColliderGetLocalVector(collider, wx, wy, wz, &x, &y, &z); lovrColliderGetLocalVector(collider, world[0], world[1], world[2], &x, &y, &z);
lua_pushnumber(L, x); lua_pushnumber(L, x);
lua_pushnumber(L, y); lua_pushnumber(L, y);
lua_pushnumber(L, z); lua_pushnumber(L, z);
@ -399,11 +394,10 @@ static int l_lovrColliderGetLocalVector(lua_State* L) {
static int l_lovrColliderGetWorldVector(lua_State* L) { static int l_lovrColliderGetWorldVector(lua_State* L) {
Collider* collider = luax_checktype(L, 1, Collider); Collider* collider = luax_checktype(L, 1, Collider);
float x = luax_checkfloat(L, 2); float local[4];
float y = luax_checkfloat(L, 3); luax_readvec3(L, 2, local, NULL);
float z = luax_checkfloat(L, 4);
float wx, wy, wz; float wx, wy, wz;
lovrColliderGetWorldVector(collider, x, y, z, &wx, &wy, &wz); lovrColliderGetWorldVector(collider, local[0], local[1], local[2], &wx, &wy, &wz);
lua_pushnumber(L, wx); lua_pushnumber(L, wx);
lua_pushnumber(L, wy); lua_pushnumber(L, wy);
lua_pushnumber(L, wz); lua_pushnumber(L, wz);
@ -412,11 +406,10 @@ static int l_lovrColliderGetWorldVector(lua_State* L) {
static int l_lovrColliderGetLinearVelocityFromLocalPoint(lua_State* L) { static int l_lovrColliderGetLinearVelocityFromLocalPoint(lua_State* L) {
Collider* collider = luax_checktype(L, 1, Collider); Collider* collider = luax_checktype(L, 1, Collider);
float x = luax_checkfloat(L, 2); float local[4];
float y = luax_checkfloat(L, 3); luax_readvec3(L, 2, local, NULL);
float z = luax_checkfloat(L, 4);
float vx, vy, vz; float vx, vy, vz;
lovrColliderGetLinearVelocityFromLocalPoint(collider, x, y, z, &vx, &vy, &vz); lovrColliderGetLinearVelocityFromLocalPoint(collider, local[0], local[1], local[2], &vx, &vy, &vz);
lua_pushnumber(L, vx); lua_pushnumber(L, vx);
lua_pushnumber(L, vy); lua_pushnumber(L, vy);
lua_pushnumber(L, vz); lua_pushnumber(L, vz);
@ -425,11 +418,10 @@ static int l_lovrColliderGetLinearVelocityFromLocalPoint(lua_State* L) {
static int l_lovrColliderGetLinearVelocityFromWorldPoint(lua_State* L) { static int l_lovrColliderGetLinearVelocityFromWorldPoint(lua_State* L) {
Collider* collider = luax_checktype(L, 1, Collider); Collider* collider = luax_checktype(L, 1, Collider);
float x = luax_checkfloat(L, 2); float world[4];
float y = luax_checkfloat(L, 3); luax_readvec3(L, 2, world, NULL);
float z = luax_checkfloat(L, 4);
float vx, vy, vz; float vx, vy, vz;
lovrColliderGetLinearVelocityFromWorldPoint(collider, x, y, z, &vx, &vy, &vz); lovrColliderGetLinearVelocityFromWorldPoint(collider, world[0], world[1], world[2], &vx, &vy, &vz);
lua_pushnumber(L, vx); lua_pushnumber(L, vx);
lua_pushnumber(L, vy); lua_pushnumber(L, vy);
lua_pushnumber(L, vz); lua_pushnumber(L, vz);