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

superweapon.py (2213B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\behaviors\monitors\superweapon.py
      2 import logging
      3 from behaviors.tasks import Task
      4 from ccpProfile import TimedFunction
      5 from spacecomponents.common.componentConst import TURBO_SHIELD_CLASS
      6 from spacecomponents.server.messages import MSG_ON_TURBO_SHIELD_STATE_CHANGED
      7 logger = logging.getLogger(__name__)
      8 
      9 class WaitForTurboShieldState(Task):
     10 
     11     @TimedFunction('behaviors::monitors::superweapon::WaitForTurboShieldState::OnEnter')
     12     def OnEnter(self):
     13         self.component = None
     14         myItemId = self.context.myItemId
     15         try:
     16             self.component = self.GetTurboShieldComponent(myItemId)
     17         except KeyError:
     18             self.SetStatusToFailed()
     19             return
     20 
     21         if self.component.IsShieldState(self.attributes.turboShieldState):
     22             self.SetStatusToSuccess()
     23             self.SendMessageStateChanged()
     24         else:
     25             self.SetStatusToFailed()
     26             self.component.SubscribeToMessage(MSG_ON_TURBO_SHIELD_STATE_CHANGED, self.OnTurboShieldStateChanged)
     27 
     28     def CleanUp(self):
     29         if self.IsInvalid():
     30             return
     31         if self.component is not None:
     32             self.component.UnsubscribeFromMessage(MSG_ON_TURBO_SHIELD_STATE_CHANGED, self.OnTurboShieldStateChanged)
     33             self.component = None
     34         self.SetStatusToInvalid()
     35 
     36     @TimedFunction('behaviors::monitors::superweapon::WaitForTurboShieldState::OnTurboShieldStateChanged')
     37     def OnTurboShieldStateChanged(self, turboShieldState):
     38         if self.IsInvalid():
     39             return
     40         if turboShieldState == self.attributes.turboShieldState:
     41             self.SendMessageStateChanged()
     42             self.behaviorTree.RequestReset(self)
     43 
     44     def SendMessageStateChanged(self):
     45         if getattr(self.attributes, 'messageAddress', None) is None:
     46             return
     47         state = self.GetLastBlackboardValue(self.attributes.messageAddress)
     48         if not state:
     49             self.SendBlackboardValue(self.attributes.messageAddress, True)
     50 
     51     def GetTurboShieldComponent(self, itemId):
     52         return self.context.ballpark.componentRegistry.GetComponentForItem(itemId, TURBO_SHIELD_CLASS)