online.py (5357B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\dynamicresources\client\ess\bracket\root\online.py 2 import threadutils 3 from dynamicresources.client.ess.bracket.main_bank import MainBank 4 from dynamicresources.client.ess.bracket.main_bank.timer import HackingTimer 5 from dynamicresources.client.ess.bracket.panel import Priority 6 from dynamicresources.client.ess.bracket.reserve_bank import ReserveBank 7 from dynamicresources.client.ess.bracket.reserve_bank.timer import ReserveBankTimer 8 from dynamicresources.client.ess.bracket.root.status import OutOfRange 9 from dynamicresources.client.ess.bracket.state_machine import State, StateMachine 10 11 class Online(State): 12 13 def __init__(self, bracket): 14 self._bracket = bracket 15 self._main_bank_timer = None 16 self._reserve_bank_timer = None 17 self._ess_state_watch_token = None 18 self._state_machine = StateMachine() 19 20 def enter(self): 21 self._on_ess_state_change() 22 23 def close(self): 24 if self._main_bank_timer: 25 self._close_timer(self._main_bank_timer) 26 self._main_bank_timer = None 27 if getattr(self, '_reserve_bank_timer', None): 28 self._close_timer(self._reserve_bank_timer) 29 self._reserve_bank_timer = None 30 if self._ess_state_watch_token: 31 self._ess_state_watch_token.unsubscribe() 32 self._state_machine.close() 33 34 def _on_ess_state_change(self, state = None): 35 state, self._ess_state_watch_token = self._bracket.ess_state_provider.select(self._on_ess_state_change, lens=EssStateSubset.from_ess_state) 36 if state.in_range: 37 self._state_machine.move_to(InRange(self._bracket)) 38 else: 39 self._state_machine.move_to(OutOfRange(self._bracket)) 40 if state.main_bank_active: 41 if not self._main_bank_timer: 42 self._main_bank_timer = HackingTimer(camera=self._bracket.camera, ess_root_transform=self._bracket.ess_root.transform, link_state=self._bracket.ess_state_provider.state.main_bank.link, radius=488, line_width=42, offset_y=3600, scale=5000) 43 self._main_bank_timer.play_enter_animation() 44 elif self._main_bank_timer: 45 self._close_timer(self._main_bank_timer) 46 self._main_bank_timer = None 47 if state.reserve_bank_active: 48 if not self._reserve_bank_timer: 49 self._reserve_bank_timer = ReserveBankTimer(camera=self._bracket.camera, ess_root_transform=self._bracket.ess_root.transform, offset_y=-2000, scale=5000) 50 self._reserve_bank_timer.play_enter_animation() 51 elif self._reserve_bank_timer: 52 self._close_timer(self._reserve_bank_timer) 53 self._reserve_bank_timer = None 54 55 @threadutils.threaded 56 def _close_timer(self, timer): 57 timer.play_exit_animation(sleep=True) 58 timer.close() 59 60 61 class EssStateSubset(object): 62 63 def __init__(self, in_range, main_bank_active, reserve_bank_active): 64 self.in_range = in_range 65 self.main_bank_active = main_bank_active 66 self.reserve_bank_active = reserve_bank_active 67 68 @staticmethod 69 def from_ess_state(state): 70 return EssStateSubset(in_range=state.in_range, main_bank_active=state.main_bank.link is not None, reserve_bank_active=state.reserve_bank.unlocked) 71 72 73 class InRange(State): 74 75 def __init__(self, bracket): 76 self._bracket = bracket 77 self._main_bank_panel = None 78 self._main_bank_state_token = None 79 self._main_bank_timer = None 80 self._reserve_bank_panel = None 81 self._reserve_bank_state_token = None 82 self._ess_state_watch_token = None 83 84 def enter(self): 85 self._main_bank_panel = MainBank(parent=self._bracket.layer, camera=self._bracket.camera, ess_root_transform=self._bracket.ess_root) 86 self._reserve_bank_panel = ReserveBank(parent=self._bracket.layer, camera=self._bracket.camera, ess_root_transform=self._bracket.ess_root) 87 self._main_bank_panel.on_focus.connect(self._on_panel_focus) 88 self._reserve_bank_panel.on_focus.connect(self._on_panel_focus) 89 self._update_panel_collapse_state() 90 91 def close(self): 92 self._main_bank_panel.close() 93 self._reserve_bank_panel.close() 94 if self._main_bank_state_token: 95 self._main_bank_state_token.clear() 96 if self._reserve_bank_state_token: 97 self._reserve_bank_state_token.clear() 98 if self._ess_state_watch_token: 99 self._ess_state_watch_token.unsubscribe() 100 101 def _update_panel_collapse_state(self): 102 if self._main_bank_state_token: 103 self._main_bank_state_token.clear() 104 self._main_bank_state_token = None 105 if self._reserve_bank_state_token: 106 self._reserve_bank_state_token.clear() 107 self._reserve_bank_state_token = None 108 if self._main_bank_panel.focused: 109 self._reserve_bank_state_token = self._reserve_bank_panel.request_collapse(Priority.no_content, lock=True) 110 if self._reserve_bank_panel.focused: 111 self._main_bank_state_token = self._main_bank_panel.request_collapse(Priority.no_content, lock=True) 112 113 def _on_panel_focus(self, _focused): 114 self._update_panel_collapse_state() 115 116 117 from dynamicresources.client.ess.bracket.debug import __reload_update__