aboutsummaryrefslogtreecommitdiff
path: root/engines/supernova/state.h
diff options
context:
space:
mode:
Diffstat (limited to 'engines/supernova/state.h')
-rw-r--r--engines/supernova/state.h232
1 files changed, 48 insertions, 184 deletions
diff --git a/engines/supernova/state.h b/engines/supernova/state.h
index f78f2191f5..51dab06f89 100644
--- a/engines/supernova/state.h
+++ b/engines/supernova/state.h
@@ -29,209 +29,73 @@
#include "common/keyboard.h"
#include "supernova/rooms.h"
#include "supernova/sound.h"
+#include "supernova/game-manager.h"
namespace Supernova {
-const int32 kMaxTimerValue = 0x7FFFFFFF;
-
-enum EventFunction { kNoFn, kSupernovaFn, kGuardReturnedFn, kGuardWalkFn, kTaxiFn, kSearchStartFn };
-
-struct GameState {
- int32 _time;
- int32 _timeSleep;
- int32 _timeAlarm;
- int32 _eventTime;
- EventFunction _eventCallback;
- int32 _arrivalDaysLeft;
- int32 _shipEnergyDaysLeft;
- int32 _landingModuleEnergyDaysLeft;
- uint16 _greatFlag;
- int16 _timeRobot;
- int16 _money;
- byte _coins;
- byte _shoes;
- byte _origin;
- byte _destination;
- byte _language;
- bool _corridorSearch;
- bool _alarmOn;
- bool _terminalStripConnected;
- bool _terminalStripWire;
- bool _cableConnected;
- bool _powerOff;
- bool _dream;
- bool _nameSeen[4];
- bool _playerHidden;
-};
-
-class Inventory {
-public:
- Inventory(Object *nullObject, int &inventoryScroll)
- : _numObjects(0)
- , _nullObject(nullObject)
- , _inventoryScroll(inventoryScroll) {
- for (int i = 0; i < kMaxCarry; ++i)
- _inventory[i] = nullptr;
- }
-
- void add(Object &obj);
- void remove(Object &obj);
- void clear();
- Object *get(int index) const;
- Object *get(ObjectId id) const;
- int getSize() const { return _numObjects; }
-
-private:
- Object *_inventory[kMaxCarry];
- Object *_nullObject;
- int &_inventoryScroll;
- int _numObjects;
+class GameManager;
+
+class GameState {
+ public:
+ int32 _timeSleep;
+ int32 _timeAlarm;
+ int32 _eventTime;
+ EventFunction _eventCallback;
+ int32 _arrivalDaysLeft;
+ int32 _shipEnergyDaysLeft;
+ int32 _landingModuleEnergyDaysLeft;
+ uint16 _greatFlag;
+ int16 _timeRobot;
+ int16 _money;
+ byte _coins;
+ byte _shoes;
+ byte _origin;
+ byte _destination;
+ byte _language;
+ bool _corridorSearch;
+ bool _alarmOn;
+ bool _terminalStripConnected;
+ bool _terminalStripWire;
+ bool _cableConnected;
+ bool _powerOff;
+ bool _dream;
+ bool _nameSeen[4];
+ bool _playerHidden;
};
-class GuiElement : public Common::Rect {
+class GameManager1 : public GameManager {
public:
- GuiElement();
-
- void setSize(int x1, int y1, int x2, int y2);
- void setText(const char *text);
- void setTextPosition(int x, int y);
- void setColor(int bgColor, int textColor, int bgColorHighlighted, int textColorHightlighted);
- void setHighlight(bool isHighlighted);
-
- const char *getText() const {
- return _text;
- }
- int getBackgroundColor() const {
- return _bgColor;
- }
- int getTextColor() const {
- return _textColor;
- }
- const Common::Point &getTextPos() const {
- return _textPosition;
- }
- bool isHighlighted() const {
- return _isHighlighted;
- }
-
-private:
- Common::Point _textPosition;
- char _text[128];
- int _bgColor;
- int _textColor;
- int _bgColorNormal;
- int _bgColorHighlighted;
- int _textColorNormal;
- int _textColorHighlighted;
- bool _isHighlighted;
-};
-
-class GameManager {
-public:
- GameManager(SupernovaEngine *vm, Sound *sound);
- ~GameManager();
-
- void updateEvents();
- void processInput(Common::KeyState &state);
- void processInput();
- void executeRoom();
- bool serialize(Common::WriteStream *out);
- bool deserialize(Common::ReadStream *in, int version);
+ GameManager1(SupernovaEngine *vm, Sound *sound);
+ virtual ~GameManager1();
- static StringId guiCommands[];
- static StringId guiStatusCommands[];
- SupernovaEngine *_vm;
- Sound *_sound;
- Common::KeyState _key;
- Common::EventType _mouseClickType;
- bool _mouseClicked;
- bool _keyPressed;
- int _mouseX;
- int _mouseY;
- int _mouseField;
- Room *_currentRoom;
- bool _newRoom;
- Room *_rooms[NUMROOMS];
- Inventory _inventory;
GameState _state;
- bool _processInput;
- bool _guiEnabled;
- bool _animationEnabled;
- byte _roomBrightness;
- Action _inputVerb;
- Object _nullObject;
- Object *_currentInputObject;
- Object *_inputObject[2];
- int32 _oldTime;
- uint _timePaused;
- bool _timerPaused;
- int32 _messageDuration;
- int32 _animationTimer;
- int _inventoryScroll;
- int _exitList[25];
- GuiElement _guiCommandButton[10];
- GuiElement _guiInventory[8];
- GuiElement _guiInventoryArrow[2];
- // Dialog
- int _currentSentence;
- int _sentenceNumber[6];
- StringId _texts[6];
- byte _rows[6];
- byte _rowsStart[6];
- void takeObject(Object &obj);
- void setObjectNull(Object *&obj);
- bool isNullObject(Object *obj);
+ virtual void updateEvents();
+ virtual void executeRoom();
+ virtual bool serialize(Common::WriteStream *out);
+ virtual bool deserialize(Common::ReadStream *in, int version);
- void initState();
- void initRooms();
- void destroyRooms();
- void initGui();
- bool canSaveGameStateCurrently();
- bool genericInteract(Action verb, Object &obj1, Object &obj2);
+ virtual void initState();
+ virtual void initRooms();
+ virtual void destroyRooms();
+ virtual bool canSaveGameStateCurrently();
+ virtual bool genericInteract(Action verb, Object &obj1, Object &obj2);
bool isHelmetOff();
void great(uint number);
bool airless();
void shock();
- Common::EventType getMouseInput();
- int getKeyInput();
- void getInput();
- void wait(int ticks);
- void waitOnInput(int ticks);
- bool waitOnInput(int ticks, Common::KeyCode &keycode);
void turnOff();
void turnOn();
- void screenShake();
- void roomBrightness();
- void showMenu();
- void animationOff();
- void animationOn();
+ virtual void roomBrightness();
void openLocker(const Room *room, Object *obj, Object *lock, int section);
void closeLocker(const Room *room, Object *obj, Object *lock, int section);
- void edit(Common::String &input, int x, int y, uint length);
- int invertSection(int section);
- void drawMapExits();
- void drawStatus();
- void drawCommandBox();
- void drawInventory();
- void changeRoom(RoomId id);
- void resetInputState();
- void handleInput();
- void handleTime();
- void pauseTimer(bool pause);
- void loadTime();
- void saveTime();
- void setAnimationTimer(int ticks);
- void dead(StringId messageId);
- int dialog(int num, byte rowLength[6], StringId text[6], int number);
- void sentence(int number, bool brightness);
- void say(StringId textId);
- void say(const char *text);
- void reply(StringId textId, int aus1, int aus2);
- void reply(const char *text, int aus1, int aus2);
- void mousePosDialog(int x, int y);
+ virtual void drawMapExits();
+ virtual void handleInput();
+ virtual void handleTime();
+ virtual void loadTime();
+ virtual void saveTime();
void shot(int a, int b);
- void takeMoney(int amount);
+ virtual void takeMoney(int amount);
void search(int time);
void startSearch();
void guardNoticed();