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

analysis_beacon_ui.py (2962B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\analysisbeacon\client\analysis_beacon_ui.py
      2 import eveui
      3 import threadutils
      4 import uthread2
      5 from analysisbeacon.client.beacon_state.active import Active
      6 from analysisbeacon.client.beacon_state.paused import Paused
      7 from analysisbeacon.client.camera_facing_ui_container import BeaconCameraFacingUiContainer
      8 from analysisbeacon.client.state import StateMachine
      9 from analysisbeacon.client.beacon_ui_container import BeaconUiContainer
     10 from carbon.common.script.sys.serviceManager import ServiceManager
     11 from carbonui.uicore import uicore
     12 from dynamicresources.client.ess.bracket.camera import InFlightCameraReference
     13 
     14 class AnalysisBeaconUI:
     15     __notifyevents__ = ('OnWarpActive',)
     16 
     17     def __init__(self, item_id):
     18         self._item_id = item_id
     19         self._closed = False
     20         self._status_update_token = None
     21         self._michelle = ServiceManager.Instance().GetService('michelle')
     22         self._scene_manager = ServiceManager.Instance().GetService('sceneManager')
     23         self._camera = InFlightCameraReference(self._scene_manager)
     24         self._state_machine = StateMachine()
     25         self._ui = None
     26         self._camera_facing_ui = None
     27         self._init()
     28 
     29     @threadutils.threaded
     30     def _init(self):
     31         ball = self._wait_for_ball()
     32         scene = self._scene_manager.GetRegisteredScene('default', allowBlocking=True)
     33         self._ui = BeaconUiContainer(ball=ball, scene=scene, camera=self._camera)
     34         self._camera_facing_ui = BeaconCameraFacingUiContainer(parent=uicore.layer.space_ui, ball=ball, camera=self._camera, scene=scene)
     35         ServiceManager.Instance().RegisterNotify(self)
     36 
     37     def set_state(self, remainingDuration, totalDuration, paused, active, complete):
     38         if complete:
     39             if self._state_machine.state:
     40                 uthread2.start_tasklet(self._state_machine.state.exit)
     41         elif paused:
     42             uthread2.start_tasklet(self._state_machine.move_to, Paused(self._ui, self._camera_facing_ui._ui, remainingDuration, totalDuration))
     43         elif active:
     44             uthread2.start_tasklet(self._state_machine.move_to, Active(self._ui, self._camera_facing_ui._ui, remainingDuration, totalDuration))
     45 
     46     def _wait_for_ball(self):
     47         ball = None
     48         while ball is None:
     49             if self._closed:
     50                 return
     51             ball = self._michelle.GetBall(self._item_id)
     52             if ball is not None:
     53                 break
     54             eveui.wait_for_next_frame()
     55 
     56         return ball
     57 
     58     def remove_from_space(self):
     59         self._closed = True
     60 
     61         def clean_up():
     62             if self._state_machine.state:
     63                 self._camera_facing_ui._ui.Flush()
     64                 self._state_machine.state.exit()
     65                 eveui.wait_for_next_frame()
     66             self._ui.remove_from_space()
     67             self._camera_facing_ui.remove_from_space()
     68 
     69         uthread2.start_tasklet(clean_up)