public void ExecuteMove(IMovable element)
 {
     Point dest = element.Location + element.Displacement;
     if (dest.X >= Univers.Width)
     {
         dest.X = 0;
     }
     else if (dest.X < 0)
     {
         dest.X = Univers.Width - 1;
     }
     if (dest.Y >= Univers.Height)
     {
         dest.Y = 0;
     }
     else if (dest.Y < 0)
     {
         dest.Y = Univers.Height - 1;
     }
     try {
         element.Location = dest;
     }
     catch (ElementCollisionException)
     {
         var evt = new ElementsCollisionEvent(element, Univers[dest], dest);
         Univers.ThrowCollisionEvent(evt);
         if (OnCollision != null)
         {
             OnCollision(evt);
         }
     }
 }
示例#2
0
 private static void HandleCollision(ElementsCollisionEvent evt)
 {
     // Implémentation sommaire, qui ne tient pas compte de la masse
     // Ce mécanisme devrait plutôt être exporté dans une classe à part
     Vector moveA = evt.FromElement.Displacement;
     Vector moveB = evt.ToElement.Displacement;
     // On intervertit simplement les vecteurs de déplacements
     evt.FromElement.Displacement = moveB;
     evt.ToElement.Displacement = moveA;
 }
 private void HandleCollision(ElementsCollisionEvent evt)
 {
     _collision = evt.AtLocation;
 }
示例#4
0
 public void ThrowCollisionEvent(ElementsCollisionEvent evt)
 {
     if (OnCollision != null)
     {
         OnCollision(evt);
     }
 }