aboutsummaryrefslogtreecommitdiff
path: root/engines/bladerunner/debugger.h
blob: a7c0aa4edb8606300c1e6ecd2c441dd362ea2165 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
/* ScummVM - Graphic Adventure Engine
 *
 * ScummVM is the legal property of its developers, whose names
 * are too numerous to list here. Please refer to the COPYRIGHT
 * file distributed with this source distribution.
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 *
 */

#ifndef BLADERUNNER_DEBUGGER_H
#define BLADERUNNER_DEBUGGER_H

#include "bladerunner/vector.h"

#include "gui/debugger.h"

namespace Graphics {
struct Surface;
}

namespace BladeRunner {

class BladeRunnerEngine;
class View;

enum DebuggerDrawnObjectType {
	debuggerObjTypeUndefined     = 99,
	debuggerObjTypeActor 	     =  0,
	debuggerObjType3dObject      =  1,
	debuggerObjTypeItem          =  2,
	debuggerObjTypeRegionNormal  =  3,
	debuggerObjTypeRegionExit    =  4,
	debuggerObjTypeWaypointNorm  =  5,
	debuggerObjTypeWaypoingFlee  =  6,
	debuggerObjTypeWaypointCover =  7,
	debuggerObjTypeWalkbox       =  8,
	debuggerObjTypeEffect        =  9,
	debuggerObjTypeLight         = 10,
	debuggerObjTypeFog           = 11
};

class Debugger : public GUI::Debugger{
	BladeRunnerEngine *_vm;

	static const uint kMaxSpecificObjectsDrawnCount = 100;

	struct DebuggerDrawnObject {
		int                     sceneId;
		int                     setId;
		int                     objId;
		DebuggerDrawnObjectType type;
	};

public:
	bool _isDebuggerOverlay;

	bool _viewActorsToggle;
	bool _view3dObjectsToggle;
	bool _viewItemsToggle;
	bool _viewFogs;
	bool _viewLights;
	bool _viewScreenEffects;
	bool _viewObstacles;
	bool _viewRegionsNormalToggle;
	bool _viewRegionsExitsToggle;
	bool _viewUI;
	bool _viewWaypointsNormalToggle;
	bool _viewWaypointsFleeToggle;
	bool _viewWaypointsCoverToggle;
	bool _viewWalkboxes;
	bool _viewZBuffer;
	bool _playFullVk;
	bool _showStatsVk;
	bool _showMazeScore;
	bool _showMouseClickInfo;

	Debugger(BladeRunnerEngine *vm);
	~Debugger();

	bool cmdAnimation(int argc, const char **argv);
	bool cmdHealth(int argc, const char **argv);
	bool cmdChapter(int argc, const char **argv);
	bool cmdDraw(int argc, const char **argv);
	bool cmdFlag(int argc, const char **argv);
	bool cmdGoal(int argc, const char **argv);
	bool cmdLoop(int argc, const char **argv);
	bool cmdPosition(int argc, const char **argv);
	bool cmdSay(int argc, const char **argv);
	bool cmdScene(int argc, const char **argv);
	bool cmdVariable(int argc, const char **argv);
	bool cmdClue(int argc, const char **argv);
	bool cmdTimer(int argc, const char **argv);
	bool cmdFriend(int argc, const char **argv);
	bool cmdLoad(int argc, const char **argv);
	bool cmdSave(int argc, const char **argv);
	bool cmdOverlay(int argc, const char **argv);
	bool cmdSubtitle(int argc, const char **argv);
	bool cmdMazeScore(int argc, const char **argv);
	bool cmdObject(int argc, const char **argv);
	bool cmdItem(int argc, const char **argv);
	bool cmdRegion(int argc, const char **argv);
	bool cmdClick(int argc, const char **argv);
	bool cmdDifficulty(int argc, const char **argv);
#if BLADERUNNER_ORIGINAL_BUGS
#else
	bool cmdEffect(int argc, const char **argv);
#endif // BLADERUNNER_ORIGINAL_BUGS
	bool cmdList(int argc, const char **argv);
	bool cmdVk(int argc, const char **argv);

	Common::String getDifficultyDescription(int difficultyValue);
	void drawDebuggerOverlay();

	void drawBBox(Vector3 start, Vector3 end, View *view, Graphics::Surface *surface, int color);
	void drawSceneObjects();
	void drawLights();
	void drawFogs();
	void drawRegions();
	void drawWaypoints();
	void drawWalkboxes();
	void drawScreenEffects();

private:
	Common::Array<DebuggerDrawnObject> _specificDrawnObjectsList;
	bool _specificActorsDrawn;
	bool _specific3dObjectsDrawn;
	bool _specificItemsDrawn;
	bool _specificEffectsDrawn;
	bool _specificLightsDrawn;
	bool _specificFogsDrawn;
	bool _specificRegionNormalDrawn;
	bool _specificRegionExitsDrawn;
	bool _specificWaypointNormalDrawn;
	bool _specificWaypointFleeDrawn;
	bool _specificWaypointCoverDrawn;
	bool _specificWalkboxesDrawn;

	void toggleObjectInDbgDrawList(DebuggerDrawnObject &drObj);
	int findInDbgDrawList(DebuggerDrawnObjectType objType, int objId, int setId, int sceneId);
	void updateTogglesForDbgDrawListInCurrentSetAndScene();
};

} // End of namespace BladeRunner

#endif