def fighting_ships_in_sight(self, **environment): """ Attacks frigates, and keeps distance based on power balance. """ enemies = environment['enemies'] ship_group = environment['ship_group'] power_balance = environment['power_balance'] if power_balance >= 1.0: range_function = CombatManager.close_range else: range_function = CombatManager.fallback_range ship_pairs = UnitManager.get_closest_ships_for_each( ship_group, enemies) for ship, enemy_ship in ship_pairs: if self.session.world.diplomacy.are_enemies( ship.owner, enemy_ship.owner): BehaviorMoveCallback.maintain_distance_and_attack( ship, enemy_ship, range_function(ship)) BehaviorComponent.log.info( '%s: Attack: %s -> %s', self.__class__.__name__, ship.get_component(NamedComponent).name, enemy_ship.get_component(NamedComponent).name) else: BehaviorComponent.log.info( '%s: Enemy ship %s was not hostile', self.__class__.__name__, ship.get_component(NamedComponent).name)
def working_ships_in_sight(self, **environment): """ Attacks working ships only if they are hostile. """ enemies = environment['enemies'] ship_group = environment['ship_group'] if self.session.world.diplomacy.are_enemies(self.owner, enemies[0].owner): # working ships won't respond with fire, each ship should attack the closest one, and chase them if necessary. ship_pairs = UnitManager.get_closest_ships_for_each(ship_group, enemies) for ship, enemy_ship in ship_pairs: range_function = CombatManager.close_range BehaviorMoveCallback.maintain_distance_and_attack(ship, enemy_ship, range_function(ship)) BehaviorComponent.log.info('%s: Attacked enemy ship', self.__class__.__name__) else: BehaviorComponent.log.info('%s: Enemy worker was not hostile', self.__class__.__name__)
def working_ships_in_sight(self, **environment): """ Attacks working ships only if they are hostile. """ enemies = environment['enemies'] ship_group = environment['ship_group'] if self.session.world.diplomacy.are_enemies(self.owner, enemies[0].owner): # working ships won't respond with fire, each ship should attack the closest one, and chase them if necessary. ship_pairs = UnitManager.get_closest_ships_for_each(ship_group, enemies) for ship, enemy_ship in ship_pairs: range_function = CombatManager.close_range BehaviorMoveCallback.maintain_distance_and_attack(ship, enemy_ship, range_function(ship)) BehaviorComponent.log.info('%s: Attacked enemy ship', self.__class__.__name__) else: BehaviorComponent.log.info('%s: Enemy worker was not hostile', self.__class__.__name__)
def fighting_ships_in_sight(self, **environment): """ Attacks frigates, and keeps distance based on power balance. """ enemies = environment['enemies'] ship_group = environment['ship_group'] power_balance = environment['power_balance'] if power_balance >= 1.0: range_function = CombatManager.close_range else: range_function = CombatManager.fallback_range ship_pairs = UnitManager.get_closest_ships_for_each(ship_group, enemies) for ship, enemy_ship in ship_pairs: if self.session.world.diplomacy.are_enemies(ship.owner, enemy_ship.owner): BehaviorMoveCallback.maintain_distance_and_attack(ship, enemy_ship, range_function(ship)) BehaviorComponent.log.info('%s: Attack: %s -> %s', self.__class__.__name__, ship.get_component(NamedComponent).name, enemy_ship.get_component(NamedComponent).name) else: BehaviorComponent.log.info('%s: Enemy ship %s was not hostile', self.__class__.__name__, ship.get_component(NamedComponent).name)