aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEugene Sandulenko2018-03-24 10:46:45 +0100
committerEugene Sandulenko2018-03-24 10:47:07 +0100
commitf153da7f850dd8cdf82e0e9e96b02f84e3996e7e (patch)
tree5eb7c318829197a1f2e55244c7d031c1f3a56e9c
parentc3d6dcfae0cf39812fef3959e7f276b27868bcb5 (diff)
downloadscummvm-rg350-f153da7f850dd8cdf82e0e9e96b02f84e3996e7e.tar.gz
scummvm-rg350-f153da7f850dd8cdf82e0e9e96b02f84e3996e7e.tar.bz2
scummvm-rg350-f153da7f850dd8cdf82e0e9e96b02f84e3996e7e.zip
BLADERUNNER: Finished PoliceMaze implementation
-rw-r--r--engines/bladerunner/item.h4
-rw-r--r--engines/bladerunner/items.cpp40
-rw-r--r--engines/bladerunner/items.h5
-rw-r--r--engines/bladerunner/script/police_maze.cpp11
4 files changed, 53 insertions, 7 deletions
diff --git a/engines/bladerunner/item.h b/engines/bladerunner/item.h
index fcb2f2230e..2c0ce97d48 100644
--- a/engines/bladerunner/item.h
+++ b/engines/bladerunner/item.h
@@ -67,12 +67,16 @@ public:
BoundingBox *getBoundingBox() { return &_boundingBox; }
Common::Rect *getScreenRectangle() { return &_screenRectangle; }
+ int getFacing() const { return _facing; }
+ void setFacing(int facing) { _facing = facing; }
void setIsTarget(bool isTarget) { _isTarget = isTarget; }
bool isTarget() const;
bool isVisible() const { return _isVisible; }
+ void setVisible(bool val) { _isVisible = val; }
bool isPoliceMazeEnemy() const;
+ void setPoliceMazeEnemy(bool val) { _isPoliceMazeEnemy = val; }
void spinInWorld();
bool tick(Common::Rect *screenRect, bool special);
diff --git a/engines/bladerunner/items.cpp b/engines/bladerunner/items.cpp
index 7de1300bff..f18ed720b4 100644
--- a/engines/bladerunner/items.cpp
+++ b/engines/bladerunner/items.cpp
@@ -46,6 +46,13 @@ void Items::getXYZ(int itemId, float *x, float *y, float *z) const {
_items[itemIndex]->getXYZ(x, y, z);
}
+void Items::setXYZ(int itemId, Vector3 position) {
+ int itemIndex = findItem(itemId);
+ assert(itemIndex != -1);
+
+ _items[itemIndex]->setXYZ(position);
+}
+
void Items::getWidthHeight(int itemId, int *width, int *height) const {
int itemIndex = findItem(itemId);
assert(itemIndex != -1);
@@ -151,6 +158,23 @@ bool Items::isPoliceMazeEnemy(int itemId) const {
return _items[itemIndex]->isTarget();
}
+void Items::setPoliceMazeEnemy(int itemId, bool val) {
+ int itemIndex = findItem(itemId);
+ if (itemIndex == -1) {
+ return;
+ }
+ _items[itemIndex]->setPoliceMazeEnemy(val);
+}
+
+void Items::setIsObstacle(int itemId, bool val) {
+ int itemIndex = findItem(itemId);
+ if (itemIndex == -1) {
+ return;
+ }
+ _items[itemIndex]->setVisible(val);
+ _vm->_sceneObjects->setIsClickable(itemId + kSceneObjectOffsetItems, val);
+}
+
BoundingBox *Items::getBoundingBox(int itemId) {
int itemIndex = findItem(itemId);
if (itemIndex == -1) {
@@ -167,6 +191,22 @@ Common::Rect *Items::getScreenRectangle(int itemId) {
return _items[itemIndex]->getScreenRectangle();
}
+int Items::getFacing(int itemId) const {
+ int itemIndex = findItem(itemId);
+ if (itemIndex == -1) {
+ return 0;
+ }
+ return _items[itemIndex]->getFacing();
+}
+
+void Items::setFacing(int itemId, int facing) {
+ int itemIndex = findItem(itemId);
+ if (itemIndex == -1) {
+ return;
+ }
+ _items[itemIndex]->setFacing(facing);
+}
+
void Items::spinInWorld(int itemId) {
int itemIndex = findItem(itemId);
if (itemIndex == -1) {
diff --git a/engines/bladerunner/items.h b/engines/bladerunner/items.h
index 1c6f488323..ddb94cdffd 100644
--- a/engines/bladerunner/items.h
+++ b/engines/bladerunner/items.h
@@ -40,6 +40,7 @@ public:
~Items();
void getXYZ(int itemId, float *x, float *y, float *z) const;
+ void setXYZ(int itemId, Vector3 position);
void getWidthHeight(int itemId, int *width, int *height) const;
void tick();
@@ -50,11 +51,15 @@ public:
void setIsTarget(int itemId, bool isTarget);
bool isTarget(int itemId) const;
bool isPoliceMazeEnemy(int itemId) const;
+ void setPoliceMazeEnemy(int itemId, bool val);
+ void setIsObstacle(int itemId, bool val);
bool isVisible(int itemId) const;
int findTargetUnderMouse(int mouseX, int mouseY) const;
BoundingBox *getBoundingBox(int itemId);
Common::Rect *getScreenRectangle(int itemId);
+ int getFacing(int itemId) const;
+ void setFacing(int itemId, int facing);
void spinInWorld(int itemId);
diff --git a/engines/bladerunner/script/police_maze.cpp b/engines/bladerunner/script/police_maze.cpp
index 41a33ff691..78c8076d83 100644
--- a/engines/bladerunner/script/police_maze.cpp
+++ b/engines/bladerunner/script/police_maze.cpp
@@ -182,8 +182,6 @@ bool PoliceMazeTargetTrack::tick() {
return false;
}
-#if 0
-
uint32 oldTime = _time;
_time = _vm->getTotalPlayTime();
int32 timeDiff = _time - oldTime;
@@ -248,7 +246,7 @@ bool PoliceMazeTargetTrack::tick() {
}
if (advancePoint) {
- _vm->_items->setXYZ(_itemId, _points[_pointIndex].x, _points[_pointIndex].y, _points[_pointIndex].z);
+ _vm->_items->setXYZ(_itemId, _points[_pointIndex]);
readdObject(_itemId);
return true;
@@ -284,7 +282,7 @@ bool PoliceMazeTargetTrack::tick() {
_dataIndex++;
if (_vm->_items->isTarget(_itemId)) {
- Sound_Play(var1, 90, 0, 0, 50, 0);
+ Sound_Play(var1, 90, 0, 0, 50);
Police_Maze_Decrement_Score(1);
Actor_Force_Stop_Walking(0);
@@ -406,7 +404,7 @@ bool PoliceMazeTargetTrack::tick() {
case 16:
var1 = _data[_dataIndex++];
var2 = _data[_dataIndex++];
- Sound_Play(var1, var2, 0, 0, 50, 0);
+ Sound_Play(var1, var2, 0, 0, 50);
break;
case 17:
@@ -464,7 +462,7 @@ bool PoliceMazeTargetTrack::tick() {
case 25:
_pointIndex = _data[_dataIndex++];
_pmt_var4 = 0;
- _vm->_items->setXYZ(_itemId, _points[_pointIndex].x, _points[_pointIndex].y, _points[_pointIndex].z);
+ _vm->_items->setXYZ(_itemId, _points[_pointIndex]);
readdObject(_itemId);
break;
@@ -476,7 +474,6 @@ bool PoliceMazeTargetTrack::tick() {
cont = false;
}
}
-#endif
return true;
}