/* 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 TITANIC_MOVIE_H #define TITANIC_MOVIE_H #include "common/list.h" #include "video/video_decoder.h" #include "titanic/core/list.h" #include "titanic/core/resource_key.h" #include "titanic/support/movie_range_info.h" namespace Titanic { enum MovieState { MOVIE_STOPPED = -1, MOVIE_NONE = 0, MOVIE_FINISHED = 1, MOVIE_FRAME = 2 }; class CGameObject; class CMovie; class CSoundManager; class CVideoSurface; class CMovieList : public List { public: }; class CMovie : public ListItem { protected: MovieState _state; int _field10; protected: /** * Adds the movie to the active movies list */ void addToActiveMovies(); /** * Removes the movie from the active movies list */ void removeFromActiveMovies(); public: int _field14; public: static CMovieList *_activeMovies; /** * Initializes statics */ static void init(); /** * Deinitializes statics */ static void deinit(); public: CMovie(); virtual ~CMovie(); /** * Plays the movie */ virtual void play(uint flags, CVideoSurface *surface) = 0; /** * Plays the movie */ virtual void play(uint startFrame, uint endFrame, int v3, bool v4) = 0; /** * Plays the movie */ virtual void play(const Rect &rect, int v1, int v2) = 0; /** * Plays a sub-section of a movie */ virtual void playClip(const Rect &rect, uint startFrame, uint endFrame) = 0; virtual void proc11() = 0; virtual void proc12(int v1, int v2, int frameNumber, int flags, CGameObject *obj) = 0; /** * Stops the movie */ virtual void stop() = 0; virtual void proc14() = 0; virtual void setFrame(uint frameNumber) = 0; virtual void proc16() = 0; /** * Return any movie range info associated with the movie */ virtual const Common::List getMovieRangeInfo() const = 0; /** * Set the sound manager reference */ virtual void setSoundManager(CSoundManager *soundManager) = 0; /** * Get the current movie frame */ virtual int getFrame() = 0; virtual void proc20() = 0; virtual void *proc21() = 0; bool isActive() const; bool get10(); virtual MovieState getState() = 0; virtual void update() = 0; }; class OSMovie : public CMovie { private: Video::VideoDecoder *_video; CVideoSurface *_videoSurface; int _endFrame; /** * Decodes the next frame */ void decodeFrame(); public: CGameObject *_gameObject; public: OSMovie(const CResourceKey &name, CVideoSurface *surface); OSMovie(Common::SeekableReadStream *stream, CVideoSurface *surface); virtual ~OSMovie(); /** * Plays the movie */ virtual void play(uint flags, CVideoSurface *surface); /** * Plays the movie */ virtual void play(uint startFrame, uint endFrame, int v3, bool v4); /** * Plays the movie */ virtual void play(const Rect &rect, int v1, int v2); /** * Plays a sub-section of a movie */ virtual void playClip(const Rect &rect, uint startFrame, uint endFrame); virtual void proc11(); virtual void proc12(int v1, int v2, int frameNumber, int flags, CGameObject *obj); /** * Stops the movie */ virtual void stop(); virtual void proc14(); /** * Set the current frame number */ virtual void setFrame(uint frameNumber); virtual void proc16(); /** * Return any movie range info associated with the movie */ virtual const Common::List getMovieRangeInfo() const; /** * Set the sound manager reference */ virtual void setSoundManager(CSoundManager *soundManager); /** * Get the current movie frame */ virtual int getFrame(); virtual void proc20(); virtual void *proc21(); virtual MovieState getState(); virtual void update(); }; } // End of namespace Titanic #endif /* TITANIC_MOVIE_H */