aboutsummaryrefslogtreecommitdiff
path: root/engines/bladerunner/scene_objects.cpp
diff options
context:
space:
mode:
authorPeter Kohaut2015-09-15 20:26:46 +0200
committerEugene Sandulenko2016-09-29 22:33:40 +0200
commit479d2f5b6293af2ae84fbdc718348a6e1126efb0 (patch)
treedfd6fd1a84b379aad003e005c0f47c8e211669b0 /engines/bladerunner/scene_objects.cpp
parent6672e443a870963354ee43298c75164d382a5636 (diff)
downloadscummvm-rg350-479d2f5b6293af2ae84fbdc718348a6e1126efb0.tar.gz
scummvm-rg350-479d2f5b6293af2ae84fbdc718348a6e1126efb0.tar.bz2
scummvm-rg350-479d2f5b6293af2ae84fbdc718348a6e1126efb0.zip
BLADERUNNER: still adding structures... and implementing some of script methods...
Diffstat (limited to 'engines/bladerunner/scene_objects.cpp')
-rw-r--r--engines/bladerunner/scene_objects.cpp60
1 files changed, 28 insertions, 32 deletions
diff --git a/engines/bladerunner/scene_objects.cpp b/engines/bladerunner/scene_objects.cpp
index f54a9b7120..6ac00dc635 100644
--- a/engines/bladerunner/scene_objects.cpp
+++ b/engines/bladerunner/scene_objects.cpp
@@ -26,15 +26,24 @@ namespace BladeRunner {
}
- void SceneObjects::reset() {
+ void SceneObjects::clear() {
int i;
for (i = 0; i < SCENE_OBJECTS_COUNT; i++) {
+ _sceneObjects[i]._sceneObjectId = -1;
+ _sceneObjects[i]._sceneObjectType = SceneObjectTypeUnknown;
+ _sceneObjects[i]._distanceToCamera = 0;
_sceneObjects[i]._present = 0;
+ _sceneObjects[i]._isClickable = 0;
+ _sceneObjects[i]._isObstacle = 0;
+ _sceneObjects[i]._unknown1 = 0;
+ _sceneObjects[i]._isCombatTarget = 0;
+ _sceneObjects[i]._isMoving = 0;
+ _sceneObjects[i]._isRetired = 0;
}
}
- bool SceneObjects::addActor(int sceneObjectId, BoundingBox* boundingBox, Common::Rect* screenRectangle, uint8 isClickable, uint8 unknown1, uint8 isCombatTarget, uint8 isRetired) {
- return addSceneObject(sceneObjectId, SceneObjectTypeActor, boundingBox, screenRectangle, isClickable, 0, 0, isCombatTarget, unknown1, isRetired);
+ bool SceneObjects::addActor(int sceneObjectId, BoundingBox* boundingBox, Common::Rect* screenRectangle, uint8 isClickable, uint8 isMoving, uint8 isCombatTarget, uint8 isRetired) {
+ return addSceneObject(sceneObjectId, SceneObjectTypeActor, boundingBox, screenRectangle, isClickable, 0, 0, isCombatTarget, isMoving, isRetired);
}
bool SceneObjects::addObject(int sceneObjectId, BoundingBox* boundingBox, uint8 isClickable, uint8 isObstacle, uint8 unknown1, uint8 isCombatTarget) {
@@ -46,7 +55,6 @@ namespace BladeRunner {
return addSceneObject(sceneObjectId, SceneObjectTypeItem, boundingBox, screenRectangle, isObstacle, 0, 0, isCombatTarget, 0, 0);
}
-
bool SceneObjects::remove(int sceneObjectId)
{
int i = findById(sceneObjectId);
@@ -68,7 +76,7 @@ namespace BladeRunner {
return true;
}
- int SceneObjects::findByXYZ(int *isClickable, int *isObstacle, int *isCombatTarget, float x, float y, float z, int firstClickable, int firstObstacle, int firstCombatTarget) {
+ int SceneObjects::findByXYZ(int *isClickable, int *isObstacle, int *isCombatTarget, float x, float y, float z, int mustBeClickable, int mustBeObstacle, int mustBeCombatTarget) {
BoundingBox boundingBox;
*isClickable = 0;
*isObstacle = 0;
@@ -81,10 +89,10 @@ namespace BladeRunner {
for (i = 0; i < _count; i++) {
//assert(_sceneObjectsSortedByDistance[i] < _count);
SceneObject *sceneObject = &_sceneObjects[_sceneObjectsSortedByDistance[i]];
- if ((firstClickable && sceneObject->_isClickable)
- || (firstObstacle && sceneObject->_isObstacle)
- || (firstCombatTarget && sceneObject->_isCombatTarget)) {
- break;
+ if ((mustBeClickable && !sceneObject->_isClickable)
+ || (mustBeObstacle && !sceneObject->_isObstacle)
+ || (mustBeCombatTarget && !sceneObject->_isCombatTarget)) {
+ continue;
}
boundingBox = sceneObject->_boundingBox;
@@ -93,7 +101,7 @@ namespace BladeRunner {
boundingBox.expand(-4.0, 0.0, -4.0, 4.0, 0.0, 4.0);
}
- if (boundingBox.isXYZInside(x, y, z)) {
+ if (boundingBox.inside(x, y, z)) {
*isClickable = sceneObject->_isClickable;
*isObstacle = sceneObject->_isObstacle;
*isCombatTarget = sceneObject->_isCombatTarget;
@@ -115,7 +123,7 @@ namespace BladeRunner {
return -1;
}
- bool SceneObjects::addSceneObject(int sceneObjectId, SceneObjectType sceneObjectType, BoundingBox* boundingBox, Common::Rect* screenRectangle, uint8 isClickable, uint8 isObstacle, uint8 unknown1, uint8 isCombatTarget, uint unknown2, uint isRetired) {
+ bool SceneObjects::addSceneObject(int sceneObjectId, SceneObjectType sceneObjectType, BoundingBox* boundingBox, Common::Rect* screenRectangle, uint8 isClickable, uint8 isObstacle, uint8 unknown1, uint8 isCombatTarget, uint isMoving, uint isRetired) {
int index = findEmpty();
if (_count >= SCENE_OBJECTS_COUNT || index == -1) {
return false;
@@ -130,10 +138,10 @@ namespace BladeRunner {
_sceneObjects[index]._isObstacle = isObstacle;
_sceneObjects[index]._unknown1 = unknown1;
_sceneObjects[index]._isCombatTarget = isCombatTarget;
- _sceneObjects[index]._unknown2 = unknown2;
+ _sceneObjects[index]._isMoving = isMoving;
_sceneObjects[index]._isRetired = isRetired;
- float centerZ = (_sceneObjects[index]._boundingBox._vertices[0].z + _sceneObjects[index]._boundingBox._vertices[1].z) / 2.0;
+ float centerZ = (_sceneObjects[index]._boundingBox.getZ0() + _sceneObjects[index]._boundingBox.getZ1()) / 2.0;
float distanceToCamera = fabs(_view->_cameraPosition.z - centerZ);
_sceneObjects[index]._distanceToCamera = distanceToCamera;
@@ -155,8 +163,7 @@ namespace BladeRunner {
return true;
}
- int SceneObjects::findEmpty()
- {
+ int SceneObjects::findEmpty() {
int i;
for (i = 0; i < SCENE_OBJECTS_COUNT; i++)
{
@@ -166,23 +173,12 @@ namespace BladeRunner {
return -1;
}
-
-
- SceneObject::SceneObject()
- {
- _sceneObjectId = -1;
- _sceneObjectType = SceneObjectTypeUnknown;
- _distanceToCamera = 0;
- _present = 0;
- _isClickable = 0;
- _isObstacle = 0;
- _unknown1 = 0;
- _isCombatTarget = 0;
- _unknown2 = 0;
- _isRetired = 0;
+ void SceneObjects::setMoving(int sceneObjectId, bool isMoving) {
+ int i = findById(sceneObjectId);
+ if (i == -1 || !_sceneObjects[i]._present) {
+ return;
+ }
+ _sceneObjects[i]._isMoving = isMoving;
}
- SceneObject::~SceneObject()
- {
- }
}