From d4592b6077aebaf1630b05d1904723c6544d4537 Mon Sep 17 00:00:00 2001 From: Joseph-Eugene Winzer Date: Sat, 14 Apr 2018 11:40:08 +0200 Subject: SUPERNOVA: Removes global nullObject Before nullObject was a static member of Object class and now a member of GameManager. Also the Inventory constructor was extended for taking a pointer to the nullObject that Invetory::get() returns if no Object was found. --- engines/supernova/msn_def.h | 8 -------- engines/supernova/state.cpp | 35 +++++++++++++++++++++-------------- engines/supernova/state.h | 7 ++++++- engines/supernova/supernova.cpp | 2 -- 4 files changed, 27 insertions(+), 25 deletions(-) diff --git a/engines/supernova/msn_def.h b/engines/supernova/msn_def.h index 3f1c69bce5..6ce16b8283 100644 --- a/engines/supernova/msn_def.h +++ b/engines/supernova/msn_def.h @@ -304,8 +304,6 @@ ObjectType &operator&=(ObjectType &a, ObjectType b); ObjectType &operator^=(ObjectType &a, ObjectType b); struct Object { - static const Object nullObject; - Object() : _name(kNoString) , _description(kStringDefaultDescription) @@ -332,12 +330,6 @@ struct Object { , _direction(direction) {} - static void setObjectNull(Object *&obj) { - obj = const_cast(&nullObject); - } - static bool isNullObject(Object *obj) { - return obj == &nullObject; - } void resetProperty(ObjectType type = NULLTYPE) { _type = type; } diff --git a/engines/supernova/state.cpp b/engines/supernova/state.cpp index 51e0ee5c73..00a35055b7 100644 --- a/engines/supernova/state.cpp +++ b/engines/supernova/state.cpp @@ -196,7 +196,7 @@ Object *Inventory::get(int index) const { if (index < _numObjects) return _inventory[index]; - return const_cast(&Object::nullObject); + return _nullObject; } Object *Inventory::get(ObjectId id) const { @@ -205,7 +205,7 @@ Object *Inventory::get(ObjectId id) const { return _inventory[i]; } - return const_cast(&Object::nullObject); + return _nullObject; } @@ -288,7 +288,7 @@ StringId GameManager::guiStatusCommands[] = { }; GameManager::GameManager(SupernovaEngine *vm, Sound *sound) - : _inventory(_inventoryScroll) + : _inventory(&_nullObject, _inventoryScroll) , _vm(vm) , _sound(sound) { initRooms(); @@ -354,11 +354,10 @@ void GameManager::destroyRooms() { delete _rooms[OUTRO]; } - void GameManager::initState() { - Object::setObjectNull(_currentInputObject); - Object::setObjectNull(_inputObject[0]); - Object::setObjectNull(_inputObject[1]); + _currentInputObject = &_nullObject; + _inputObject[0] = &_nullObject; + _inputObject[1] = &_nullObject; _inputVerb = ACTION_WALK; _processInput = false; _guiEnabled = true; @@ -611,8 +610,8 @@ void GameManager::processInput(Common::KeyState &state) { } void GameManager::resetInputState() { - Object::setObjectNull(_inputObject[0]); - Object::setObjectNull(_inputObject[1]); + setObjectNull(_inputObject[0]); + setObjectNull(_inputObject[1]); _inputVerb = ACTION_WALK; _processInput = false; _mouseClicked = false; @@ -659,7 +658,7 @@ void GameManager::processInput() { case onInventory: // Fallthrough if (_inputVerb == ACTION_GIVE || _inputVerb == ACTION_USE) { - if (Object::isNullObject(_inputObject[0])) { + if (isNullObject(_inputObject[0])) { _inputObject[0] = _currentInputObject; if (!_inputObject[0]->hasProperty(COMBINABLE)) _processInput = true; @@ -669,7 +668,7 @@ void GameManager::processInput() { } } else { _inputObject[0] = _currentInputObject; - if (!Object::isNullObject(_currentInputObject)) + if (!isNullObject(_currentInputObject)) _processInput = true; } break; @@ -696,7 +695,7 @@ void GameManager::processInput() { return; } - if (Object::isNullObject(_currentInputObject)) + if (isNullObject(_currentInputObject)) return; if (mouseLocation == onObject || mouseLocation == onInventory) { @@ -775,7 +774,7 @@ void GameManager::processInput() { break; } - Object::setObjectNull(_currentInputObject); + setObjectNull(_currentInputObject); _mouseField = field; if (_mouseField >= 0 && _mouseField < 256) @@ -814,6 +813,14 @@ void GameManager::processInput() { } } +void GameManager::setObjectNull(Object *&obj) { + obj = &_nullObject; +} + +bool GameManager::isNullObject(Object *obj) { + return obj == &_nullObject; +} + void GameManager::corridorOnEntrance() { if (_state._corridorSearch) busted(0); @@ -1874,7 +1881,7 @@ void GameManager::drawStatus() { _vm->renderBox(0, 140, 320, 9, kColorWhite25); _vm->renderText(_vm->getGameString(guiStatusCommands[index]), 1, 141, kColorDarkGreen); - if (Object::isNullObject(_inputObject[0])) + if (isNullObject(_inputObject[0])) _vm->renderText(_currentInputObject->_name); else { _vm->renderText(_inputObject[0]->_name); diff --git a/engines/supernova/state.h b/engines/supernova/state.h index e3de0eb94b..1b885ccbdd 100644 --- a/engines/supernova/state.h +++ b/engines/supernova/state.h @@ -65,8 +65,9 @@ struct GameState { class Inventory { public: - Inventory(int &inventoryScroll) + Inventory(Object *nullObject, int &inventoryScroll) : _numObjects(0) + , _nullObject(nullObject) , _inventoryScroll(inventoryScroll) {} @@ -79,6 +80,7 @@ public: private: Object *_inventory[kMaxCarry]; + Object *_nullObject; int &_inventoryScroll; int _numObjects; }; @@ -154,6 +156,7 @@ public: bool _animationEnabled; byte _roomBrightness; Action _inputVerb; + Object _nullObject; Object *_currentInputObject; Object *_inputObject[2]; bool _waitEvent; @@ -175,6 +178,8 @@ public: byte _rowsStart[6]; void takeObject(Object &obj); + void setObjectNull(Object *&obj); + bool isNullObject(Object *obj); void initState(); void initRooms(); diff --git a/engines/supernova/supernova.cpp b/engines/supernova/supernova.cpp index 035238b3ac..c47e476de7 100644 --- a/engines/supernova/supernova.cpp +++ b/engines/supernova/supernova.cpp @@ -49,8 +49,6 @@ namespace Supernova { -const Object Object::nullObject; - ObjectType operator|(ObjectType a, ObjectType b) { return static_cast(+a | +b); } -- cgit v1.2.3