mirror of
https://github.com/love2d/love.git
synced 2026-08-17 11:00:31 +02:00
Merge pull request #1622 from thegrb93/add-getsetstate
Add Body.getKinematicState and Body.setKinematicState
This commit is contained in:
@@ -112,6 +112,14 @@ float Body::getAngularVelocity() const
|
|||||||
return body->GetAngularVelocity();
|
return body->GetAngularVelocity();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Body::getKinematicState(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
|
float Body::getMass() const
|
||||||
{
|
{
|
||||||
return body->GetMass();
|
return body->GetMass();
|
||||||
@@ -225,6 +233,13 @@ void Body::setAngularVelocity(float r)
|
|||||||
body->SetAngularVelocity(r);
|
body->SetAngularVelocity(r);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Body::setKinematicState(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)
|
void Body::setPosition(float x, float y)
|
||||||
{
|
{
|
||||||
body->SetTransform(Physics::scaleDown(b2Vec2(x, y)), body->GetAngle());
|
body->SetTransform(Physics::scaleDown(b2Vec2(x, y)), body->GetAngle());
|
||||||
|
|||||||
@@ -129,6 +129,11 @@ public:
|
|||||||
**/
|
**/
|
||||||
float getAngularVelocity() const;
|
float getAngularVelocity() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the current Body kinematic state. (Position, angle, velocity, angle velocity).
|
||||||
|
**/
|
||||||
|
void getKinematicState(b2Vec2 &pos_o, float &a_o, b2Vec2& vel_o, float &da_o) const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the Body's mass.
|
* Gets the Body's mass.
|
||||||
**/
|
**/
|
||||||
@@ -219,6 +224,11 @@ public:
|
|||||||
**/
|
**/
|
||||||
void setAngularVelocity(float r);
|
void setAngularVelocity(float r);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the current Body kinematic state. (Position, angle, velocity, angle velocity).
|
||||||
|
**/
|
||||||
|
void setKinematicState(b2Vec2 pos, float a, b2Vec2 vel, float da);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the current position of the Body.
|
* Sets the current position of the Body.
|
||||||
**/
|
**/
|
||||||
|
|||||||
@@ -125,6 +125,21 @@ int w_Body_getAngularVelocity(lua_State *L)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int w_Body_getKinematicState(lua_State *L)
|
||||||
|
{
|
||||||
|
Body *t = luax_checkbody(L, 1);
|
||||||
|
b2Vec2 pos_o, vel_o;
|
||||||
|
float a_o, da_o;
|
||||||
|
t->getKinematicState(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)
|
int w_Body_getMass(lua_State *L)
|
||||||
{
|
{
|
||||||
Body *t = luax_checkbody(L, 1);
|
Body *t = luax_checkbody(L, 1);
|
||||||
@@ -313,6 +328,19 @@ int w_Body_setPosition(lua_State *L)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int w_Body_setKinematicState(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->setKinematicState(b2Vec2(x, y), a, b2Vec2(dx, dy), da); });
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int w_Body_resetMassData(lua_State *L)
|
int w_Body_resetMassData(lua_State *L)
|
||||||
{
|
{
|
||||||
Body *t = luax_checkbody(L, 1);
|
Body *t = luax_checkbody(L, 1);
|
||||||
@@ -631,6 +659,7 @@ static const luaL_Reg w_Body_functions[] =
|
|||||||
{ "getWorldCenter", w_Body_getWorldCenter },
|
{ "getWorldCenter", w_Body_getWorldCenter },
|
||||||
{ "getLocalCenter", w_Body_getLocalCenter },
|
{ "getLocalCenter", w_Body_getLocalCenter },
|
||||||
{ "getAngularVelocity", w_Body_getAngularVelocity },
|
{ "getAngularVelocity", w_Body_getAngularVelocity },
|
||||||
|
{ "getKinematicState", w_Body_getKinematicState },
|
||||||
{ "getMass", w_Body_getMass },
|
{ "getMass", w_Body_getMass },
|
||||||
{ "getInertia", w_Body_getInertia },
|
{ "getInertia", w_Body_getInertia },
|
||||||
{ "getMassData", w_Body_getMassData },
|
{ "getMassData", w_Body_getMassData },
|
||||||
@@ -648,6 +677,7 @@ static const luaL_Reg w_Body_functions[] =
|
|||||||
{ "setAngle", w_Body_setAngle },
|
{ "setAngle", w_Body_setAngle },
|
||||||
{ "setAngularVelocity", w_Body_setAngularVelocity },
|
{ "setAngularVelocity", w_Body_setAngularVelocity },
|
||||||
{ "setPosition", w_Body_setPosition },
|
{ "setPosition", w_Body_setPosition },
|
||||||
|
{ "setKinematicState", w_Body_setKinematicState },
|
||||||
{ "resetMassData", w_Body_resetMassData },
|
{ "resetMassData", w_Body_resetMassData },
|
||||||
{ "setMassData", w_Body_setMassData },
|
{ "setMassData", w_Body_setMassData },
|
||||||
{ "setMass", w_Body_setMass },
|
{ "setMass", w_Body_setMass },
|
||||||
|
|||||||
Reference in New Issue
Block a user