diff options
author | Bastien Bouclet | 2017-02-20 18:02:57 +0100 |
---|---|---|
committer | Eugene Sandulenko | 2017-07-03 08:50:10 +0200 |
commit | f977b5712328133b638c33992d4e111624d1881d (patch) | |
tree | c8480f6b0f9f3f2471f44fa09c894015fdc49ba1 /engines/mohawk/riven_video.h | |
parent | 9153393219b398ce5a7a8122d9af38e32e128059 (diff) | |
download | scummvm-rg350-f977b5712328133b638c33992d4e111624d1881d.tar.gz scummvm-rg350-f977b5712328133b638c33992d4e111624d1881d.tar.bz2 scummvm-rg350-f977b5712328133b638c33992d4e111624d1881d.zip |
MOHAWK: Rewrite the Riven movie manager
Diffstat (limited to 'engines/mohawk/riven_video.h')
-rw-r--r-- | engines/mohawk/riven_video.h | 164 |
1 files changed, 164 insertions, 0 deletions
diff --git a/engines/mohawk/riven_video.h b/engines/mohawk/riven_video.h new file mode 100644 index 0000000000..d5025a28e2 --- /dev/null +++ b/engines/mohawk/riven_video.h @@ -0,0 +1,164 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef MOHAWK_RIVEN_VIDEO_H +#define MOHAWK_RIVEN_VIDEO_H + +#include "common/list.h" +#include "common/noncopyable.h" + +namespace Video { +class QuickTimeDecoder; +} + +namespace Mohawk { + +class MohawkEngine_Riven; + +/** + * A video monitored by the VideoManager + */ +class RivenVideo : private Common::NonCopyable { +public: + RivenVideo(MohawkEngine_Riven *vm, uint16 code); + ~RivenVideo(); + + /** Load the video from the archive */ + void load(uint16 id); + + /** Free resources allocated for the movie, but allow to load it again later */ + void close(); + + /** Start playing the video */ + void play(); + + /** Play the video until it completes or reaches the specified timestamp */ + void playBlocking(int32 endTime = -1); + + /** Has the video reached its end? */ + bool endOfVideo() const; + + /** Is the video looping? */ + bool isLooping() const { return _loop; } + + /** Is the video enabled? (Drawing to the screen) */ + bool isEnabled() const { return _enabled; } + + /** Get the ID of the video */ + uint16 getId() const { return _id; } + + /** Get the slot used by the video in the video manager */ + uint16 getSlot() const { return _slot; } + + /** Get the current frame of the video */ + int getCurFrame() const; + + /** Get the frame count of the video */ + uint32 getFrameCount() const; + + /** Get the current time position of the video */ + uint32 getTime() const; + + /** Get the duration of the video */ + uint32 getDuration() const; + + /** Move the video to the specified coordinates */ + void moveTo(uint16 x, uint16 y) { _x = x; _y = y; } + + /** Set the video to loop (true) or not (false) */ + void setLooping(bool loop) { _loop = loop; } + + /** Enable the video */ + void enable(); + + /** Disable the video */ + void disable(); + + /** + * Set the bounds of the video + * + * This automatically seeks to the start time + */ + void setBounds(uint32 startTime, uint32 endTime); + + /** Seek to the given time */ + void seek(uint32 time); + + /** Pause the video */ + void pause(bool isPaused); + + /** Stop playing the video */ + void stop(); + + /** Is the video playing? */ + bool isPlaying() const; + + /** Get the volume of the video */ + int getVolume() const; + + /** Set the volume of the video */ + void setVolume(int volume); + + void drawNextFrame(); + + bool needsUpdate() const; +private: + // Non-changing variables + MohawkEngine_Riven *_vm; + Video::QuickTimeDecoder *_video; + uint16 _id; + uint16 _slot; + + // Playback variables + uint16 _x; + uint16 _y; + bool _loop; + bool _enabled; + bool _playing; +}; + +class RivenVideoManager { +public: + RivenVideoManager(MohawkEngine_Riven *vm); + ~RivenVideoManager(); + + void updateMovies(); + void pauseVideos(); + void resumeVideos(); + void closeVideos(); + void removeVideos(); + void disableAllMovies(); + + RivenVideo *openSlot(uint16 slot); + RivenVideo *getSlot(uint16 slot); + +private: + MohawkEngine_Riven *_vm; + + // Keep tabs on any videos playing + typedef Common::List<RivenVideo *> VideoList; + VideoList _videos; +}; + +} // End of namespace Mohawk + +#endif |