Update Physics2D Component and Body (#178)

* Update

* Add: [Get/Set]AngularDaming for standardization

* Fix: Name error

* Add: [Get/Set][AngularDamping/MomentOfInertia] in PhysicsComponent2D

* Forgot in last commit

* Add: param coordSys in [PhysicsComponent2D/RigidBody2D]::SetMassCenter

* Add: Some forgotten inline

* Fix little error

* Fix: Indentation before case

* Move and Change GetCenterOfGravity
This commit is contained in:
Faymoon
2018-08-02 11:25:57 +02:00
committed by Jérôme Leclercq
parent 4a09de7e0b
commit 2f3f02b2fc
5 changed files with 143 additions and 37 deletions

View File

@@ -87,7 +87,7 @@ namespace Nz
void RigidBody2D::AddForce(const Vector2f& force, CoordSys coordSys)
{
return AddForce(force, GetCenterOfGravity(coordSys), coordSys);
return AddForce(force, GetMassCenter(coordSys), coordSys);
}
void RigidBody2D::AddForce(const Vector2f& force, const Vector2f& point, CoordSys coordSys)
@@ -106,7 +106,7 @@ namespace Nz
void RigidBody2D::AddImpulse(const Vector2f& impulse, CoordSys coordSys)
{
return AddImpulse(impulse, GetCenterOfGravity(coordSys), coordSys);
return AddImpulse(impulse, GetMassCenter(coordSys), coordSys);
}
void RigidBody2D::AddImpulse(const Vector2f& impulse, const Vector2f& point, CoordSys coordSys)
@@ -205,26 +205,26 @@ namespace Nz
return m_mass;
}
float RigidBody2D::GetMomentOfInertia() const
Vector2f RigidBody2D::GetMassCenter(CoordSys coordSys) const
{
return float(cpBodyGetMoment(m_handle));
}
Vector2f RigidBody2D::GetCenterOfGravity(CoordSys coordSys) const
{
cpVect cog = cpBodyGetCenterOfGravity(m_handle);
cpVect massCenter = cpBodyGetCenterOfGravity(m_handle);
switch (coordSys)
{
case CoordSys_Global:
cog = cpBodyLocalToWorld(m_handle, cog);
massCenter = cpBodyLocalToWorld(m_handle, massCenter);
break;
case CoordSys_Local:
break; // Nothing to do
}
return Vector2f(static_cast<float>(cog.x), static_cast<float>(cog.y));
return Vector2f(static_cast<float>(massCenter.x), static_cast<float>(massCenter.y));
}
float RigidBody2D::GetMomentOfInertia() const
{
return float(cpBodyGetMoment(m_handle));
}
Vector2f RigidBody2D::GetPosition() const
@@ -362,9 +362,21 @@ namespace Nz
m_mass = mass;
}
void RigidBody2D::SetMassCenter(const Vector2f& center)
void RigidBody2D::SetMassCenter(const Vector2f& center, CoordSys coordSys)
{
cpBodySetCenterOfGravity(m_handle, cpv(center.x, center.y));
cpVect massCenter = cpv(center.x, center.y);
switch (coordSys)
{
case CoordSys_Global:
massCenter = cpBodyWorldToLocal(m_handle, massCenter);
break;
case CoordSys_Local:
break; // Nothing to do
}
cpBodySetCenterOfGravity(m_handle, massCenter);
}
void RigidBody2D::SetMomentOfInertia(float moment)