Beispiel #1
0
 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();
         }
     }
 }
Beispiel #2
0
 public void RemoveBody(PhysicalBody body)
 {
     //World.RemoveRigidBody(body.Body);
     RemoveBodyQueue.Add(body);
     ActiveBodies.Remove(body);
 }