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)