ChipmunkPhysics2D: Rework RigidBody2D
This commit is contained in:
@@ -114,20 +114,20 @@ SCENARIO("PhysWorld2D", "[PHYSICS2D][PHYSWORLD2D]")
|
||||
Nz::Rectf characterAABB(0.f, 0.f, 1.f, 1.f);
|
||||
std::shared_ptr<Nz::ChipmunkCollider2D> characterBox = std::make_shared<Nz::ChipmunkBoxCollider2D>(characterAABB);
|
||||
characterBox->SetCollisionId(CHARACTER_COLLISION_ID);
|
||||
Nz::ChipmunkRigidBody2D character(&world, 1.f, characterBox);
|
||||
Nz::ChipmunkRigidBody2D character(world, Nz::ChipmunkRigidBody2D::DynamicSettings(characterBox, 1.f));
|
||||
character.SetPosition(Nz::Vector2f::Zero());
|
||||
|
||||
Nz::Rectf wallAABB(0.f, 0.f, 1.f, 2.f);
|
||||
std::shared_ptr<Nz::ChipmunkCollider2D> wallBox = std::make_shared<Nz::ChipmunkBoxCollider2D>(wallAABB);
|
||||
wallBox->SetCollisionId(WALL_COLLISION_ID);
|
||||
Nz::ChipmunkRigidBody2D wall(&world, 0.f, wallBox);
|
||||
Nz::ChipmunkRigidBody2D wall(world, Nz::ChipmunkRigidBody2D::StaticSettings(wallBox));
|
||||
wall.SetPosition(Nz::Vector2f(5.f, 0.f));
|
||||
|
||||
Nz::Rectf triggerAABB(0.f, 0.f, 1.f, 1.f);
|
||||
std::shared_ptr<Nz::ChipmunkCollider2D> triggerBox = std::make_shared<Nz::ChipmunkBoxCollider2D>(triggerAABB);
|
||||
triggerBox->SetTrigger(true);
|
||||
triggerBox->SetCollisionId(TRIGGER_COLLISION_ID);
|
||||
Nz::ChipmunkRigidBody2D trigger(&world, 0.f, triggerBox);
|
||||
Nz::ChipmunkRigidBody2D trigger(world, Nz::ChipmunkRigidBody2D::StaticSettings(triggerBox));
|
||||
trigger.SetPosition(Nz::Vector2f(2.f, 0.f));
|
||||
|
||||
world.Step(Nz::Time::Zero());
|
||||
@@ -199,8 +199,11 @@ Nz::ChipmunkRigidBody2D CreateBody(Nz::ChipmunkPhysWorld2D& world, const Nz::Vec
|
||||
std::shared_ptr<Nz::ChipmunkCollider2D> box = std::make_shared<Nz::ChipmunkBoxCollider2D>(aabb);
|
||||
box->SetCategoryMask(categoryMask);
|
||||
box->SetCollisionMask(collisionMask);
|
||||
float mass = isMoving ? 1.f : 0.f;
|
||||
Nz::ChipmunkRigidBody2D rigidBody(&world, mass, box);
|
||||
rigidBody.SetPosition(position);
|
||||
return rigidBody;
|
||||
|
||||
Nz::ChipmunkRigidBody2D::DynamicSettings settings;
|
||||
settings.geom = std::move(box);
|
||||
settings.mass = isMoving ? 1.f : 0.f;
|
||||
settings.position = position;
|
||||
|
||||
return Nz::ChipmunkRigidBody2D(world, settings);
|
||||
}
|
||||
|
||||
@@ -18,9 +18,12 @@ SCENARIO("RigidBody2D", "[PHYSICS2D][RIGIDBODY2D]")
|
||||
|
||||
Nz::Vector2f positionAABB(3.f, 4.f);
|
||||
Nz::Rectf aabb(positionAABB.x, positionAABB.y, 1.f, 2.f);
|
||||
std::shared_ptr<Nz::ChipmunkCollider2D> box = std::make_shared<Nz::ChipmunkBoxCollider2D>(aabb);
|
||||
float mass = 1.f;
|
||||
Nz::ChipmunkRigidBody2D body(&world, mass, box);
|
||||
|
||||
Nz::ChipmunkRigidBody2D::DynamicSettings dynamicSettings;
|
||||
dynamicSettings.geom = std::make_shared<Nz::ChipmunkBoxCollider2D>(aabb);
|
||||
dynamicSettings.mass = 1.f;
|
||||
|
||||
Nz::ChipmunkRigidBody2D body(world, dynamicSettings);
|
||||
float angularVelocity = 0.2f;
|
||||
body.SetAngularVelocity(angularVelocity);
|
||||
Nz::Vector2f massCenter(5.f, 7.f);
|
||||
@@ -36,6 +39,8 @@ SCENARIO("RigidBody2D", "[PHYSICS2D][RIGIDBODY2D]")
|
||||
|
||||
world.Step(Nz::Time::Second());
|
||||
|
||||
Nz::ChipmunkRigidBody2D::StaticSettings staticSettings;
|
||||
|
||||
WHEN("We copy construct the body")
|
||||
{
|
||||
body.AddForce(Nz::Vector2f(3.f, 5.f));
|
||||
@@ -54,7 +59,7 @@ SCENARIO("RigidBody2D", "[PHYSICS2D][RIGIDBODY2D]")
|
||||
|
||||
WHEN("We copy assign the body")
|
||||
{
|
||||
Nz::ChipmunkRigidBody2D copiedBody(&world, 0.f);
|
||||
Nz::ChipmunkRigidBody2D copiedBody(world, staticSettings);
|
||||
copiedBody = body;
|
||||
EQUALITY(copiedBody, body);
|
||||
}
|
||||
@@ -62,7 +67,7 @@ SCENARIO("RigidBody2D", "[PHYSICS2D][RIGIDBODY2D]")
|
||||
WHEN("We move assign the body")
|
||||
{
|
||||
Nz::ChipmunkRigidBody2D copiedBody(body);
|
||||
Nz::ChipmunkRigidBody2D movedBody(&world, 0.f);
|
||||
Nz::ChipmunkRigidBody2D movedBody(world, staticSettings);
|
||||
movedBody = std::move(body);
|
||||
EQUALITY(movedBody, copiedBody);
|
||||
}
|
||||
@@ -113,9 +118,13 @@ SCENARIO("RigidBody2D", "[PHYSICS2D][RIGIDBODY2D]")
|
||||
|
||||
Nz::Vector2f positionAABB(3.f, 4.f);
|
||||
Nz::Rectf aabb(positionAABB.x, positionAABB.y, 1.f, 2.f);
|
||||
std::shared_ptr<Nz::ChipmunkCollider2D> box = std::make_shared<Nz::ChipmunkBoxCollider2D>(aabb);
|
||||
float mass = 1.f;
|
||||
Nz::ChipmunkRigidBody2D body(&world, mass);
|
||||
|
||||
Nz::ChipmunkRigidBody2D::DynamicSettings dynamicSettings;
|
||||
dynamicSettings.mass = 1.f;
|
||||
|
||||
auto box = std::make_shared<Nz::ChipmunkBoxCollider2D>(aabb);
|
||||
|
||||
Nz::ChipmunkRigidBody2D body(world, dynamicSettings);
|
||||
body.SetGeom(box, true, false);
|
||||
|
||||
bool userData = false;
|
||||
@@ -134,7 +143,7 @@ SCENARIO("RigidBody2D", "[PHYSICS2D][RIGIDBODY2D]")
|
||||
CHECK(body.GetAngularVelocity() == 0.f);
|
||||
CHECK(body.GetMassCenter(Nz::CoordSys::Global) == position);
|
||||
CHECK(body.GetGeom() == box);
|
||||
CHECK(body.GetMass() == Catch::Approx(mass));
|
||||
CHECK(body.GetMass() == Catch::Approx(dynamicSettings.mass));
|
||||
CHECK(body.GetPosition() == position);
|
||||
CHECK(body.GetRotation().value == Catch::Approx(0.f));
|
||||
CHECK(body.GetUserdata() == &userData);
|
||||
@@ -216,9 +225,10 @@ SCENARIO("RigidBody2D", "[PHYSICS2D][RIGIDBODY2D]")
|
||||
|
||||
Nz::Vector2f position(3.f, 4.f);
|
||||
float radius = 5.f;
|
||||
|
||||
std::shared_ptr<Nz::ChipmunkCollider2D> circle = std::make_shared<Nz::ChipmunkCircleCollider2D>(radius, position);
|
||||
float mass = 1.f;
|
||||
Nz::ChipmunkRigidBody2D body(&world, mass);
|
||||
|
||||
Nz::ChipmunkRigidBody2D body(world, Nz::ChipmunkRigidBody2D::DynamicSettings({}, 1.f));
|
||||
body.SetGeom(circle, true, false);
|
||||
|
||||
world.Step(Nz::Time::Second());
|
||||
@@ -249,7 +259,7 @@ SCENARIO("RigidBody2D", "[PHYSICS2D][RIGIDBODY2D]")
|
||||
std::shared_ptr<Nz::ChipmunkCompoundCollider2D> compound = std::make_shared<Nz::ChipmunkCompoundCollider2D>(colliders);
|
||||
|
||||
float mass = 1.f;
|
||||
Nz::ChipmunkRigidBody2D body(&world, mass);
|
||||
Nz::ChipmunkRigidBody2D body(world, Nz::ChipmunkRigidBody2D::DynamicSettings({}, mass));
|
||||
body.SetGeom(compound, true, false);
|
||||
|
||||
world.Step(Nz::Time::Second());
|
||||
@@ -278,7 +288,7 @@ SCENARIO("RigidBody2D", "[PHYSICS2D][RIGIDBODY2D]")
|
||||
Nz::SparsePtr<const Nz::Vector2f> sparsePtr(vertices.data());
|
||||
std::shared_ptr<Nz::ChipmunkConvexCollider2D> convex = std::make_shared<Nz::ChipmunkConvexCollider2D>(sparsePtr, vertices.size());
|
||||
float mass = 1.f;
|
||||
Nz::ChipmunkRigidBody2D body(&world, mass);
|
||||
Nz::ChipmunkRigidBody2D body(world, Nz::ChipmunkRigidBody2D::DynamicSettings({}, mass));
|
||||
body.SetGeom(convex, true, false);
|
||||
|
||||
world.Step(Nz::Time::Second());
|
||||
@@ -302,7 +312,7 @@ SCENARIO("RigidBody2D", "[PHYSICS2D][RIGIDBODY2D]")
|
||||
Nz::Vector2f positionB(1.f, -4.f);
|
||||
std::shared_ptr<Nz::ChipmunkCollider2D> segment = std::make_shared<Nz::ChipmunkSegmentCollider2D>(positionA, positionB, 0.f);
|
||||
float mass = 1.f;
|
||||
Nz::ChipmunkRigidBody2D body(&world, mass);
|
||||
Nz::ChipmunkRigidBody2D body(world, Nz::ChipmunkRigidBody2D::DynamicSettings({}, mass));
|
||||
body.SetGeom(segment, true, false);
|
||||
|
||||
world.Step(Nz::Time::Second());
|
||||
@@ -325,7 +335,7 @@ Nz::ChipmunkRigidBody2D CreateBody(Nz::ChipmunkPhysWorld2D& world)
|
||||
std::shared_ptr<Nz::ChipmunkCollider2D> box = std::make_shared<Nz::ChipmunkBoxCollider2D>(aabb);
|
||||
float mass = 1.f;
|
||||
|
||||
Nz::ChipmunkRigidBody2D body(&world, mass, box);
|
||||
Nz::ChipmunkRigidBody2D body(world, Nz::ChipmunkRigidBody2D::DynamicSettings(box, mass));
|
||||
body.SetPosition(Nz::Vector2f::Zero());
|
||||
|
||||
return body;
|
||||
|
||||
Reference in New Issue
Block a user