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

component.py (2094B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\dynamicresources\client\ess\bracket\component.py
      2 import eveui
      3 import spacecomponents.client
      4 import threadutils
      5 from dynamicresources.client.ess.bracket.root import EssBracket as EssBracketUi
      6 from dynamicresources.client.service import get_dynamic_resource_service
      7 from dynamicresources.common.ess.const import ESS_MAX_LINK_DISTANCE_METERS
      8 
      9 class EssBracket(spacecomponents.Component):
     10 
     11     def __init__(self, itemID, typeID, attributes, componentRegistry):
     12         super(EssBracket, self).__init__(itemID, typeID, attributes, componentRegistry)
     13         self._bracket_ui = None
     14         self.SubscribeToMessage(spacecomponents.MSG_ON_ADDED_TO_SPACE, self._on_added_to_space)
     15         self.SubscribeToMessage(spacecomponents.MSG_ON_REMOVED_FROM_SPACE, self._on_removed_from_space)
     16 
     17     def _on_added_to_space(self, slim_item):
     18         if self._bracket_ui is None:
     19             self._bracket_ui = EssBracketUi(slim_item.itemID)
     20         self._start_range_update_loop()
     21 
     22     def _on_removed_from_space(self):
     23         if self._bracket_ui:
     24             self._bracket_ui.close()
     25             self._bracket_ui = None
     26         self._update_range_state(in_range=False)
     27 
     28     @threadutils.threaded
     29     def _start_range_update_loop(self):
     30         while self._bracket_ui is not None:
     31             eveui.wait_for_next_frame()
     32             ballpark = sm.GetService('michelle').GetBallpark()
     33             if ballpark is None:
     34                 self._update_range_state(in_range=False)
     35                 continue
     36             if any((ballpark.GetBall(item_id) is None for item_id in (self.itemID, session.shipid))):
     37                 self._update_range_state(in_range=False)
     38                 continue
     39             distance = ballpark.DistanceBetween(session.shipid, self.itemID)
     40             in_range = distance <= ESS_MAX_LINK_DISTANCE_METERS
     41             self._update_range_state(in_range)
     42 
     43     def _update_range_state(self, in_range):
     44         service = get_dynamic_resource_service()
     45         service.ess_state_provider.evolve(in_range=in_range)