From 17849226e4be4103f8bee416f0cc63b4d1bb8b2c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Leclercq?= Date: Fri, 9 Feb 2018 17:24:00 +0100 Subject: [PATCH] Physics2D/PhysWorld2D: Add iteration count control --- ChangeLog.md | 1 + include/Nazara/Physics2D/PhysWorld2D.hpp | 2 ++ src/Nazara/Physics2D/PhysWorld2D.cpp | 10 ++++++++++ 3 files changed, 13 insertions(+) diff --git a/ChangeLog.md b/ChangeLog.md index fbea8802f..329f1200e 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -63,6 +63,7 @@ Nazara Engine: - Add RigidBody2D simulation control (via EnableSimulation and IsSimulationEnabled), which allows to disable physics and collisions at will. - ⚠️ LuaInstance no longer load all lua libraries on construction, this is done in the new LoadLibraries method which allows you to excludes some libraries - Clock::Restart now returns the elapsed microseconds since construction or last Restart call +- Add PhysWorld2D::[Get|Set]IterationCount to control how many iterations chipmunk will perform per step. Nazara Development Kit: - Added ImageWidget (#139) diff --git a/include/Nazara/Physics2D/PhysWorld2D.hpp b/include/Nazara/Physics2D/PhysWorld2D.hpp index f2b6195e7..00d64bc4d 100644 --- a/include/Nazara/Physics2D/PhysWorld2D.hpp +++ b/include/Nazara/Physics2D/PhysWorld2D.hpp @@ -54,6 +54,7 @@ namespace Nz float GetDamping() const; Vector2f GetGravity() const; cpSpace* GetHandle() const; + std::size_t GetIterationCount() const; float GetStepSize() const; bool NearestBodyQuery(const Vector2f& from, float maxDistance, Nz::UInt32 collisionGroup, Nz::UInt32 categoryMask, Nz::UInt32 collisionMask, RigidBody2D** nearestBody = nullptr); @@ -69,6 +70,7 @@ namespace Nz void SetDamping(float dampingValue); void SetGravity(const Vector2f& gravity); + void SetIterationCount(std::size_t iterationCount); void SetStepSize(float stepSize); void Step(float timestep); diff --git a/src/Nazara/Physics2D/PhysWorld2D.cpp b/src/Nazara/Physics2D/PhysWorld2D.cpp index c0db3749f..c4b296e5c 100644 --- a/src/Nazara/Physics2D/PhysWorld2D.cpp +++ b/src/Nazara/Physics2D/PhysWorld2D.cpp @@ -144,6 +144,11 @@ namespace Nz return m_handle; } + std::size_t PhysWorld2D::GetIterationCount() const + { + return cpSpaceGetIterations(m_handle); + } + float PhysWorld2D::GetStepSize() const { return m_stepSize; @@ -281,6 +286,11 @@ namespace Nz cpSpaceSetGravity(m_handle, cpv(gravity.x, gravity.y)); } + void PhysWorld2D::SetIterationCount(std::size_t iterationCount) + { + cpSpaceSetIterations(m_handle, int(iterationCount)); + } + void PhysWorld2D::SetStepSize(float stepSize) { m_stepSize = stepSize;