diff options
author | Peter Kohaut | 2015-09-15 20:26:46 +0200 |
---|---|---|
committer | Eugene Sandulenko | 2016-09-29 22:33:40 +0200 |
commit | 479d2f5b6293af2ae84fbdc718348a6e1126efb0 (patch) | |
tree | dfd6fd1a84b379aad003e005c0f47c8e211669b0 /engines/bladerunner/scene_objects.cpp | |
parent | 6672e443a870963354ee43298c75164d382a5636 (diff) | |
download | scummvm-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.cpp | 60 |
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() - { - } } |