reinforcements.py (3207B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\behaviors\monitors\reinforcements.py 2 from ballpark.entities.reinforcementmanager import REINFORCEMENTS_AUTHORIZED, REINFORCEMENT_COOLDOWN, ReinforcedEntityGroupNotFoundError 3 from behaviors import status 4 from behaviors.behaviortree import UnrecoverableBehaviorError 5 from behaviors.blackboards import scopes, BlackboardDeletedError 6 from behaviors.tasks import Task 7 from ccpProfile import TimedFunction 8 REINFORCEMENTS_AUTHORIZED_ADDRESS = (scopes.ScopeTypes.EntityGroup, REINFORCEMENTS_AUTHORIZED) 9 REINFORCEMENT_COOLDOWN_ADDRESS = (scopes.ScopeTypes.EntityGroup, REINFORCEMENT_COOLDOWN) 10 11 class AreReinforcementsAuthorizedMonitor(Task): 12 13 @TimedFunction('behaviors::monitors::reinforcements::AreReinforcementsAuthorizedMonitor::OnEnter') 14 def OnEnter(self): 15 reinforcementManager = self.context.entityLocation.GetReinforcementManager() 16 try: 17 if reinforcementManager.IsReinforcementAuthorized(self.context.myEntityGroupId): 18 self.status = status.TaskSuccessStatus 19 else: 20 self.SubscribeToBlackboard(REINFORCEMENTS_AUTHORIZED_ADDRESS, self.OnReinforcementAuthorizationChanged) 21 self.status = status.TaskFailureStatus 22 except (ReinforcedEntityGroupNotFoundError, BlackboardDeletedError): 23 raise UnrecoverableBehaviorError('Unable to find reinforced entity group. All the members are likely dead.') 24 25 @TimedFunction('behaviors::monitors::reinforcements::AreReinforcementsAuthorizedMonitor::OnReinforcementAuthorizationChanged') 26 def OnReinforcementAuthorizationChanged(self, messageName, message): 27 if self.IsInvalid(): 28 return 29 isAuthorized = message.value 30 if not isAuthorized: 31 return 32 self.behaviorTree.RequestReset(requestedBy=self) 33 34 def CleanUp(self): 35 if not self.IsInvalid(): 36 self.UnsubscribeToBlackboard(REINFORCEMENTS_AUTHORIZED_ADDRESS, self.OnReinforcementAuthorizationChanged) 37 self.SetStatusToInvalid() 38 39 40 class AreReinforcementAvailableMonitor(Task): 41 42 @TimedFunction('behaviors::monitors::reinforcements::AreReinforcementAvailableMonitor::OnEnter') 43 def OnEnter(self): 44 myEntityGroupId = self.context.myEntityGroupId 45 reinforcementManager = self.context.entityLocation.GetReinforcementManager() 46 if reinforcementManager.AreReinforcementsAvailable(myEntityGroupId): 47 self.SetStatusToSuccess() 48 else: 49 self.SubscribeToBlackboard(REINFORCEMENT_COOLDOWN_ADDRESS, self.OnCooldownDone) 50 self.SetStatusToFailed() 51 52 @TimedFunction('behaviors::monitors::reinforcements::AreReinforcementAvailableMonitor::OnCooldownDone') 53 def OnCooldownDone(self, messageName, message): 54 if self.status is status.TaskInvalidStatus: 55 return 56 isCoolingDown = message.value is not None 57 if isCoolingDown: 58 return 59 self.behaviorTree.RequestReset(requestedBy=self) 60 61 def CleanUp(self): 62 self.status = status.TaskInvalidStatus 63 self.UnsubscribeToBlackboard(REINFORCEMENT_COOLDOWN_ADDRESS, self.OnCooldownDone)