public Point? GetCampaignPosition(Troop troop, List<Point> orientations, bool close) { GameArea allAvailableArea = this.GetAllAvailableArea(false); GameArea sourceArea = new GameArea(); foreach (Point point in allAvailableArea.Area) { if ((base.Scenario.GetArchitectureByPosition(point) == this || troop.IsMovableOnPosition(point)) && base.Scenario.GetTroopByPosition(point) == null) { sourceArea.Area.Add(point); } } GameArea highestFightingForceArea = troop.GetHighestFightingForceArea(sourceArea); if (highestFightingForceArea != null) { if (close) { return base.Scenario.GetClosestPosition(highestFightingForceArea, orientations); } return base.Scenario.GetFarthestPosition(highestFightingForceArea, orientations); } return null; }