diff --git a/leenkx/Sources/leenkx/trait/physics/bullet/PhysicsWorld.hx b/leenkx/Sources/leenkx/trait/physics/bullet/PhysicsWorld.hx index b093e7f..4517f76 100644 --- a/leenkx/Sources/leenkx/trait/physics/bullet/PhysicsWorld.hx +++ b/leenkx/Sources/leenkx/trait/physics/bullet/PhysicsWorld.hx @@ -85,6 +85,22 @@ class PhysicsWorld extends Trait { public static var physTime = 0.0; #end + public static function getSolverInfo(world:bullet.Bt.DynamicsWorld):Dynamic { + return Reflect.callMethod(world, Reflect.field(world, "getSolverInfo"), []); + } + + public static function setSolverIterations(world:bullet.Bt.DynamicsWorld, iterations:Int):Void { + var solverInfo = getSolverInfo(world); + if (solverInfo != null) { + Reflect.setField(solverInfo, "m_numIterations", iterations); + } else { + trace("Warning: Could not access solver info. Solver iterations not applied."); + } + } + + + + public function new(timeScale = 1.0, maxSteps = 10, solverIterations = 10, debugDrawMode: DebugDrawMode = NoDebug) { super(); @@ -164,7 +180,8 @@ class PhysicsWorld extends Trait { #else world = new bullet.Bt.DiscreteDynamicsWorld(dispatcher, broadphase, solver, collisionConfiguration); #end - + // Set the solver iterations from Blender's rigid body world + setSolverIterations(world, solverIterations); setGravity(gravity); }