jumpBridge.py (6593B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\jumpbridge\client\jumpBridge.py 2 import evetypes 3 from appConst import maxStargateJumpingDistance 4 from carbonui.control.contextMenu.menuData import MenuData 5 from eveexceptions import UserError 6 from evelink.client.handlers.show_info.link import type_list_link 7 from jumpbridge.client.validation_rules import validate_ship_type 8 from jumpbridge.common.slim_item_serialization import parse_slim_value 9 from logging import getLogger 10 from spacecomponents import Component 11 from spacecomponents.client import MSG_ON_ADDED_TO_SPACE, MSG_ON_SLIM_ITEM_UPDATED, MSG_ON_REMOVED_FROM_SPACE 12 from spacecomponents.client.ui.jumpbridge.jumpBridgeCont import JumpBridgeCont 13 from spacecomponents.common import componentConst 14 from spacecomponents.common.componentConst import JUMP_BRIDGE 15 if False: 16 from typing import Optional 17 logger = getLogger('jump_bridge') 18 19 class JumpBridge(Component): 20 21 def __init__(self, itemID, typeID, attributes, componentRegistry): 22 Component.__init__(self, itemID, typeID, attributes, componentRegistry) 23 self._bracket_ui = None 24 self._excludedShipsList = evetypes.GetTypeIDsByListID(attributes.restrictionTypeList) 25 self._zoneMultipliers = [attributes.zone1Modifier, 26 attributes.zone2Modifier, 27 attributes.zone3Modifier, 28 attributes.zone4Modifier, 29 attributes.zone5Modifier] 30 self._lastETag = 0 31 self._lastActivationState = None 32 self.SubscribeToMessage(MSG_ON_ADDED_TO_SPACE, self._OnAddedToSpace) 33 self.SubscribeToMessage(MSG_ON_REMOVED_FROM_SPACE, self._OnRemovedFromSpace) 34 self.SubscribeToMessage(MSG_ON_SLIM_ITEM_UPDATED, self._OnSlimItemUpdate) 35 36 @property 37 def zoneMultipliers(self): 38 return self._zoneMultipliers 39 40 def _OnAddedToSpace(self, slimItem): 41 logger.debug('JumpBridge._OnAddedToSpace [%s]', self.itemID) 42 self._ballpark = sm.GetService('michelle').GetBallpark() 43 self._OnSlimItemUpdate(slimItem) 44 if self._bracket_ui is None: 45 from spacecomponents.client.ui.jumpbridge.bracket import JumpBridgeBracket 46 self._bracket_ui = JumpBridgeBracket(item_id=slimItem.itemID, type_id=slimItem.typeID, content_class=JumpBridgeCont) 47 48 def _OnRemovedFromSpace(self): 49 if self._bracket_ui: 50 self._bracket_ui.close() 51 self._bracket_ui = None 52 53 def _OnSlimItemUpdate(self, slimItem): 54 if slimItem.component_jumpBridge is not None: 55 new_etag = parse_slim_value(slimItem.component_jumpBridge) 56 if new_etag != self._lastETag: 57 self._OnETagChanged() 58 self._lastETag = new_etag 59 if slimItem.activationState is not None: 60 newActivationState = slimItem.activationState 61 if newActivationState != self._lastActivationState: 62 self._OnActivationStateChanged() 63 self._lastActivationState = newActivationState 64 65 def _OnETagChanged(self): 66 sm.ScatterEvent('OnJumpBridgeChargeChanged') 67 68 def _OnActivationStateChanged(self): 69 sm.ScatterEvent('OnJumpBridgeActivationChanged') 70 71 def IsAccessibleByShip(self, shipTypeID): 72 logger.debug('JumpBridge.IsAccessibleByShip [%s] %s', self.itemID, shipTypeID) 73 if not self._ValidateShipType(shipTypeID): 74 return False 75 return True 76 77 def ValidateJumpAttempt(self, shipItemID, shipTypeID): 78 logger.debug('JumpBridge.ValidateJumpAttempt [%s] %s, %s', self.itemID, shipItemID, shipTypeID) 79 if not self._ValidateShipType(shipTypeID): 80 raise UserError('JumpBridgeRestrictedShip', {'shipName': evetypes.GetName(shipTypeID)}) 81 if self._ballpark.DistanceBetween(shipItemID, self.itemID) > maxStargateJumpingDistance: 82 raise UserError('NotCloseEnoughToJump', {'maxdist': maxStargateJumpingDistance}) 83 84 def _ValidateShipType(self, shipTypeID): 85 return validate_ship_type(shipTypeID, self._excludedShipsList) 86 87 def GetGMMenu(self): 88 menu_data = MenuData() 89 return menu_data 90 91 @staticmethod 92 def GetAttributeInfo(typeID, attributes, instance, localization): 93 from eve.client.script.ui.control.entries.header import Header 94 from eve.client.script.ui.control.entries.label_text import LabelTextSides 95 from spacecomponents.client.display import EntryData 96 listTitle = evetypes.GetTypeListDisplayName(attributes.restrictionTypeList) 97 attributeEntries = [EntryData(Header, localization.GetByLabel('UI/Inflight/SpaceComponents/JumpBridge/InfoAttributesHeader')), 98 EntryData(LabelTextSides, localization.GetByLabel('UI/Inflight/SpaceComponents/JumpBridge/ShipRestrictions'), type_list_link(attributes.restrictionTypeList, listTitle, header_text=listTitle, window_caption=listTitle)), 99 EntryData(LabelTextSides, localization.GetByLabel('UI/Inflight/SpaceComponents/JumpBridge/Zone1Modifier'), attributes.zone1Modifier), 100 EntryData(LabelTextSides, localization.GetByLabel('UI/Inflight/SpaceComponents/JumpBridge/Zone2Modifier'), attributes.zone2Modifier), 101 EntryData(LabelTextSides, localization.GetByLabel('UI/Inflight/SpaceComponents/JumpBridge/Zone3Modifier'), attributes.zone3Modifier), 102 EntryData(LabelTextSides, localization.GetByLabel('UI/Inflight/SpaceComponents/JumpBridge/Zone4Modifier'), attributes.zone4Modifier), 103 EntryData(LabelTextSides, localization.GetByLabel('UI/Inflight/SpaceComponents/JumpBridge/Zone5Modifier'), attributes.zone5Modifier)] 104 return attributeEntries 105 106 def ReloadUI(self): 107 if self._bracket_ui: 108 self._bracket_ui.close() 109 self._bracket_ui = None 110 slimItem = sm.GetService('michelle').GetItem(self.itemID) 111 from spacecomponents.client.ui.jumpbridge.bracket import JumpBridgeBracket 112 self._bracket_ui = JumpBridgeBracket(item_id=slimItem.itemID, type_id=slimItem.typeID, content_class=JumpBridgeCont) 113 114 115 def GetJumpBridgeComponent(ballpark, structureID): 116 logger.debug('GetJumpBridgeComponent [%s]', structureID) 117 try: 118 jumpBridgeComponent = ballpark.componentRegistry.GetComponentForItem(structureID, componentConst.JUMP_BRIDGE) 119 except KeyError: 120 return False 121 122 return jumpBridgeComponent 123 124 125 def GetJumpBridgeInfo(michelleService, structureID): 126 logger.debug('GetJumpBridgeInfo [%s]', structureID) 127 remoteBallpark = michelleService.GetRemotePark() 128 return remoteBallpark.CallComponentFromClient(structureID, JUMP_BRIDGE, 'GetJumpBridgeInfo')