@melonjs/debug-plugin 14.8.3 → 15.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,741 +0,0 @@
1
- /*!
2
- * melonJS debug plugin - v14.8.3
3
- * http://www.melonjs.org
4
- * @melonjs/debug-plugin is licensed under the MIT License.
5
- * http://www.opensource.org/licenses/mit-license
6
- * @copyright (C) 2011 - 2024 Olivier Biot (AltByte Pte Ltd)
7
- */
8
- import { Renderable, video, utils, BitmapText, Rect, event, plugin, Container, Entity, Text, Camera2d, ImageLayer, game, input, timer, collision, Math, pool } from 'melonjs';
9
-
10
- var name = "@melonjs/debug-plugin";
11
- var version = "14.8.3";
12
- var description = "melonJS debug plugin";
13
- var homepage = "https://github.com/melonjs/debug-plugin#readme";
14
- var type = "module";
15
- var keywords = [
16
- "2D",
17
- "HTML5",
18
- "javascript",
19
- "TypeScript",
20
- "es6",
21
- "Canvas",
22
- "WebGL",
23
- "WebGL2",
24
- "WebAudio",
25
- "game",
26
- "engine",
27
- "tiled",
28
- "tileset",
29
- "mapeditor",
30
- "browser",
31
- "electron",
32
- "mobile",
33
- "cordova"
34
- ];
35
- var repository = {
36
- type: "git",
37
- url: "git+https://github.com/melonjs/debug-plugin.git"
38
- };
39
- var bugs = {
40
- url: "https://github.com/melonjs/debug-plugin/issues"
41
- };
42
- var license = "MIT";
43
- var author = "Olivier Biot (AltByte Pte Ltd)";
44
- var funding = "https://github.com/sponsors/melonjs";
45
- var engines = {
46
- node: ">= 19"
47
- };
48
- var main = "dist/@melonjs/debug-plugin.js";
49
- var module = "dist/@melonjs/debug-plugin.js";
50
- var types = "dist/@melonjs/debug-plugin.d.ts";
51
- var sideEffects = false;
52
- var files = [
53
- "dist/",
54
- "src/",
55
- "package.json",
56
- "README.md",
57
- "LICENSE"
58
- ];
59
- var peerDependencies = {
60
- melonjs: ">=15.12.0"
61
- };
62
- var devDependencies = {
63
- "@babel/eslint-parser": "^7.23.10",
64
- "@babel/plugin-syntax-import-assertions": "^7.23.3",
65
- "@rollup/plugin-commonjs": "^25.0.7",
66
- "@rollup/plugin-image": "^3.0.3",
67
- "@rollup/plugin-json": "^6.0.7",
68
- "@rollup/plugin-node-resolve": "^15.2.3",
69
- "@rollup/plugin-replace": "^5.0.5",
70
- "del-cli": "^5.1.0",
71
- eslint: "^8.56.0",
72
- "eslint-plugin-jsdoc": "^48.0.6",
73
- rollup: "^4.10.0",
74
- "rollup-plugin-bundle-size": "^1.0.3",
75
- "rollup-plugin-string": "^3.0.0",
76
- typescript: "^5.3.3"
77
- };
78
- var scripts = {
79
- build: "npm run lint && rollup -c --silent && npm run types",
80
- lint: "eslint src/**.js rollup.config.mjs",
81
- prepublishOnly: "npm run build",
82
- clean: "del-cli --force dist/*",
83
- types: "tsc"
84
- };
85
- var _package = {
86
- name: name,
87
- version: version,
88
- description: description,
89
- homepage: homepage,
90
- type: type,
91
- keywords: keywords,
92
- repository: repository,
93
- bugs: bugs,
94
- license: license,
95
- author: author,
96
- funding: funding,
97
- engines: engines,
98
- main: main,
99
- module: module,
100
- types: types,
101
- sideEffects: sideEffects,
102
- files: files,
103
- peerDependencies: peerDependencies,
104
- devDependencies: devDependencies,
105
- scripts: scripts
106
- };
107
-
108
- class Counters {
109
- constructor() {
110
- this.stats = [];
111
- }
112
- reset() {
113
- Object.keys(this.stats).forEach((stat) => {
114
- this.stats[stat] = 0;
115
- });
116
- }
117
- inc(stat, value) {
118
- this.stats[stat] += (value || 1);
119
- }
120
- get(stat) {
121
- return this.stats[stat] || 0;
122
- }
123
- }
124
-
125
- var img = "data:image/png;base64,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";
126
-
127
- var fontDataSource = "info face=PressStart2P size=10 bold=0 italic=0 charset= unicode= stretchH=100 smooth=1 aa=1 padding=1,1,1,1 spacing=0,0 outline=0\ncommon lineHeight=10 base=10 scaleW=128 scaleH=128 pages=1 packed=0\npage id=0 file=\"PressStart2P.png\"\nchars count=95\nchar id=32 x=1 y=1 width=0 height=0 xoffset=0 yoffset=10 xadvance=10 page=0 chnl=15\nchar id=33 x=1 y=2 width=5 height=10 xoffset=3 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=34 x=1 y=13 width=8 height=5 xoffset=1 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=35 x=7 y=1 width=10 height=10 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=36 x=1 y=19 width=10 height=10 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=37 x=1 y=30 width=10 height=10 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=38 x=1 y=41 width=10 height=10 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=39 x=10 y=12 width=4 height=5 xoffset=3 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=40 x=1 y=52 width=6 height=10 xoffset=3 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=41 x=1 y=63 width=6 height=10 xoffset=1 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=42 x=1 y=74 width=10 height=8 xoffset=0 yoffset=1 xadvance=10 page=0 chnl=15\nchar id=43 x=8 y=52 width=9 height=8 xoffset=1 yoffset=1 xadvance=10 page=0 chnl=15\nchar id=44 x=8 y=61 width=5 height=5 xoffset=1 yoffset=6 xadvance=10 page=0 chnl=15\nchar id=45 x=8 y=67 width=9 height=2 xoffset=1 yoffset=4 xadvance=10 page=0 chnl=15\nchar id=46 x=14 y=61 width=4 height=4 xoffset=3 yoffset=6 xadvance=10 page=0 chnl=15\nchar id=47 x=12 y=18 width=10 height=10 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=48 x=18 y=1 width=10 height=10 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=49 x=12 y=29 width=9 height=10 xoffset=1 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=50 x=12 y=40 width=10 height=10 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=51 x=22 y=29 width=10 height=10 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=52 x=23 y=12 width=10 height=10 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=53 x=29 y=1 width=10 height=10 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=54 x=1 y=83 width=10 height=10 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=55 x=1 y=94 width=10 height=10 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=56 x=1 y=105 width=10 height=10 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=57 x=1 y=116 width=10 height=10 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=58 x=18 y=51 width=4 height=8 xoffset=3 yoffset=1 xadvance=10 page=0 chnl=15\nchar id=59 x=12 y=70 width=5 height=9 xoffset=1 yoffset=1 xadvance=10 page=0 chnl=15\nchar id=60 x=12 y=80 width=8 height=10 xoffset=1 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=61 x=23 y=23 width=10 height=5 xoffset=0 yoffset=3 xadvance=10 page=0 chnl=15\nchar id=62 x=18 y=66 width=8 height=10 xoffset=1 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=63 x=23 y=40 width=10 height=10 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=64 x=33 y=29 width=10 height=10 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=65 x=23 y=51 width=10 height=10 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=66 x=34 y=12 width=10 height=10 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=67 x=40 y=1 width=10 height=10 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=68 x=12 y=91 width=10 height=10 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=69 x=21 y=77 width=10 height=10 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=70 x=27 y=62 width=10 height=10 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=71 x=34 y=40 width=10 height=10 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=72 x=34 y=51 width=10 height=10 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=73 x=44 y=23 width=9 height=10 xoffset=1 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=74 x=45 y=12 width=10 height=10 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=75 x=51 y=1 width=10 height=10 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=76 x=12 y=102 width=9 height=10 xoffset=1 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=77 x=12 y=113 width=10 height=10 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=78 x=22 y=102 width=10 height=10 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=79 x=23 y=88 width=10 height=10 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=80 x=32 y=73 width=10 height=10 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=81 x=38 y=62 width=10 height=10 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=82 x=23 y=113 width=10 height=10 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=83 x=33 y=99 width=10 height=10 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=84 x=34 y=84 width=9 height=10 xoffset=1 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=85 x=43 y=73 width=10 height=10 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=86 x=34 y=110 width=10 height=10 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=87 x=44 y=84 width=10 height=10 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=88 x=44 y=95 width=10 height=10 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=89 x=45 y=106 width=9 height=10 xoffset=1 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=90 x=45 y=117 width=10 height=10 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=91 x=45 y=34 width=6 height=10 xoffset=3 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=92 x=45 y=45 width=10 height=10 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=93 x=52 y=34 width=6 height=10 xoffset=1 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=94 x=34 y=23 width=8 height=4 xoffset=1 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=95 x=34 y=121 width=10 height=2 xoffset=0 yoffset=9 xadvance=10 page=0 chnl=15\nchar id=96 x=15 y=12 width=4 height=4 xoffset=4 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=97 x=54 y=23 width=10 height=7 xoffset=0 yoffset=3 xadvance=10 page=0 chnl=15\nchar id=98 x=56 y=12 width=10 height=10 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=99 x=62 y=1 width=10 height=7 xoffset=0 yoffset=3 xadvance=10 page=0 chnl=15\nchar id=100 x=49 y=56 width=10 height=10 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=101 x=56 y=45 width=10 height=8 xoffset=0 yoffset=3 xadvance=10 page=0 chnl=15\nchar id=102 x=59 y=31 width=9 height=10 xoffset=1 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=103 x=54 y=67 width=10 height=9 xoffset=0 yoffset=3 xadvance=10 page=0 chnl=15\nchar id=104 x=60 y=54 width=10 height=10 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=105 x=67 y=42 width=9 height=10 xoffset=1 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=106 x=67 y=9 width=8 height=11 xoffset=1 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=107 x=69 y=21 width=10 height=10 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=108 x=76 y=1 width=9 height=10 xoffset=1 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=109 x=76 y=12 width=10 height=8 xoffset=0 yoffset=3 xadvance=10 page=0 chnl=15\nchar id=110 x=69 y=32 width=10 height=8 xoffset=0 yoffset=3 xadvance=10 page=0 chnl=15\nchar id=111 x=86 y=1 width=10 height=8 xoffset=0 yoffset=3 xadvance=10 page=0 chnl=15\nchar id=112 x=97 y=1 width=10 height=9 xoffset=0 yoffset=3 xadvance=10 page=0 chnl=15\nchar id=113 x=108 y=1 width=10 height=9 xoffset=0 yoffset=3 xadvance=10 page=0 chnl=15\nchar id=114 x=87 y=10 width=9 height=8 xoffset=1 yoffset=3 xadvance=10 page=0 chnl=15\nchar id=115 x=97 y=11 width=10 height=7 xoffset=0 yoffset=3 xadvance=10 page=0 chnl=15\nchar id=116 x=108 y=11 width=9 height=10 xoffset=1 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=117 x=87 y=19 width=10 height=7 xoffset=0 yoffset=3 xadvance=10 page=0 chnl=15\nchar id=118 x=98 y=19 width=9 height=8 xoffset=1 yoffset=3 xadvance=10 page=0 chnl=15\nchar id=119 x=80 y=27 width=10 height=7 xoffset=0 yoffset=3 xadvance=10 page=0 chnl=15\nchar id=120 x=108 y=22 width=10 height=8 xoffset=0 yoffset=3 xadvance=10 page=0 chnl=15\nchar id=121 x=91 y=28 width=10 height=9 xoffset=0 yoffset=3 xadvance=10 page=0 chnl=15\nchar id=122 x=80 y=35 width=10 height=7 xoffset=0 yoffset=3 xadvance=10 page=0 chnl=15\nchar id=123 x=118 y=11 width=6 height=10 xoffset=3 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=124 x=102 y=28 width=4 height=10 xoffset=4 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=125 x=119 y=22 width=6 height=10 xoffset=1 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=126 x=91 y=38 width=10 height=5 xoffset=0 yoffset=3 xadvance=10 page=0 chnl=15\nchar id=32 x=0 y=0 width=0 height=0 xoffset=0 yoffset=3 xadvance=10 page=0 chnl=15\n";
128
-
129
- const DEBUG_HEIGHT = 50;
130
-
131
- class DebugPanel extends Renderable {
132
- constructor(debugToggle) {
133
- // call the super constructor
134
- super(0, 0, video.renderer.width, DEBUG_HEIGHT );
135
-
136
- // enable collision and event detection
137
- this.isKinematic = false;
138
-
139
- // to hold the debug CheckBox
140
- // zone and status
141
- this.checkbox = {};
142
-
143
- // Useful counters
144
- this.counters = new Counters([
145
- "shapes",
146
- "sprites",
147
- "velocity",
148
- "bounds",
149
- "children"
150
- ]);
151
-
152
- // for z ordering
153
- // make it ridiculously high
154
- this.pos.z = Infinity;
155
-
156
- // visibility flag
157
- this.visible = false;
158
-
159
- // frame update time in ms
160
- this.frameUpdateTime = 0;
161
-
162
- // frame draw time in ms
163
- this.frameDrawTime = 0;
164
-
165
- // set the object GUID value
166
- this.GUID = "debug-" + utils.createGUID();
167
-
168
- // set the object entity name
169
- this.name = "debugPanel";
170
-
171
- // the debug panel version
172
- this.version = "14.8.3";
173
-
174
- // persistent
175
- this.isPersistent = true;
176
-
177
- // a floating object
178
- this.floating = true;
179
-
180
- // renderable
181
- this.isRenderable = true;
182
-
183
- // always update, even when not visible
184
- this.alwaysUpdate = true;
185
-
186
- // WebGL/Canvas compatibility
187
- this.canvas = video.createCanvas(this.width, this.height, true);
188
-
189
- // create a default font, with fixed char width
190
- this.font_size = 10;
191
- this.mod = 2;
192
- if (this.width < 500) {
193
- this.font_size = 7;
194
- this.mod = this.mod * (this.font_size / 10);
195
- }
196
-
197
- // create the bitmapfont
198
- var fontImage = new Image();
199
- fontImage.src = img;
200
-
201
- this.font = new BitmapText(0, 0, {
202
- fontData: fontDataSource,
203
- font: fontImage
204
- });
205
- this.font.name = "debugPanelFont";
206
-
207
- // clickable areas
208
- var hash = utils.getUriFragment();
209
- var size = 10 * this.mod;
210
- this.checkbox.renderHitBox = new Rect(250, 2, size, size);
211
- this.checkbox.renderHitBox.selected = hash.hitbox || false;
212
- this.checkbox.renderVelocity = new Rect(250, 17, size, size);
213
- this.checkbox.renderVelocity.selected = hash.velocity || false;
214
- this.checkbox.renderQuadTree = new Rect(410, 2, size, size);
215
- this.checkbox.renderVelocity.selected = hash.quadtree || false;
216
-
217
- // add some keyboard shortcuts
218
- this.debugToggle = debugToggle;
219
-
220
- // some internal string/length
221
- this.help_str = "["+String.fromCharCode(32 + this.debugToggle)+"]show/hide";
222
- this.help_str_len = this.font.measureText(this.help_str).width;
223
- this.fps_str_len = this.font.measureText("00/00 fps").width;
224
- this.memoryPositionX = 325 * this.mod;
225
-
226
- // resize the panel if the browser is resized
227
- event.on(event.CANVAS_ONRESIZE, (w) => {
228
- this.resize(w, DEBUG_HEIGHT);
229
- });
230
-
231
- // few variables to keep track of time
232
- this.frameUpdateStartTime = 0;
233
- this.frameDrawStartTime = 0;
234
- this.frameUpdateTime = 0;
235
- this.frameDrawTime = 0;
236
-
237
- event.on(event.GAME_BEFORE_UPDATE, (time) => {
238
- this.frameUpdateStartTime = time;
239
- });
240
- event.on(event.GAME_AFTER_UPDATE, (time) => {
241
- this.frameUpdateTime = time - this.frameUpdateStartTime;
242
- });
243
-
244
- event.on(event.GAME_BEFORE_DRAW, (time) => {
245
- this.frameDrawStartTime = time;
246
- this.counters.reset();
247
- });
248
- event.on(event.GAME_AFTER_DRAW, (time) => {
249
- this.frameDrawTime = time - this.frameDrawStartTime;
250
- });
251
-
252
-
253
- this.anchorPoint.set(0, 0);
254
-
255
- //patch patch patch !
256
- this.patchSystemFn();
257
- }
258
-
259
- /**
260
- * patch system fn to draw debug information
261
- */
262
- patchSystemFn() {
263
- var _this = this;
264
-
265
- // patch renderable.js
266
- plugin.patch(Renderable, "postDraw", function (renderer) {
267
-
268
- // call the original Renderable.postDraw function
269
- this._patched.apply(this, arguments);
270
-
271
- // increment the sprites counter
272
- if (typeof this.image !== "undefined") {
273
- _this.counters.inc("sprites");
274
- }
275
-
276
- // increment the bound counter
277
- _this.counters.inc("bounds");
278
-
279
- // increment the children counter
280
- if (this instanceof Container) {
281
- _this.counters.inc("children");
282
- }
283
-
284
- // don't do anything else if the panel is hidden
285
- if (_this.visible) {
286
-
287
- // omit following object as they are patched later through different methods
288
- // XXX TODO: make this patched method more generic at Renderable level
289
- if (!(this instanceof Entity) && !(this.ancestor instanceof Entity) && !(this instanceof Text) &&
290
- !(this instanceof BitmapText) && !(this instanceof Camera2d)
291
- && !(this instanceof ImageLayer)) {
292
-
293
- // draw the renderable bounding box
294
- if (_this.checkbox.renderHitBox.selected && this.getBounds().isFinite()) {
295
-
296
- if (typeof this.ancestor !== "undefined") {
297
- renderer.save();
298
- if (!this.floating) {
299
- var absolutePosition = this.ancestor.getAbsolutePosition();
300
- renderer.translate(
301
- -absolutePosition.x,
302
- -absolutePosition.y
303
- );
304
- }
305
- }
306
-
307
- var bounds = this.getBounds();
308
-
309
- renderer.setColor("green");
310
- renderer.stroke(bounds);
311
-
312
- // the sprite mask if defined
313
- if (typeof this.mask !== "undefined") {
314
- renderer.setColor("orange");
315
- renderer.stroke(this.mask);
316
- }
317
-
318
- if (typeof this.body !== "undefined") {
319
- renderer.translate(bounds.x, bounds.y);
320
-
321
- renderer.setColor("orange");
322
- renderer.stroke(this.body.getBounds());
323
-
324
- // draw all defined shapes
325
- renderer.setColor("red");
326
- for (var i = this.body.shapes.length, shape; i--, (shape = this.body.shapes[i]);) {
327
- renderer.stroke(shape);
328
- _this.counters.inc("shapes");
329
- }
330
- renderer.translate(-bounds.x, -bounds.y);
331
- }
332
-
333
- if (typeof this.ancestor !== "undefined") {
334
- renderer.restore();
335
- }
336
- }
337
- }
338
- }
339
- });
340
-
341
- plugin.patch(BitmapText, "draw", function (renderer) {
342
- // call the original Sprite.draw function
343
- this._patched.apply(this, arguments);
344
-
345
- // draw the font rectangle
346
- if (_this.visible && _this.checkbox.renderHitBox.selected && this.name !== "debugPanelFont") {
347
- var bounds = this.getBounds();
348
-
349
- if (typeof this.ancestor !== "undefined") {
350
- var ax = this.anchorPoint.x * bounds.width,
351
- ay = this.anchorPoint.y * bounds.height;
352
- // translate back as the bounds position
353
- // is already adjusted to the anchor Point
354
- renderer.save();
355
- renderer.translate(ax, ay);
356
- }
357
-
358
- renderer.setColor("green");
359
- renderer.stroke(bounds);
360
-
361
- if (typeof this.ancestor !== "undefined") {
362
- renderer.restore();
363
- }
364
- }
365
- });
366
-
367
- // patch text.js
368
- plugin.patch(Text, "draw", function (renderer) {
369
- // call the original Text.draw function
370
- this._patched.apply(this, arguments);
371
-
372
- if (_this.visible && _this.checkbox.renderHitBox.selected) {
373
- var bounds = this.getBounds();
374
-
375
- if (typeof this.ancestor !== "undefined") {
376
- renderer.save();
377
-
378
- // if this object of this renderable parent is not the root container
379
- if (!this.root && !this.ancestor.root && this.ancestor.isFloating) {
380
- var absolutePosition = this.ancestor.getAbsolutePosition();
381
- renderer.translate(
382
- -absolutePosition.x,
383
- -absolutePosition.y
384
- );
385
- }
386
- }
387
-
388
- renderer.setColor("green");
389
- renderer.stroke(bounds);
390
-
391
- if (typeof this.ancestor !== "undefined") {
392
- renderer.restore();
393
- }
394
- }
395
- });
396
-
397
- // patch entities.js
398
- plugin.patch(Entity, "postDraw", function (renderer) {
399
- // don't do anything else if the panel is hidden
400
- if (_this.visible) {
401
-
402
- // check if debug mode is enabled
403
- if (_this.checkbox.renderHitBox.selected) {
404
-
405
- renderer.save();
406
-
407
-
408
- if (typeof this.ancestor !== "undefined") {
409
- // if this object of this renderable parent is not the root container
410
- if (!this.floating) {
411
- var absolutePosition = this.ancestor.getAbsolutePosition();
412
- renderer.translate(
413
- -absolutePosition.x,
414
- -absolutePosition.y
415
- );
416
- }
417
- }
418
-
419
- if (this.renderable instanceof Renderable) {
420
- var rbounds = this.renderable.getBounds();
421
- var rx = -rbounds.x - this.anchorPoint.x * rbounds.width,
422
- ry = -rbounds.y - this.anchorPoint.y * rbounds.height;
423
-
424
- renderer.setColor("green");
425
- renderer.translate(rx, ry);
426
- renderer.stroke(rbounds);
427
- renderer.translate(-rx, -ry);
428
- }
429
-
430
- renderer.translate(
431
- this.body.getBounds().x,
432
- this.body.getBounds().y
433
- );
434
-
435
- renderer.translate(
436
- -this.anchorPoint.x * this.body.getBounds().width,
437
- -this.anchorPoint.y * this.body.getBounds().height
438
- );
439
-
440
- // draw the bounding rect shape
441
- renderer.setColor("orange");
442
- renderer.stroke(this.body.getBounds());
443
-
444
- // draw all defined shapes
445
- renderer.setColor("red");
446
- for (var i = this.body.shapes.length, shape; i--, (shape = this.body.shapes[i]);) {
447
- renderer.stroke(shape);
448
- _this.counters.inc("shapes");
449
- }
450
-
451
- renderer.restore();
452
-
453
- }
454
-
455
- if (_this.checkbox.renderVelocity.selected && (this.body.vel.x || this.body.vel.y)) {
456
- var bounds = this.body.getBounds();
457
- var hWidth = bounds.width / 2;
458
- var hHeight = bounds.height / 2;
459
-
460
- renderer.save();
461
- renderer.setLineWidth(1);
462
-
463
- renderer.setColor("blue");
464
- renderer.translate(0, -hHeight);
465
- renderer.strokeLine(0, 0, ~~(this.body.vel.x * hWidth), ~~(this.body.vel.y * hHeight));
466
- _this.counters.inc("velocity");
467
-
468
- renderer.restore();
469
- }
470
- }
471
- // call the original Entity.postDraw function
472
- this._patched.apply(this, arguments);
473
- });
474
- }
475
-
476
- /**
477
- * show the debug panel
478
- */
479
- show() {
480
- if (!this.visible) {
481
- // add the debug panel to the game world
482
- game.world.addChild(this, Infinity);
483
- // register a mouse event for the checkboxes
484
- input.registerPointerEvent("pointerdown", this, this.onClick.bind(this));
485
- // mark it as visible
486
- this.visible = true;
487
- // force repaint
488
- game.repaint();
489
- }
490
- }
491
-
492
- /**
493
- * hide the debug panel
494
- */
495
- hide() {
496
- if (this.visible) {
497
- // release the mouse event for the checkboxes
498
- input.releasePointerEvent("pointerdown", this);
499
- // remove the debug panel from the game world
500
- game.world.removeChild(this, true);
501
- // mark it as invisible
502
- this.visible = false;
503
- // force repaint
504
- game.repaint();
505
- }
506
- }
507
-
508
- update() {
509
- // update the FPS counter
510
- timer.countFPS();
511
-
512
- return this.visible;
513
- }
514
-
515
- onClick(e) {
516
- // check the clickable areas
517
- if (this.checkbox.renderHitBox.contains(e.gameX, e.gameY)) {
518
- this.checkbox.renderHitBox.selected = !this.checkbox.renderHitBox.selected;
519
- } else if (this.checkbox.renderVelocity.contains(e.gameX, e.gameY)) {
520
- // does nothing for now, since velocity is
521
- // rendered together with hitboxes (is a global debug flag required?)
522
- this.checkbox.renderVelocity.selected = !this.checkbox.renderVelocity.selected;
523
- } else if (this.checkbox.renderQuadTree.contains(e.gameX, e.gameY)) {
524
- this.checkbox.renderQuadTree.selected = !this.checkbox.renderQuadTree.selected;
525
- }
526
- // force repaint
527
- game.repaint();
528
- }
529
-
530
- drawQuadTreeNode(renderer, node) {
531
- var bounds = node.bounds;
532
-
533
- // draw the current bounds
534
- if (node.nodes.length === 0) {
535
- // cap the alpha value to 0.4 maximum
536
- var _alpha = (node.objects.length * 0.4) / collision.maxChildren;
537
- if (_alpha > 0.0) {
538
- renderer.save();
539
- renderer.setColor("rgba(255,0,0," + _alpha + ")");
540
- renderer.fillRect(bounds.left, bounds.top, bounds.width, bounds.height);
541
- renderer.restore();
542
- }
543
- } else {
544
- //has subnodes? drawQuadtree them!
545
- for (var i = 0; i < node.nodes.length; i++) {
546
- this.drawQuadTreeNode(renderer, node.nodes[i]);
547
- }
548
- }
549
- }
550
-
551
- drawQuadTree(renderer) {
552
- var x = game.viewport.pos.x;
553
- var y = game.viewport.pos.y;
554
-
555
- renderer.translate(-x, -y);
556
-
557
- this.drawQuadTreeNode(renderer, game.world.broadphase);
558
-
559
- renderer.translate(x, y);
560
- }
561
-
562
- /** @private */
563
- drawMemoryGraph(renderer, endX) {
564
- if (window && window.performance && window.performance.memory) {
565
- var usedHeap = Math.round(window.performance.memory.usedJSHeapSize / 1048576, 2);
566
- var totalHeap = Math.round(window.performance.memory.totalJSHeapSize / 1048576, 2);
567
- var maxLen = ~~(endX - this.memoryPositionX - 5);
568
- var len = maxLen * (usedHeap / totalHeap);
569
-
570
- renderer.setColor("#0065AD");
571
- renderer.fillRect(this.memoryPositionX, 0, maxLen, 20);
572
- renderer.setColor("#3AA4F0");
573
- renderer.fillRect(this.memoryPositionX + 1, 1, len - 1, 17);
574
-
575
- this.font.draw(renderer, "Heap : " + usedHeap + "/" + totalHeap + " MB", this.memoryPositionX + 5, 2 * this.mod);
576
- } else {
577
- // Heap Memory information not available
578
- this.font.draw(renderer, "Heap : ??/?? MB", this.memoryPositionX, 2 * this.mod);
579
- }
580
- this.font.draw(renderer, "Pool : " + pool.getInstanceCount(), this.memoryPositionX, 10 * this.mod);
581
- }
582
-
583
- draw(renderer) {
584
- renderer.save();
585
-
586
- // draw the QuadTree (before the panel)
587
- if (this.checkbox.renderQuadTree.selected === true) {
588
- this.drawQuadTree(renderer);
589
- }
590
-
591
- // draw the panel
592
- renderer.setGlobalAlpha(0.5);
593
- renderer.setColor("black");
594
- renderer.fillRect(
595
- this.left, this.top,
596
- this.width, this.height
597
- );
598
- renderer.setGlobalAlpha(1.0);
599
- renderer.setColor("white");
600
-
601
- this.font.textAlign = "left";
602
-
603
- this.font.draw(renderer, "#objects : " + game.world.children.length, 5 * this.mod, 2 * this.mod);
604
- this.font.draw(renderer, "#draws : " + game.world.drawCount, 5 * this.mod, 10 * this.mod);
605
-
606
- // debug checkboxes
607
- this.font.draw(renderer, "?hitbox [" + (this.checkbox.renderHitBox.selected ? "x" : " ") + "]", 75 * this.mod, 2 * this.mod);
608
- this.font.draw(renderer, "?velocity [" + (this.checkbox.renderVelocity.selected ? "x" : " ") + "]", 75 * this.mod, 10 * this.mod);
609
-
610
- this.font.draw(renderer, "?QuadTree [" + (this.checkbox.renderQuadTree.selected ? "x" : " ") + "]", 150 * this.mod, 2 * this.mod);
611
-
612
- // draw the update duration
613
- this.font.draw(renderer, "Update : " + this.frameUpdateTime.toFixed(2) + " ms", 225 * this.mod, 2 * this.mod);
614
- // draw the draw duration
615
- this.font.draw(renderer, "Draw : " + this.frameDrawTime.toFixed(2) + " ms", 225 * this.mod, 10 * this.mod);
616
-
617
-
618
- // Draw color code hints (not supported with bitmapfont)
619
- //this.font.fillStyle.copy("red");
620
- this.font.draw(renderer, "Shapes : " + this.counters.get("shapes"), 5 * this.mod, 17 * this.mod);
621
-
622
- //this.font.fillStyle.copy("green");
623
- this.font.draw(renderer, "Sprites : " + this.counters.get("sprites"), 75 * this.mod, 17 * this.mod);
624
-
625
- //this.font.fillStyle.copy("blue");
626
- this.font.draw(renderer, "Velocity : " + this.counters.get("velocity"), 150 * this.mod, 17 * this.mod);
627
-
628
- //this.font.fillStyle.copy("orange");
629
- this.font.draw(renderer, "Bounds : " + this.counters.get("bounds"), 225 * this.mod, 17 * this.mod);
630
-
631
- //this.font.fillStyle.copy("purple");
632
- this.font.draw(renderer, "Children : " + this.counters.get("children"), 325 * this.mod, 17 * this.mod);
633
-
634
- // Reset font style
635
- //this.font.setFont("courier", this.font_size, "white");
636
-
637
- // draw the memory heap usage
638
- var endX = this.width - 5;
639
- this.drawMemoryGraph(renderer, endX - this.help_str_len);
640
-
641
- this.font.textAlign = "right";
642
-
643
- // some help string
644
- this.font.draw(renderer, this.help_str, endX, 17 * this.mod);
645
-
646
- //fps counter
647
- var fps_str = timer.fps + "/" + timer.maxfps + " fps";
648
- this.font.draw(renderer, fps_str, endX, 2 * this.mod);
649
-
650
- renderer.restore();
651
- }
652
-
653
- onDestroyEvent() {
654
- // hide the panel
655
- this.hide();
656
- }
657
- }
658
-
659
- /**
660
- * @classdesc
661
- * a simple debug panel plugin <br>
662
- * <img src="images/debugPanel.png"/> <br>
663
- * <b>usage : </b><br>
664
- * &bull; upon loading the debug panel, it will be automatically registered under me.plugins.debugPanel <br>
665
- * &bull; you can then press the default "s" key to show or hide the panel, or use me.plugins.debugPanel.show() and me.plugins.debugPanel.show(), or add #debug as a parameter to your URL e.g. http://myURL/index.html#debug <br>
666
- * &bull; default key can be configured using the following parameters in the url : e.g. http://myURL/index.html#debugToggleKey=d <br>
667
- * <b>the debug panel provides the following information : </b><br>
668
- * &bull; amount of total objects currently active in the current stage <br>
669
- * &bull; amount of draws operation <br>
670
- * &bull; amount of body shape (for collision) <br>
671
- * &bull; amount of bounding box <br>
672
- * &bull; amount of sprites objects <br>
673
- * &bull; amount of objects currently inactive in the the object pool <br>
674
- * &bull; memory usage (Heap Memory information is only available under Chrome) <br>
675
- * &bull; frame update time (in ms) <br>
676
- * &bull; frame draw time (in ms) <br>
677
- * &bull; current fps rate vs target fps <br>
678
- * additionally, using the checkbox in the panel it is also possible to display : <br>
679
- * &bull; the hitbox or bounding box for all objects <br>
680
- * &bull; current velocity vector <br>
681
- * &bull; quadtree spatial visualization <br>
682
- * @augments plugin.BasePlugin
683
- */
684
- class DebugPanelPlugin extends plugin.BasePlugin {
685
- /**
686
- * @param {number} [debugToggle=input.KEY.S] - a default key to toggle the debug panel visibility state
687
- * @see input.KEY for default key options
688
- */
689
- constructor(debugToggle = input.KEY.S) {
690
- // call the super constructor
691
- super();
692
-
693
- // minimum melonJS version expected
694
- this.version = "15.12.0";
695
-
696
- // hello world
697
- console.log(`${name} ${version} | ${homepage}`);
698
-
699
- this.debugToggle = debugToggle;
700
-
701
- this.panel = new DebugPanel(debugToggle);
702
-
703
- this.keyHandler = event.on(event.KEYDOWN, (action, keyCode) => {
704
- if (keyCode === this.debugToggle) {
705
- this.toggle();
706
- }
707
- });
708
-
709
- // if "#debug" is present in the URL
710
- if (utils.getUriFragment().debug === true) {
711
- this.show();
712
- } // else keep it hidden
713
- }
714
-
715
- /**
716
- * show the debug panel
717
- */
718
- show() {
719
- this.panel.show();
720
- }
721
-
722
- /**
723
- * hide the debug panel
724
- */
725
- hide() {
726
- this.panel.hide();
727
- }
728
-
729
- /**
730
- * toggle the debug panel visibility state
731
- */
732
- toggle() {
733
- if (this.panel.visible) {
734
- this.panel.hide();
735
- } else {
736
- this.panel.show();
737
- }
738
- }
739
- }
740
-
741
- export { DebugPanelPlugin };