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); } } }
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; }
public void ThrowCollisionEvent(ElementsCollisionEvent evt) { if (OnCollision != null) { OnCollision(evt); } }