1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203
|
/* 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 3 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, see <http://www.gnu.org/licenses/>.
*
*/
#ifndef ULTIMA_SHARED_EARLY_GAME_BASE_H
#define ULTIMA_SHARED_EARLY_GAME_BASE_H
#include "common/scummsys.h"
#include "common/array.h"
#include "common/serializer.h"
#include "ultima/shared/engine/events.h"
#include "ultima/shared/engine/input_handler.h"
#include "ultima/shared/engine/input_translator.h"
namespace Ultima {
namespace Shared {
class UltimaEngine;
class GameState;
namespace Gfx {
class Font;
class Popup;
class TextCursor;
class TextInput;
class VisualItem;
} // End of namespace Gfx
namespace Maps {
class Map;
} // End of namespace Maps
/**
* Base class for the game implementations
*/
class GameBase : public TreeItem, public EventTarget {
private:
/**
* Checks for the presence of any savegames and, if present,
* lets the user pick one to resume
*/
int getSavegameSlot();
void leftButtonDoubleClick(const Point &mousePos) override;
void middleButtonDoubleClick(const Point &mousePos) override;
void rightButtonDoubleClick(const Point &mousePos);
/**
* Returns true if the player can control the mouse
*/
bool isMouseControlEnabled() const { return true; }
void changeView(const Common::String &name);
protected:
uint32 _priorLeftDownTime;
uint32 _priorMiddleDownTime;
uint32 _priorRightDownTime;
Gfx::VisualItem *_currentView;
Gfx::Popup *_pendingPopup;
InputHandler _inputHandler;
InputTranslator _inputTranslator;
Gfx::Font *_font;
public:
Gfx::TextCursor *_textCursor;
uint _videoMode;
public:
/**
* Constructor
*/
GameBase();
/**
* Destructor
*/
~GameBase() override;
/**
* Called to handle any regular updates the game requires
*/
void onIdle() override;
void mouseMove(const Point &mousePos) override;
void leftButtonDown(const Point &mousePos) override;
void leftButtonUp(const Point &mousePos) override;
void middleButtonDown(const Point &mousePos) override;
void middleButtonUp(const Point &mousePos) override;
void rightButtonDown(const Point &mousePos) override;
void rightButtonUp(const Point &mousePos) override;
void mouseWheel(const Point &mousePos, bool wheelUp) override;
void keyDown(Common::KeyState keyState) override;
/**
* Called when the game starts
*/
virtual void starting(bool isLoading) {}
/**
* Returns true if the current video mode is VGA
*/
virtual bool isVGA() const { return false; }
/**
* Called once every frame to update the game and render the view
*/
void update();
/**
* Called by the event handler when a mouse event has been generated
*/
void mouseChanged();
/**
* Set the currently active view to display
*/
void setView(Gfx::VisualItem *view);
/**
* Set the currently active view to display
*/
void setView(const Common::String &viewName);
/**
* Sets a popup to be shown
*/
void setPopup(Gfx::Popup *popup);
/**
* Returns the current view
*/
Gfx::VisualItem *getView() const { return _currentView; }
/**
* Set a font to use
*/
void setFont(Gfx::Font *font);
/**
* Returns the current font
*/
Gfx::Font *getFont() const { return _font; }
/**
* Returns the map
*/
virtual Maps::Map *getMap() const { return nullptr; }
/**
* Gets a random number
*/
uint getRandomNumber(uint max);
/**
* Gets a random number
*/
uint getRandomNumber(uint min, uint max);
/**
* Wait for a given period of time
*/
void sleep(uint time);
/**
* Return the current time
*/
uint32 getMillis() const;
/**
* Returns true if a savegame can currently be loaded
*/
virtual bool canLoadGameStateCurrently() { return true; }
/**
* Returns true if the game can currently be saved
*/
virtual bool canSaveGameStateCurrently() { return false; }
/**
* Handles loading and saving games
*/
virtual void synchronize(Common::Serializer &s);
};
} // End of namespace Shared
} // End of namespace Ultima
#endif
|