combattargets.py (2997B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\behaviors\conditions\combattargets.py 2 from behaviors.const.combat import COMBAT_MIN_EFFECTIVE_RANGE 3 from behaviors.tasks import Task 4 from behaviors.utility.ballparks import is_ball_in_range, is_coordinate_in_range 5 from behaviors.utility.roles import is_logistic_role 6 from ccpProfile import TimedFunction 7 MAX_DISTANCE_FROM_COMMANDER = 50000 8 9 class HasPendingTarget(Task): 10 11 @TimedFunction('behaviors::conditions::combattargets::HasPendingTarget::OnEnter') 12 def OnEnter(self): 13 if self.context.dogmaLM.HasPendingTarget(self.context.myItemId, self._get_my_target()): 14 self.SetStatusToSuccess() 15 else: 16 self.SetStatusToFailed() 17 18 def _get_my_target(self): 19 return self.GetLastBlackboardValue(self.attributes.targetAddress) 20 21 22 class AmIWithinMyEffectiveCombatRangeOfMyTarget(Task): 23 24 @TimedFunction('behaviors::conditions::combattargets::AmIWithinMyEffectiveCombatRangeOfMyTarget::OnEnter') 25 def OnEnter(self): 26 self.SetStatusToFailed() 27 max_effective_combat_range = self.get_my_max_effective_combat_range() 28 if self._is_within_range(max_effective_combat_range): 29 self.SetStatusToSuccess() 30 31 def get_my_max_effective_combat_range(self): 32 max_effective_combat_range = self.GetLastBlackboardValue(self.attributes.maxEffectiveCombatRangeAddress) 33 return max(max_effective_combat_range, COMBAT_MIN_EFFECTIVE_RANGE) 34 35 def _is_within_range(self, max_effective_combat_range): 36 target_id = self.GetLastBlackboardValue(self.attributes.targetAddress) 37 orbit_target_id = self.GetLastBlackboardValue(self.attributes.orbitTargetAddress) 38 commander_id = self.GetLastBlackboardValue(self.attributes.commanderAddress) 39 if orbit_target_id != commander_id: 40 return is_ball_in_range(self, self.context.myBall.id, target_id, max_effective_combat_range) 41 elif is_logistic_role(self, self.context.myItemId): 42 return is_ball_in_range(self, self.context.myBall.id, orbit_target_id, max_effective_combat_range) 43 else: 44 return is_ball_in_range(self, self.context.myBall.id, orbit_target_id, MAX_DISTANCE_FROM_COMMANDER) 45 46 47 class IsCoordinateWithinMyEffectiveCombatRange(AmIWithinMyEffectiveCombatRangeOfMyTarget): 48 49 def _is_within_range(self, max_effective_combat_range): 50 coordinate = self.GetLastBlackboardValue(self.attributes.coordinateAddress) 51 return is_coordinate_in_range(self, coordinate, max_effective_combat_range) 52 53 54 class IsTargeting(Task): 55 56 @TimedFunction('behaviors::conditions::combattargets::IsTargeting::OnEnter') 57 def OnEnter(self): 58 if self.context.dogmaLM.IsTargeting(self.context.myItemId, self._get_my_target()): 59 self.SetStatusToSuccess() 60 else: 61 self.SetStatusToFailed() 62 63 def _get_my_target(self): 64 return self.GetLastBlackboardValue(self.attributes.targetAddress)