diff options
Diffstat (limited to 'engines/bladerunner/debugger.cpp')
-rw-r--r-- | engines/bladerunner/debugger.cpp | 75 |
1 files changed, 60 insertions, 15 deletions
diff --git a/engines/bladerunner/debugger.cpp b/engines/bladerunner/debugger.cpp index 5539082187..0355f9d0f5 100644 --- a/engines/bladerunner/debugger.cpp +++ b/engines/bladerunner/debugger.cpp @@ -25,6 +25,7 @@ #include "bladerunner/actor.h" #include "bladerunner/bladerunner.h" #include "bladerunner/boundingbox.h" +#include "bladerunner/combat.h" #include "bladerunner/font.h" #include "bladerunner/game_constants.h" #include "bladerunner/game_flags.h" @@ -55,6 +56,8 @@ Debugger::Debugger(BladeRunnerEngine *vm) : GUI::Debugger() { _vm = vm; _viewSceneObjects = false; + _viewActorsOnly = false; + _viewObstacles = false; _viewUI = false; _viewZBuffer = false; @@ -105,8 +108,8 @@ bool Debugger::cmdAnimation(int argc, const char **argv) { bool Debugger::cmdDraw(int argc, const char **argv) { if (argc != 2) { - debugPrintf("Enables debug rendering of scene objects, ui elements, zbuffer or disables debug rendering.\n"); - debugPrintf("Usage: %s (obj | ui | zbuf | reset)\n", argv[0]); + debugPrintf("Enables debug rendering of scene objects, obstacles, ui elements, zbuffer or disables debug rendering.\n"); + debugPrintf("Usage: %s (obj | actors | obstacles | ui | zbuf | reset)\n", argv[0]); return true; } @@ -114,6 +117,13 @@ bool Debugger::cmdDraw(int argc, const char **argv) { if (arg == "obj") { _viewSceneObjects = !_viewSceneObjects; debugPrintf("Drawing scene objects = %i\n", _viewSceneObjects); + } else if (arg == "actors") { + _viewSceneObjects = !_viewSceneObjects; + _viewActorsOnly = _viewSceneObjects; + debugPrintf("Drawing scene actors = %i\n", _viewSceneObjects); + } else if (arg == "obstacles") { + _viewObstacles = !_viewObstacles; + debugPrintf("Drawing obstacles = %i\n", _viewObstacles); } else if (arg == "ui") { _viewUI = !_viewUI; debugPrintf("Drawing UI elements = %i\n", _viewUI); @@ -256,7 +266,6 @@ bool Debugger::cmdPosition(int argc, const char **argv) { debugPrintf("actorY(%i) = %f\n", actorId, actor->getY()); debugPrintf("actorZ(%i) = %f\n", actorId, actor->getZ()); debugPrintf("actorFacing(%i) = %i\n", actorId, actor->getFacing()); - return true; } if (argc == 3) { @@ -271,11 +280,9 @@ bool Debugger::cmdPosition(int argc, const char **argv) { return true; } - Vector3 position; - otherActor->getXYZ(&position.x, &position.y, &position.z); + Vector3 position = otherActor->getXYZ(); actor->setSetId(otherActor->getSetId()); actor->setAtXYZ(position, otherActor->getFacing()); - return true; } if (argc == 7) { @@ -285,7 +292,6 @@ bool Debugger::cmdPosition(int argc, const char **argv) { actor->setSetId(setId); actor->setAtXYZ(position, facing); - return true; } return true; } @@ -386,19 +392,22 @@ void Debugger::drawSceneObjects() { for (int i = 0; i < count; i++) { SceneObjects::SceneObject *sceneObject = &_vm->_sceneObjects->_sceneObjects[_vm->_sceneObjects->_sceneObjectsSortedByDistance[i]]; - const BoundingBox *bbox = sceneObject->boundingBox; + const BoundingBox &bbox = sceneObject->boundingBox; Vector3 a, b; - bbox->getXYZ(&a.x, &a.y, &a.z, &b.x, &b.y, &b.z); + bbox.getXYZ(&a.x, &a.y, &a.z, &b.x, &b.y, &b.z); Vector3 pos = _vm->_view->calculateScreenPosition(0.5 * (a + b)); int color; + if (_viewActorsOnly && sceneObject->type != kSceneObjectTypeActor) + continue; + switch (sceneObject->type) { case kSceneObjectTypeUnknown: break; case kSceneObjectTypeActor: color = 0x7C00; // 11111 00000 00000; drawBBox(a, b, _vm->_view, &_vm->_surfaceFront, color); - _vm->_surfaceFront.frameRect(*sceneObject->screenRectangle, color); + _vm->_surfaceFront.frameRect(sceneObject->screenRectangle, color); _vm->_mainFont->drawColor(_vm->_textActorNames->getText(sceneObject->id - kSceneObjectOffsetActors), _vm->_surfaceFront, pos.x, pos.y, color); break; case kSceneObjectTypeItem: @@ -406,7 +415,7 @@ void Debugger::drawSceneObjects() { char itemText[40]; drawBBox(a, b, _vm->_view, &_vm->_surfaceFront, color); sprintf(itemText, "item %i", sceneObject->id - kSceneObjectOffsetItems); - _vm->_surfaceFront.frameRect(*sceneObject->screenRectangle, color); + _vm->_surfaceFront.frameRect(sceneObject->screenRectangle, color); _vm->_mainFont->drawColor(itemText, _vm->_surfaceFront, pos.x, pos.y, color); break; case kSceneObjectTypeObject: @@ -417,13 +426,16 @@ void Debugger::drawSceneObjects() { color = 0x03E0; // 00000 11111 00000; } drawBBox(a, b, _vm->_view, &_vm->_surfaceFront, color); - _vm->_surfaceFront.frameRect(*sceneObject->screenRectangle, color); + _vm->_surfaceFront.frameRect(sceneObject->screenRectangle, color); _vm->_mainFont->drawColor(_vm->_scene->objectGetName(sceneObject->id - kSceneObjectOffsetObjects), _vm->_surfaceFront, pos.x, pos.y, color); break; } } } + if (_viewActorsOnly) + return; + //draw regions for (int i = 0; i < 10; i++) { Regions::Region *region = &_vm->_scene->_regions->_regions[i]; @@ -481,12 +493,13 @@ void Debugger::drawSceneObjects() { } //draw waypoints - for(int i = 0; i < _vm->_waypoints->_count; i++) { + for (int i = 0; i < _vm->_waypoints->_count; i++) { Waypoints::Waypoint *waypoint = &_vm->_waypoints->_waypoints[i]; - if(waypoint->setId != _vm->_scene->getSetId()) + if(waypoint->setId != _vm->_scene->getSetId()) { continue; + } Vector3 pos = waypoint->position; - Vector3 size = Vector3(5.0f, 5.0f, 5.0f); + Vector3 size = Vector3(3.0f, 3.0f, 3.0f); int color = 0x7FFF; // 11111 11111 11111 drawBBox(pos - size, pos + size, _vm->_view, &_vm->_surfaceFront, color); Vector3 spos = _vm->_view->calculateScreenPosition(pos); @@ -495,6 +508,38 @@ void Debugger::drawSceneObjects() { _vm->_mainFont->drawColor(waypointText, _vm->_surfaceFront, spos.x, spos.y, color); } + //draw combat cover waypoints + for (int i = 0; i < (int)_vm->_combat->_coverWaypoints.size(); i++) { + Combat::CoverWaypoint *cover = &_vm->_combat->_coverWaypoints[i]; + if (cover->setId != _vm->_scene->getSetId()) { + continue; + } + Vector3 pos = cover->position; + Vector3 size = Vector3(3.0f, 3.0f, 3.0f); + int color = 0x7C1F; // 11111 00000 11111 + drawBBox(pos - size, pos + size, _vm->_view, &_vm->_surfaceFront, color); + Vector3 spos = _vm->_view->calculateScreenPosition(pos); + char coverText[40]; + sprintf(coverText, "cover %i", i); + _vm->_mainFont->drawColor(coverText, _vm->_surfaceFront, spos.x, spos.y, color); + } + + //draw combat flee waypoints + for (int i = 0; i < (int)_vm->_combat->_fleeWaypoints.size(); i++) { + Combat::FleeWaypoint *flee = &_vm->_combat->_fleeWaypoints[i]; + if (flee->setId != _vm->_scene->getSetId()) { + continue; + } + Vector3 pos = flee->position; + Vector3 size = Vector3(3.0f, 3.0f, 3.0f); + int color = 0x03FF; // 00000 11111 11111 + drawBBox(pos - size, pos + size, _vm->_view, &_vm->_surfaceFront, color); + Vector3 spos = _vm->_view->calculateScreenPosition(pos); + char fleeText[40]; + sprintf(fleeText, "flee %i", i); + _vm->_mainFont->drawColor(fleeText, _vm->_surfaceFront, spos.x, spos.y, color); + } + #if 0 //draw aesc for (uint i = 0; i < _screenEffects->_entries.size(); i++) { |