// ---------------------------------------------------------------------------------------------------------------------------------------- // Handle Movement entity public void MovementEntityHandler(List <Entity> Entities) { string TextDirection = ""; AgentMovement FinalDirection; // Verify if the movement is diagonal foreach (Entity entity in Entities) { if (entity.type.Equals("DireccionDiagonal")) { TextDirection = entity.entity; } } // TextDirection is empty, which means it is not a diagonal. if (TextDirection.Equals("")) { foreach (Entity entity in Entities) { if (entity.type.Equals("Direccion")) { TextDirection = entity.entity; } } } switch (TextDirection) { case "arriba": FinalDirection = AgentMovement.Up; break; case "abajo": FinalDirection = AgentMovement.Down; break; case "izquierda": FinalDirection = AgentMovement.Left; break; case "derecha": FinalDirection = AgentMovement.Right; break; case "arriba derecha": case "derecha arriba": FinalDirection = AgentMovement.UpRight; break; case "arriba izquierda": case "izquierda arriba": FinalDirection = AgentMovement.UpLeft; break; case "abajo derecha": case "derecha abajo": FinalDirection = AgentMovement.DownRight; break; case "abajo izquierda": case "izquierda abajo": FinalDirection = AgentMovement.DownLeft; break; default: TextToSpeech("No reconozco la dirección a la que quieres ir."); return; } // Save the previous position in order to clear the draw Node PreviousAgentPosition = new Node() { X = Board.Agent.Position.Item1, Y = Board.Agent.Position.Item2 }; Node NewPosition = Board.CreateMovement(FinalDirection); if (Board.IsValidMovement(NewPosition)) { List <Node> positions = new List <Node>(); positions.Add(PreviousAgentPosition); positions.Add(NewPosition); MainFrame.UpdateItemPosition(positions); Board.Show(); TextToSpeech("Me he movido!"); Board.MoveAgent(FinalDirection); } else { TextToSpeech("No puedo moverme a esa posición, está en uso!"); } }