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)