def get_location_target(self): """system AITarget where fleet is or will be""" # TODO add parameter turn fleet = fo.getUniverse().getFleet(self.fleet.id) system_id = fleet.systemID if system_id >= 0: return System(system_id) else: # in starlane, so return next system return System(fleet.nextSystemID)
def generate_fleet_orders(self): """generates AIFleetOrders from fleets targets to accomplish""" universe = fo.getUniverse() fleet_id = self.fleet.id fleet = universe.getFleet(fleet_id) if (not fleet) or fleet.empty or ( fleet_id in universe.destroyedObjectIDs(fo.empireID()) ): # fleet was probably merged into another or was destroyed foAI.foAIstate.delete_fleet_info(fleet_id) return # TODO: priority self.clear_fleet_orders() system_id = fleet.systemID start_sys_id = [fleet.nextSystemID, system_id][system_id >= 0] # if fleet doesn't have any mission, then repair if needed or resupply if is current location not in supplyable system empire = fo.getEmpire() fleet_supplyable_system_ids = empire.fleetSupplyableSystemIDs # if (not self.hasAnyAIMissionTypes()): if not self.target and (system_id not in set(AIstate.colonyTargetedSystemIDs + AIstate.outpostTargetedSystemIDs + AIstate.invasionTargetedSystemIDs + AIstate.blockadeTargetedSystemIDs)): if self._need_repair(): repair_fleet_order = MoveUtilsAI.get_repair_fleet_order( self.fleet, start_sys_id) if repair_fleet_order.is_valid(): self.orders.append(repair_fleet_order) if fleet.fuel < fleet.maxFuel and self.get_location_target( ).id not in fleet_supplyable_system_ids: resupply_fleet_order = MoveUtilsAI.get_resupply_fleet_order( self.fleet, self.get_location_target()) if resupply_fleet_order.is_valid(): self.orders.append(resupply_fleet_order) return # no targets # for some targets fleet has to visit systems and therefore fleet visit them if self.target: system_targets_required_to_visit = [self.target.get_system()] orders_to_visit_systems = MoveUtilsAI.get_fleet_orders_from_system_targets( self.fleet, system_targets_required_to_visit) # TODO: if fleet doesn't have enough fuel to get to final target, consider resetting Mission for fleet_order in orders_to_visit_systems: self.orders.append(fleet_order) # if fleet is in some system = fleet.system_id >=0, then also generate system AIFleetOrders if system_id >= 0 and self.target: # system in where fleet is system_target = System(system_id) # if mission aiTarget has required system where fleet is, then generate fleet_order from this aiTarget # for all targets in all mission types get required systems to visit if system_target == self.target.get_system(): # from target required to visit get fleet orders to accomplish target fleet_order = self._get_fleet_order_from_target( self.type, self.target) self.orders.append(fleet_order)