public void SimulationStep(float elapsedTime) { if (ActiveBodies.Count == 0 || World == null) { System.Threading.Thread.Sleep(100); return; } if (AddBodyQueue.Count > 0) { var lst = AddBodyQueue.ToArray(); AddBodyQueue = new List <PhysicalBody>(); foreach (var b in lst) { World.AddRigidBody(b.Body); } } if (RemoveBodyQueue.Count > 0) { var lst = RemoveBodyQueue.ToArray(); RemoveBodyQueue = new List <PhysicalBody>(); foreach (var b in lst) { World.RemoveRigidBody(b.Body); } } World.StepSimulation(elapsedTime); for (int i = 0; i < ActiveBodies.Count; i++) { var b = ActiveBodies[i]; if (b != null && b.Body != null && b.Body.ActivationState != ActivationState.IslandSleeping) { b.ApplyChanges(); } } }
public void RemoveBody(PhysicalBody body) { //World.RemoveRigidBody(body.Body); RemoveBodyQueue.Add(body); ActiveBodies.Remove(body); }