From f153da7f850dd8cdf82e0e9e96b02f84e3996e7e Mon Sep 17 00:00:00 2001 From: Eugene Sandulenko Date: Sat, 24 Mar 2018 10:46:45 +0100 Subject: BLADERUNNER: Finished PoliceMaze implementation --- engines/bladerunner/item.h | 4 +++ engines/bladerunner/items.cpp | 40 ++++++++++++++++++++++++++++++ engines/bladerunner/items.h | 5 ++++ engines/bladerunner/script/police_maze.cpp | 11 +++----- 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; } -- cgit v1.2.3