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

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')