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()