aboutsummaryrefslogtreecommitdiff
path: root/engines/titanic/game_manager.h
diff options
context:
space:
mode:
authorPaul Gilbert2016-08-27 13:59:08 -0400
committerPaul Gilbert2016-08-27 13:59:08 -0400
commitf5ab3d1cd9eb3a884b0ab5d0b154a4f9cccc74b7 (patch)
tree771a8d2b3fddf96c17a1d81d42cb08dfba09d110 /engines/titanic/game_manager.h
parent873d555add9aaf5eb0d021518f5134142e2c2ff6 (diff)
parent5ea32efbb0ecb3e6b8336ad3c2edd3905ea5b89a (diff)
downloadscummvm-rg350-f5ab3d1cd9eb3a884b0ab5d0b154a4f9cccc74b7.tar.gz
scummvm-rg350-f5ab3d1cd9eb3a884b0ab5d0b154a4f9cccc74b7.tar.bz2
scummvm-rg350-f5ab3d1cd9eb3a884b0ab5d0b154a4f9cccc74b7.zip
Merge branch 'master' into xeen
Diffstat (limited to 'engines/titanic/game_manager.h')
-rw-r--r--engines/titanic/game_manager.h217
1 files changed, 217 insertions, 0 deletions
diff --git a/engines/titanic/game_manager.h b/engines/titanic/game_manager.h
new file mode 100644
index 0000000000..262ea0169b
--- /dev/null
+++ b/engines/titanic/game_manager.h
@@ -0,0 +1,217 @@
+/* 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_GAME_MANAGER_H
+#define TITANIC_GAME_MANAGER_H
+
+#include "common/scummsys.h"
+#include "titanic/game_state.h"
+#include "titanic/input_handler.h"
+#include "titanic/input_translator.h"
+#include "titanic/support/simple_file.h"
+#include "titanic/support/time_event_info.h"
+#include "titanic/support/video_surface.h"
+#include "titanic/true_talk/true_talk_manager.h"
+#include "titanic/sound/background_sound_maker.h"
+#include "titanic/sound/music_room.h"
+#include "titanic/sound/sound.h"
+
+namespace Titanic {
+
+class CProjectItem;
+class CGameView;
+
+class CGameManager {
+private:
+ CTrueTalkManager _trueTalkManager;
+ CTimeEventInfoList _timers;
+ CTreeItem *_treeItem;
+ CBackgroundSoundMaker *_soundMaker;
+ CMovie *_movie;
+ CRoomItem *_movieRoom;
+ int _field54;
+ CVideoSurface *_movieSurface;
+ uint _lastDiskTicksCount;
+ uint _tickCount2;
+private:
+ /**
+ * Generates a message for the next game frame
+ */
+ void frameMessage(CRoomItem *room);
+
+ /**
+ * Handles any ongoing movie playback
+ */
+ void updateMovies();
+
+ /**
+ * Handles a room transition
+ */
+ void roomTransition(CRoomItem *oldRoom, CRoomItem *newRoom);
+public:
+ CProjectItem *_project;
+ CGameView *_gameView;
+ CGameState _gameState;
+ Rect _bounds;
+ CInputHandler _inputHandler;
+ CInputTranslator _inputTranslator;
+ CTreeItem *_dragItem;
+ CMusicRoom _musicRoom;
+ CSound _sound;
+public:
+ CGameManager(CProjectItem *project, CGameView *gameView, Audio::Mixer *mixer);
+ ~CGameManager();
+
+ /**
+ * Destroys and allocated tree item
+ */
+ void destroyTreeItem();
+
+ /**
+ * Save data to a save file
+ */
+ void save(SimpleFile *file);
+
+ /**
+ * Load data from a save file
+ */
+ void load(SimpleFile *file);
+
+ /**
+ * Called when a game is about to be loaded
+ */
+ void preLoad();
+
+ /**
+ * Called after loading a game has finished
+ */
+ void postLoad(CProjectItem *project);
+
+ /**
+ * Called when a game is about to be saved
+ */
+ void preSave(CProjectItem *project);
+
+ /**
+ * Called when a game has finished being saved
+ */
+ void postSave();
+
+ /**
+ * Updates the game time when the last disk access started
+ */
+ void updateDiskTicksCount();
+
+ /**
+ * Gets the current view
+ */
+ CViewItem *getView() { return _gameState._gameLocation.getView(); }
+
+ /**
+ * Gets the current room node
+ */
+ CNodeItem *getNode() { return _gameState._gameLocation.getNode(); }
+
+ /**
+ * Gets the current room
+ */
+ CRoomItem *getRoom() { return _gameState._gameLocation.getRoom(); }
+
+ /**
+ * Lock the input handler
+ */
+ void lockInputHandler() { _inputHandler.incLockCount(); }
+
+ /**
+ * Unlock the input handler
+ */
+ void unlockInputHandler() { _inputHandler.decLockCount(); }
+
+ /**
+ * Set default screen bounds
+ */
+ void initBounds();
+
+ /**
+ * Plays a movie clip
+ */
+ void playClip(CMovieClip *clip, CRoomItem *oldRoom, CRoomItem *newRoom);
+
+ /**
+ * Main frame update method for the game
+ */
+ void update();
+
+ /**
+ * Called when the view changes
+ */
+ void viewChange();
+
+ bool test54() const { return !_field54; }
+
+ void inc54() { ++_field54; }
+
+ void dec54() { --_field54; }
+
+ /**
+ * Extends the bounds of the currently affected game display area
+ * to include the passed rect
+ */
+ void extendBounds(const Rect &r);
+
+ /**
+ * Set and return the current screen manager
+ */
+ CScreenManager *setScreenManager() const;
+
+ /**
+ * Adds a timer
+ */
+ void addTimer(CTimeEventInfo *timer) { _timers.push_back(timer); }
+
+ /**
+ * Stops a timer
+ */
+ void stopTimer(uint id) { _timers.stop(id); }
+
+ /**
+ * Flags whether the timer will be persisent across save & loads
+ */
+ void setTimerPersisent(uint id, bool flag) {
+ _timers.setPersisent(id, flag);
+ }
+
+ /**
+ * Return the true talk manager
+ */
+ CTrueTalkManager *getTalkManager() { return &_trueTalkManager; }
+
+ /**
+ * Return the full Id of the current view in a
+ * room.node.view tuplet form
+ */
+ CString getFullViewName();
+};
+
+} // End of namespace Titanic
+
+#endif /* TITANIC_GAME_MANAGER_H */