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

capture_Point_ui.py (5919B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\battleground_capture_point_ui\client\capture_Point_ui.py
      2 import eveui
      3 import gametime
      4 import uthread2
      5 from battleground_capture_point_ui.client.camera_facing_container import CameraFacingUiContainer
      6 from battleground_capture_point_ui.client.capture_point_state.contested import Contested
      7 from battleground_capture_point_ui.client.capture_point_state.empty import Empty
      8 from battleground_capture_point_ui.client.capture_point_state.uncontested import UnContested
      9 from battleground_capture_point_ui.client.distance_thresholded_camera_facing_ui_container import DistanceThreasholdedCameraFacingUiContainer
     10 from battleground_capture_point_ui.client.state import StateMachine
     11 from battleground_capture_point_ui.client.ui_container import TimerRingUIContainer
     12 from carbon.common.lib.const import SEC
     13 from carbon.common.script.sys.serviceManager import ServiceManager
     14 from carbonui.uicore import uicore
     15 from dynamicresources.client.ess.bracket.camera import InFlightCameraReference
     16 
     17 class CapturePointUI(object):
     18     CONTESTED = 1
     19     UNCONTESTED = 2
     20     EMPTY = 3
     21     GAUGE_ZERO_THRESHOLD = 0.99999
     22     __notifyevents__ = ('OnWarpActive',)
     23 
     24     def __init__(self, item_id):
     25         self.defenderId = None
     26         self.attackerId = None
     27         self._item_id = item_id
     28         self._closed = False
     29         self._status_update_token = None
     30         self._michelle = ServiceManager.Instance().GetService('michelle')
     31         self._scene_manager = ServiceManager.Instance().GetService('sceneManager')
     32         self._camera = InFlightCameraReference(self._scene_manager)
     33         self._state_machine = StateMachine()
     34         self._ui = None
     35         self.distance_thresholded_camera_facing_ui = None
     36         self.timer_ui_state = None
     37         self.nextTickTime = None
     38         self.totalTickTime = None
     39         self.timerStarted = False
     40         self.runTimerLoop = True
     41         self._init()
     42 
     43     def _init(self):
     44         ball = self._wait_for_ball()
     45         scene = self._scene_manager.GetRegisteredScene('default', allowBlocking=True)
     46         self._ui = TimerRingUIContainer(ball=ball, scene=scene, camera=self._camera)
     47         self.distance_thresholded_camera_facing_ui = DistanceThreasholdedCameraFacingUiContainer(parent=uicore.layer.space_ui, ball=ball, camera=self._camera, scene=scene)
     48         self.camera_facing_ui = CameraFacingUiContainer(parent=uicore.layer.space_ui, ball=ball, camera=self._camera, scene=scene)
     49         ServiceManager.Instance().RegisterNotify(self)
     50 
     51     def set_next_tick_time(self, nextTickTime, totalTickTime):
     52         self.totalTickTime = totalTickTime
     53         self.nextTickTime = nextTickTime
     54         if totalTickTime == 0 or totalTickTime is None:
     55             return
     56         if not self.timerStarted:
     57             self.timerStarted = True
     58             uthread2.start_tasklet(self._timer_update_loop)
     59 
     60     def set_state(self, remainingDuration, totalDuration, currentKing, state):
     61         if state == CapturePointUI.UNCONTESTED:
     62             self.distance_thresholded_camera_facing_ui.SetCameraThresholdingEnabled(False)
     63             self.camera_facing_ui.SetCameraThresholdingEnabled(False)
     64             self.timer_ui_state = self._state_machine.move_to(UnContested(self._ui, self.distance_thresholded_camera_facing_ui._ui, self.camera_facing_ui._ui, remainingDuration, totalDuration, currentKing))
     65         elif state == CapturePointUI.CONTESTED:
     66             self.distance_thresholded_camera_facing_ui.SetCameraThresholdingEnabled(False)
     67             self.camera_facing_ui.SetCameraThresholdingEnabled(False)
     68             self.timer_ui_state = self._state_machine.move_to(Contested(self._ui, self.distance_thresholded_camera_facing_ui._ui, self.camera_facing_ui._ui, self.defenderId))
     69         else:
     70             self.distance_thresholded_camera_facing_ui.SetCameraThresholdingEnabled(False)
     71             self.camera_facing_ui.SetCameraThresholdingEnabled(False)
     72             self.timer_ui_state = self._state_machine.move_to(Empty(self._ui, self.distance_thresholded_camera_facing_ui._ui, self.camera_facing_ui._ui))
     73 
     74     def _timer_update_loop(self):
     75         while self.runTimerLoop:
     76             eveui.wait_for_next_frame()
     77             if self.timer_ui_state is not None and self.timer_ui_state.IsReady():
     78                 new_gauge_value = 1.0 - self._get_proportion_capture_point_tick_time_left()
     79                 if new_gauge_value > self.GAUGE_ZERO_THRESHOLD:
     80                     self.nextTickTime = gametime.GetSimTime() + self.totalTickTime * SEC
     81                     self.timer_ui_state.NotifyTimerReset()
     82                 self.timer_ui_state.SetTimerValue(new_gauge_value, animate=False)
     83 
     84     def _get_proportion_capture_point_tick_time_left(self):
     85         if self.totalTickTime == 0 or self.totalTickTime is None:
     86             return 0.0
     87         now = gametime.GetSimTime()
     88         simTimeLeft = self.nextTickTime - now
     89         proportionLeft = float(simTimeLeft) / float(self.totalTickTime * SEC)
     90         return proportionLeft
     91 
     92     def _wait_for_ball(self):
     93         ball = None
     94         while ball is None:
     95             if self._closed:
     96                 return
     97             ball = self._michelle.GetBall(self._item_id)
     98             if ball is not None:
     99                 break
    100             eveui.wait_for_next_frame()
    101 
    102         return ball
    103 
    104     def remove_from_space(self):
    105         self.runTimerLoop = False
    106         self._closed = True
    107 
    108         def clean_up():
    109             if self._state_machine.state:
    110                 self.distance_thresholded_camera_facing_ui._ui.Flush()
    111                 self.camera_facing_ui._ui.Flush()
    112                 self._state_machine.state.exit()
    113                 eveui.wait_for_next_frame()
    114             self._ui.remove_from_space()
    115             self.distance_thresholded_camera_facing_ui.remove_from_space()
    116             self.camera_facing_ui.remove_from_space()
    117 
    118         uthread2.start_tasklet(clean_up)