aboutsummaryrefslogtreecommitdiff
path: root/engines/bladerunner/items.cpp
diff options
context:
space:
mode:
authorPeter Kohaut2018-03-24 17:20:27 +0100
committerPeter Kohaut2018-03-24 17:28:34 +0100
commit5e9985bd6e4d136ec20e5e3be7589d34051227f1 (patch)
treee8b8f70ad0f509ec7b919c68c2f09bd2bbf0e8a1 /engines/bladerunner/items.cpp
parent2a646f8cc287a98f90e561ce8072c2af4322fd22 (diff)
downloadscummvm-rg350-5e9985bd6e4d136ec20e5e3be7589d34051227f1.tar.gz
scummvm-rg350-5e9985bd6e4d136ec20e5e3be7589d34051227f1.tar.bz2
scummvm-rg350-5e9985bd6e4d136ec20e5e3be7589d34051227f1.zip
BLADERUNNER: Load game methods
save methods update replaced few char* with Common::String changed few pointers to references
Diffstat (limited to 'engines/bladerunner/items.cpp')
-rw-r--r--engines/bladerunner/items.cpp44
1 files changed, 32 insertions, 12 deletions
diff --git a/engines/bladerunner/items.cpp b/engines/bladerunner/items.cpp
index 7fe769cb93..caae3ae683 100644
--- a/engines/bladerunner/items.cpp
+++ b/engines/bladerunner/items.cpp
@@ -89,7 +89,7 @@ bool Items::addToWorld(int itemId, int animationId, int setId, Vector3 position,
item->setup(itemId, setId, animationId, position, facing, height, width, isTargetFlag, isVisible, isPoliceMazeEnemy);
if (addToSetFlag && setId == _vm->_scene->getSetId()) {
- return _vm->_sceneObjects->addItem(itemId + kSceneObjectOffsetItems, &item->_boundingBox, &item->_screenRectangle, isTargetFlag, isVisible);
+ return _vm->_sceneObjects->addItem(itemId + kSceneObjectOffsetItems, item->_boundingBox, item->_screenRectangle, isTargetFlag, isVisible);
}
return true;
}
@@ -102,7 +102,7 @@ bool Items::addToSet(int setId) {
for (int i = 0; i < itemCount; i++) {
Item *item = _items[i];
if (item->_setId == setId) {
- _vm->_sceneObjects->addItem(item->_itemId + kSceneObjectOffsetItems, &item->_boundingBox, &item->_screenRectangle, item->isTarget(), item->_isVisible);
+ _vm->_sceneObjects->addItem(item->_itemId + kSceneObjectOffsetItems, item->_boundingBox, item->_screenRectangle, item->isTarget(), item->_isVisible);
}
}
return true;
@@ -184,19 +184,19 @@ void Items::setIsObstacle(int itemId, bool val) {
_vm->_sceneObjects->setIsClickable(itemId + kSceneObjectOffsetItems, val);
}
-BoundingBox *Items::getBoundingBox(int itemId) {
+const BoundingBox &Items::getBoundingBox(int itemId) {
int itemIndex = findItem(itemId);
- if (itemIndex == -1) {
- return nullptr;
- }
+ // if (itemIndex == -1) {
+ // return nullptr;
+ // }
return _items[itemIndex]->getBoundingBox();
}
-Common::Rect *Items::getScreenRectangle(int itemId) {
+const Common::Rect &Items::getScreenRectangle(int itemId) {
int itemIndex = findItem(itemId);
- if (itemIndex == -1) {
- return nullptr;
- }
+ // if (itemIndex == -1) {
+ // return nullptr;
+ // }
return _items[itemIndex]->getScreenRectangle();
}
@@ -243,10 +243,10 @@ int Items::findItem(int itemId) const {
return -1;
}
-void Items::save(SaveFile &f) {
+void Items::save(SaveFileWriteStream &f) {
int size = (int)_items.size();
- f.write(size);
+ f.writeInt(size);
int i;
for (i = 0; i != size; ++i) {
_items[i]->save(f);
@@ -258,4 +258,24 @@ void Items::save(SaveFile &f) {
}
}
+void Items::load(SaveFileReadStream &f) {
+ for (int i = _items.size() - 1; i >= 0; i--) {
+ delete _items.remove_at(i);
+ }
+ _items.resize(f.readInt());
+
+ int size = (int)_items.size();
+
+ int i;
+ for (i = 0; i != size; ++i) {
+ _items[i] = new Item(_vm);
+ _items[i]->load(f);
+ }
+
+ // Always read out 100 items
+ for (; i != 100; ++i) {
+ f.skip(0x174); // bbox + rect + 18 float fields
+ }
+}
+
} // End of namespace BladeRunner