aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoseph-Eugene Winzer2018-04-14 11:40:08 +0200
committerThierry Crozat2018-04-15 18:47:33 +0100
commitd4592b6077aebaf1630b05d1904723c6544d4537 (patch)
treea5aea1e248fec56f337a19d789de46d1686cbffd
parent94ebc96705314eb1e0846fa605943aec20afad72 (diff)
downloadscummvm-rg350-d4592b6077aebaf1630b05d1904723c6544d4537.tar.gz
scummvm-rg350-d4592b6077aebaf1630b05d1904723c6544d4537.tar.bz2
scummvm-rg350-d4592b6077aebaf1630b05d1904723c6544d4537.zip
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.
-rw-r--r--engines/supernova/msn_def.h8
-rw-r--r--engines/supernova/state.cpp35
-rw-r--r--engines/supernova/state.h7
-rw-r--r--engines/supernova/supernova.cpp2
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<Object *>(&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 *>(&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 *>(&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<ObjectType>(+a | +b);
}