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

introcontroller.py (5144B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\login\intromovie\introcontroller.py
      2 from eve.client.script.ui.view.viewStateConst import ViewState
      3 from localization import GetByLabel
      4 from uihider import get_ui_hider
      5 
      6 class IntroController(object):
      7 
      8     def __init__(self):
      9         self.character_id = None
     10         self.is_game_loaded = False
     11         self.is_intro_playing = False
     12         self.is_intro_stopped = False
     13         self.intro_video = None
     14         self.black_overlay = None
     15         sm.RegisterForNotifyEvent(self, 'OnSessionReset')
     16         self.start_listening_to_startup_events()
     17 
     18     def start_listening_to_startup_events(self):
     19         sm.RegisterForNotifyEvent(self, 'OnCurrSessionSpaceEnteredFirstTime')
     20         sm.RegisterForNotifyEvent(self, 'OnViewStateChanged')
     21 
     22     def stop_listening_to_startup_events(self):
     23         sm.UnregisterForNotifyEvent(self, 'OnCurrSessionSpaceEnteredFirstTime')
     24         sm.UnregisterForNotifyEvent(self, 'OnViewStateChanged')
     25 
     26     def play_intro(self, character_id, skip_tutorial):
     27         self.character_id = character_id
     28         if skip_tutorial:
     29             self.transition_directly_to_game()
     30         else:
     31             get_ui_hider().hide_everything()
     32             if self._should_play_intro_video():
     33                 self.play_intro_video()
     34             else:
     35                 self.transition_directly_to_game()
     36 
     37     def stop_intro(self):
     38         self._clear_intro()
     39         self._reset_state()
     40 
     41     def on_video_stopped(self):
     42         self.is_intro_stopped = True
     43         if self.is_game_loaded:
     44             self.transition_from_end_of_video_to_game()
     45         else:
     46             self.wait_for_game_to_load()
     47 
     48     def OnCurrSessionSpaceEnteredFirstTime(self):
     49         self.is_game_loaded = True
     50         if self.is_intro_stopped:
     51             self.transition_from_middle_of_video_to_game()
     52         self._notify_if_intro_completed()
     53 
     54     def OnViewStateChanged(self, from_view, to_view):
     55         if from_view not in (ViewState.CharacterSelector, ViewState.CharacterCreation):
     56             return
     57         if to_view in (ViewState.Station,
     58          ViewState.Hangar,
     59          ViewState.StarMap,
     60          ViewState.DockPanel,
     61          ViewState.SystemMap,
     62          ViewState.Planet,
     63          ViewState.ShipTree,
     64          ViewState.Structure):
     65             self.is_game_loaded = True
     66             self._notify_if_intro_completed()
     67 
     68     def OnSessionReset(self):
     69         self._reset_state()
     70 
     71     def _reset_state(self):
     72         self.is_intro_playing = False
     73         self.is_game_loaded = False
     74         self.is_intro_stopped = False
     75         self.start_listening_to_startup_events()
     76 
     77     def _notify_intro_started(self):
     78         sm.ScatterEvent('OnIntroStarted')
     79 
     80     def _notify_if_intro_completed(self):
     81         if self.is_game_loaded and not self.is_intro_playing:
     82             sm.ScatterEvent('OnIntroCompleted')
     83             self.stop_listening_to_startup_events()
     84 
     85     def _should_play_intro_video(self):
     86         return settings.public.generic.Get('showIntroVideo', 1)
     87 
     88     def _is_ui_available(self, ui_container):
     89         return ui_container and not ui_container.destroyed
     90 
     91     def play_intro_video(self):
     92         self.is_intro_playing = True
     93         self._notify_intro_started()
     94         from eve.client.script.ui.login.intromovie.ui.blackoverlay import BlackOverlay
     95         from eve.client.script.ui.login.intromovie.ui.introvideo import IntroVideo
     96         self.intro_video = IntroVideo(onStopCallback=self.on_video_stopped)
     97         self.black_overlay = BlackOverlay()
     98 
     99     def transition_from_middle_of_video_to_game(self):
    100         if self._is_ui_available(self.black_overlay):
    101             self.black_overlay.fade_in(callback=self._exit_intro)
    102         self._show_loading_ui()
    103 
    104     def transition_from_end_of_video_to_game(self):
    105         if self._is_ui_available(self.black_overlay):
    106             self.black_overlay.fade_in(callback=self._exit_intro)
    107 
    108     def transition_directly_to_game(self):
    109         self._exit_intro()
    110         self._show_loading_ui()
    111 
    112     def wait_for_game_to_load(self):
    113         if self._is_ui_available(self.black_overlay):
    114             self.black_overlay.fade_in(callback=self._stop_intro_video)
    115         self._show_loading_ui()
    116 
    117     def _stop_intro_video(self):
    118         if self.intro_video and not self.intro_video.destroyed:
    119             self.intro_video.StopMovie()
    120 
    121     def _exit_intro(self):
    122         self._clear_intro()
    123         self.is_intro_playing = False
    124         self._notify_if_intro_completed()
    125 
    126     def _clear_intro(self):
    127         for ui_container in [self.intro_video, self.black_overlay]:
    128             if self._is_ui_available(ui_container):
    129                 ui_container.Close()
    130 
    131         self._update_cursor()
    132         self._hide_loading_ui()
    133 
    134     def _update_cursor(self):
    135         sm.GetService('ui').ForceCursorUpdate()
    136 
    137     def _show_loading_ui(self):
    138         sm.GetService('loading').ProgressWnd(title=GetByLabel('UI/CharacterCreation'), strng=GetByLabel('UI/CharacterCreation/EnteringGameAs', player=self.character_id), portion=1, total=2)
    139 
    140     def _hide_loading_ui(self):
    141         sm.GetService('loading').EndLoading()