public static global::FilsDeBerger.SDL.MoveDirection FleeCharacters(SDL.Character curChar, int fleeDistance, SDL.Character[] charsToFlee) { SortTableOnNearestDistance(curChar, charsToFlee); if (charsToFlee.GetLength(0) > 0) { if (curChar.GetDistance(charsToFlee[0]) < fleeDistance) { // We will think of which direction to take as we fear player controlled Character if (Math.Abs(curChar.Position.X - charsToFlee[0].Position.X) > Math.Abs(curChar.Position.Y - charsToFlee[0].Position.Y)) { // Then it will be right or left if (curChar.Position.X < charsToFlee[0].Position.X) { // We are at the left of player controlled character, continue to the left return global::FilsDeBerger.SDL.MoveDirection.Left; } else { // We are at the right of player controlled character, continue to the right return global::FilsDeBerger.SDL.MoveDirection.Right; } } else { // It will be up or down if (curChar.Position.Y < charsToFlee[0].Position.Y) { // We are upper to player controlled character, continue to move up return global::FilsDeBerger.SDL.MoveDirection.Up; } else { // We are bottom to player controlled character, continue to move down return global::FilsDeBerger.SDL.MoveDirection.Down; } } } else { // We are not in the danger zone, let's just try to eat something return global::FilsDeBerger.SDL.MoveDirection.Stop; } } else { // There is a problem, stop the IA return global::FilsDeBerger.SDL.MoveDirection.Stop; } }