segmentedVideo.py (4643B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\shared\theatersOfWar\campaigns\panels\segmentedVideo.py 2 import trinity 3 from carbonui import Align, uiconst 4 from carbonui.primitives.container import Container 5 from carbonui.primitives.sprite import StreamingVideoSprite 6 7 class State(object): 8 INIT = 1 9 SETUP = 2 10 SETUP_DONE = 3 11 INTRO = 4 12 LOOP = 5 13 OUTRO = 6 14 FINISHED = 7 15 16 17 class SegmentedVideoCont(Container): 18 19 def ApplyAttributes(self, attributes): 20 self._skip_loop = False 21 self._video_sprite_intro = None 22 self._video_sprite_loop = None 23 self._video_sprite_outro = None 24 self._all_videos = [] 25 self._state = State.INIT 26 super(SegmentedVideoCont, self).ApplyAttributes(attributes) 27 self._setup() 28 29 def play(self): 30 if self._state < State.SETUP_DONE: 31 raise RuntimeError('The video is not ready to play') 32 if self._video_sprite_intro.isFinished: 33 self.play_loop() 34 else: 35 self.play_intro() 36 37 def load_videos(self, intro_path, loop_path, outro_path): 38 self._skip_loop = False 39 self._video_sprite_intro.SetVideoPath(intro_path, videoLoop=False) 40 self._video_sprite_loop.SetVideoPath(loop_path, videoLoop=False) 41 self._video_sprite_outro.SetVideoPath(outro_path, videoLoop=False) 42 self._state = State.SETUP_DONE 43 44 def _setup(self): 45 self._state = State.SETUP 46 self._video_sprite_intro = self._create_video_sprite(name='video_sprite_intro', parent=self, on_finished=self._on_intro_finished, loop=True, auto_play=False) 47 self._video_sprite_loop = self._create_video_sprite(name='video_sprite_loop', parent=self, loop=True, display=False, on_finished=self._on_loop_finished, auto_play=False) 48 self._video_sprite_outro = self._create_video_sprite(name='video_sprite_outro', parent=self, display=False, on_finished=self._on_outro_finished, auto_play=False) 49 self._all_videos = [self._video_sprite_intro, self._video_sprite_loop, self._video_sprite_outro] 50 self._state = State.SETUP_DONE 51 52 def _create_video_sprite(self, name, parent, loop = False, auto_play = False, on_finished = None, display = True): 53 sprite = StreamingVideoSprite(name=name, parent=parent, align=Align.CENTER, state=uiconst.UI_DISABLED, width=self.width, height=self.height, disableAudio=True, videoLoop=loop, videoAutoPlay=auto_play, blendMode=trinity.TR2_SBM_BLEND, spriteEffect=trinity.TR2_SFX_COPY) 54 sprite.display = display 55 if on_finished is not None: 56 sprite.OnVideoFinished = on_finished 57 return sprite 58 59 def _on_intro_finished(self): 60 if self._state == State.INTRO: 61 self.play_loop() 62 63 def _on_loop_finished(self): 64 if self._state == State.LOOP and self._skip_loop: 65 self.play_outro() 66 67 def _on_outro_finished(self): 68 self._video_sprite_outro.SetVideoPath(self._video_sprite_outro.path) 69 70 def play_intro(self): 71 self._state = State.INTRO 72 self._play_video_segment(self._video_sprite_intro) 73 74 def play_loop(self): 75 self._skip_loop = False 76 self._state = State.LOOP 77 self._play_video_segment(self._video_sprite_loop) 78 self._video_sprite_outro.SetVideoPath(self._video_sprite_outro.path) 79 80 def play_outro(self): 81 self._state = State.OUTRO 82 self._play_video_segment(self._video_sprite_outro) 83 84 def _play_video_segment(self, video): 85 for v in self._all_videos: 86 if not v: 87 continue 88 v.display = bool(v == video) 89 90 for v in self._all_videos: 91 if not v: 92 continue 93 if v == video: 94 v.Play() 95 else: 96 v.Pause() 97 98 def pause_videos(self): 99 for v in [self._video_sprite_intro, self._video_sprite_loop]: 100 if not v: 101 continue 102 v.Pause() 103 104 def hide_videos(self): 105 for v in self._all_videos: 106 v.Hide() 107 108 def skip_loop(self): 109 self._skip_loop = True 110 if self._state == State.LOOP: 111 self.play_outro() 112 113 def kill(self): 114 self._cleanup() 115 116 def _cleanup(self): 117 for element in self._all_videos: 118 if element is not None: 119 element.Close() 120 121 self._video_sprite_intro = None 122 self._video_sprite_loop = None 123 self._video_sprite_outro = None 124 self._state = State.FINISHED 125 126 def Close(self): 127 self._cleanup() 128 super(SegmentedVideoCont, self).Close()