diff options
author | Peter Kohaut | 2018-03-17 16:40:33 +0100 |
---|---|---|
committer | Peter Kohaut | 2018-03-17 16:42:25 +0100 |
commit | 19d9e4cec818980a75772a204c96774afbd2b17e (patch) | |
tree | aaf4ae3f0322c0a75418451b50c8e09b424c0a7f /engines/bladerunner/scene_objects.cpp | |
parent | b2727018344535789c96b0e9c95c741d0dd054c5 (diff) | |
download | scummvm-rg350-19d9e4cec818980a75772a204c96774afbd2b17e.tar.gz scummvm-rg350-19d9e4cec818980a75772a204c96774afbd2b17e.tar.bz2 scummvm-rg350-19d9e4cec818980a75772a204c96774afbd2b17e.zip |
BLADERUNNER: Added combat
Math cleanup
Fixed obstacle detection
Diffstat (limited to 'engines/bladerunner/scene_objects.cpp')
-rw-r--r-- | engines/bladerunner/scene_objects.cpp | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/engines/bladerunner/scene_objects.cpp b/engines/bladerunner/scene_objects.cpp index 87320a3fa4..148cde827c 100644 --- a/engines/bladerunner/scene_objects.cpp +++ b/engines/bladerunner/scene_objects.cpp @@ -255,7 +255,7 @@ bool SceneObjects::isBetween(float sourceX, float sourceZ, float targetX, float || lineIntersection(Vector2(sourceX, sourceZ), Vector2(targetX, targetZ), Vector2(objectX1, objectZ2), Vector2(objectX1, objectZ1), &intersection); } -bool SceneObjects::isObstacleBetween(float sourceX, float sourceZ, float targetX, float targetZ, float altitude, int exceptSceneObjectId) const { +bool SceneObjects::isObstacleBetween(const Vector3 &source, const Vector3 &target, int exceptSceneObjectId) const { for (int i = 0; i < _count; ++i) { const SceneObject *sceneObject = &_sceneObjects[_sceneObjectsSortedByDistance[i]]; @@ -264,9 +264,9 @@ bool SceneObjects::isObstacleBetween(float sourceX, float sourceZ, float targetX } float objectX1, objectY1, objectZ1, objectX2, objectY2, objectZ2; - _sceneObjects[i].boundingBox->getXYZ(&objectX1, &objectY1, &objectZ1, &objectX2, &objectY2, &objectZ2); + sceneObject->boundingBox->getXYZ(&objectX1, &objectY1, &objectZ1, &objectX2, &objectY2, &objectZ2); - if (84.0f <= objectY1 - altitude || 72.0f >= objectY2 - altitude) { + if (84.0f <= objectY1 - source.y || 72.0f >= objectY2 - source.y) { continue; } @@ -279,10 +279,10 @@ bool SceneObjects::isObstacleBetween(float sourceX, float sourceZ, float targetX objectZ2 = objectZ2 - zAdjustement; Vector2 intersection; - if (lineIntersection(Vector2(sourceX, sourceZ), Vector2(targetX, targetZ), Vector2(objectX1, objectZ1), Vector2(objectX2, objectZ1), &intersection) - || lineIntersection(Vector2(sourceX, sourceZ), Vector2(targetX, targetZ), Vector2(objectX2, objectZ1), Vector2(objectX2, objectZ2), &intersection) - || lineIntersection(Vector2(sourceX, sourceZ), Vector2(targetX, targetZ), Vector2(objectX2, objectZ2), Vector2(objectX1, objectZ2), &intersection) - || lineIntersection(Vector2(sourceX, sourceZ), Vector2(targetX, targetZ), Vector2(objectX1, objectZ2), Vector2(objectX1, objectZ1), &intersection)) { + if (lineIntersection(Vector2(source.x, source.z), Vector2(target.x, target.z), Vector2(objectX1, objectZ1), Vector2(objectX2, objectZ1), &intersection) + || lineIntersection(Vector2(source.x, source.z), Vector2(target.x, target.z), Vector2(objectX2, objectZ1), Vector2(objectX2, objectZ2), &intersection) + || lineIntersection(Vector2(source.x, source.z), Vector2(target.x, target.z), Vector2(objectX2, objectZ2), Vector2(objectX1, objectZ2), &intersection) + || lineIntersection(Vector2(source.x, source.z), Vector2(target.x, target.z), Vector2(objectX1, objectZ2), Vector2(objectX1, objectZ1), &intersection)) { return true; } } |