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

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__