Add getState and setState

This commit is contained in:
thegrb93
2020-09-15 12:56:56 -04:00
committed by Garrett Brown
parent 365387150e
commit e4c7a4e777
3 changed files with 55 additions and 0 deletions
+15
View File
@@ -112,6 +112,14 @@ float Body::getAngularVelocity() const
return body->GetAngularVelocity();
}
void Body::getState(b2Vec2 &pos_o, float &a_o, b2Vec2 &vel_o, float &da_o) const
{
pos_o = Physics::scaleUp(body->GetPosition());
a_o = body->GetAngle();
vel_o = Physics::scaleUp(body->GetLinearVelocity());
da_o = body->GetAngularVelocity();
}
float Body::getMass() const
{
return body->GetMass();
@@ -225,6 +233,13 @@ void Body::setAngularVelocity(float r)
body->SetAngularVelocity(r);
}
void Body::setState(b2Vec2 pos, float a, b2Vec2 vel, float da)
{
body->SetTransform(Physics::scaleDown(pos), a);
body->SetLinearVelocity(Physics::scaleDown(vel));
body->SetAngularVelocity(da);
}
void Body::setPosition(float x, float y)
{
body->SetTransform(Physics::scaleDown(b2Vec2(x, y)), body->GetAngle());
+10
View File
@@ -129,6 +129,11 @@ public:
**/
float getAngularVelocity() const;
/**
* Get the current Body kinematic state. (Position, angle, velocity, angle velocity).
**/
void getState(b2Vec2 &pos_o, float &a_o, b2Vec2& vel_o, float &da_o) const;
/**
* Gets the Body's mass.
**/
@@ -219,6 +224,11 @@ public:
**/
void setAngularVelocity(float r);
/**
* Set the current Body kinematic state. (Position, angle, velocity, angle velocity).
**/
void setState(b2Vec2 pos, float a, b2Vec2 vel, float da);
/**
* Sets the current position of the Body.
**/
+30
View File
@@ -125,6 +125,21 @@ int w_Body_getAngularVelocity(lua_State *L)
return 1;
}
int w_Body_getState(lua_State *L)
{
Body *t = luax_checkbody(L, 1);
b2Vec2 pos_o, vel_o;
float a_o, da_o;
t->getState(pos_o, a_o, vel_o, da_o);
lua_pushnumber(L, pos_o.x);
lua_pushnumber(L, pos_o.y);
lua_pushnumber(L, a_o);
lua_pushnumber(L, vel_o.x);
lua_pushnumber(L, vel_o.y);
lua_pushnumber(L, da_o);
return 6;
}
int w_Body_getMass(lua_State *L)
{
Body *t = luax_checkbody(L, 1);
@@ -313,6 +328,19 @@ int w_Body_setPosition(lua_State *L)
return 0;
}
int w_Body_setState(lua_State *L)
{
Body *t = luax_checkbody(L, 1);
float x = (float)luaL_checknumber(L, 2);
float y = (float)luaL_checknumber(L, 3);
float a = (float)luaL_checknumber(L, 4);
float dx = (float)luaL_checknumber(L, 5);
float dy = (float)luaL_checknumber(L, 6);
float da = (float)luaL_checknumber(L, 7);
luax_catchexcept(L, [&](){ t->setState(b2Vec2(x, y), a, b2Vec2(dx, dy), da); });
return 0;
}
int w_Body_resetMassData(lua_State *L)
{
Body *t = luax_checkbody(L, 1);
@@ -631,6 +659,7 @@ static const luaL_Reg w_Body_functions[] =
{ "getWorldCenter", w_Body_getWorldCenter },
{ "getLocalCenter", w_Body_getLocalCenter },
{ "getAngularVelocity", w_Body_getAngularVelocity },
{ "getState", w_Body_getState },
{ "getMass", w_Body_getMass },
{ "getInertia", w_Body_getInertia },
{ "getMassData", w_Body_getMassData },
@@ -648,6 +677,7 @@ static const luaL_Reg w_Body_functions[] =
{ "setAngle", w_Body_setAngle },
{ "setAngularVelocity", w_Body_setAngularVelocity },
{ "setPosition", w_Body_setPosition },
{ "setState", w_Body_setState },
{ "resetMassData", w_Body_resetMassData },
{ "setMassData", w_Body_setMassData },
{ "setMass", w_Body_setMass },