NovaBryan/EVE_Dump
Log | Files | 📦 下载最新源码 (.zip) | Refs | README

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)