/* * Perform waypoint tasks in the given order * * Colonise * Scrap * Invade * Unload * Bomb * Stabilise * Others * */ private void performWaypointTasks(int index) { List <Fleet> coloniseFleets = new List <Fleet>(); List <Fleet> scrapFleets = new List <Fleet>(); List <Fleet> otherFleets = new List <Fleet>(); List <Fleet> invadeFleets = new List <Fleet>(); List <Fleet> unloadCargoFleets = new List <Fleet>(); List <Fleet> bombFleets = new List <Fleet>(); List <Fleet> StabilizeFleets = new List <Fleet>(); foreach (Fleet fleet in game.getFleets()) { if (fleet.getWaypoints().Count > index) { switch (fleet.getWaypoints()[index].getTask()) { case WaypointTask.Colonise: coloniseFleets.Add(fleet); break; case WaypointTask.ScrapFleet: scrapFleets.Add(fleet); break; case WaypointTask.Invade: invadeFleets.Add(fleet); break; case WaypointTask.UnloadCargo: unloadCargoFleets.Add(fleet); break; case WaypointTask.Bomb: bombFleets.Add(fleet); break; case WaypointTask.Stabilize: StabilizeFleets.Add(fleet); break; default: otherFleets.Add(fleet); break; } } } foreach (Fleet fleet in coloniseFleets) { fleetController.doTask(fleet, fleet.getWaypoints()[index]); } foreach (Fleet fleet in scrapFleets) { fleetController.doTask(fleet, fleet.getWaypoints()[index]); } foreach (Fleet fleet in invadeFleets) { fleetController.doTask(fleet, fleet.getWaypoints()[index]); } foreach (Fleet fleet in unloadCargoFleets) { fleetController.doTask(fleet, fleet.getWaypoints()[index]); } foreach (Fleet fleet in bombFleets) { fleetController.doTask(fleet, fleet.getWaypoints()[index]); } foreach (Fleet fleet in StabilizeFleets) { fleetController.doTask(fleet, fleet.getWaypoints()[index]); } foreach (Fleet fleet in otherFleets) { fleetController.doTask(fleet, fleet.getWaypoints()[index]); } if (index != 0) { foreach (Fleet fleet in game.getFleets()) { if (fleet.getWaypoints().Count > index) { // we've arrived, remove the waypoint fleet.getWaypoints().RemoveAt(0); if (fleet.getWaypoints().Count == 1) { Message.fleetCompletedAssignedOrders(fleet.getOwner(), fleet); } } } } }