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

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