@oliversalzburg/js-utils 0.0.13 → 0.0.14

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.
Files changed (97) hide show
  1. package/_site/assets/navigation.js +1 -1
  2. package/_site/assets/search.js +1 -1
  3. package/_site/classes/AbstractError.html +5 -5
  4. package/_site/classes/Canvas.html +27 -26
  5. package/_site/classes/InternalError.html +6 -6
  6. package/_site/classes/InvalidArgumentError.html +5 -5
  7. package/_site/classes/InvalidOperationError.html +5 -5
  8. package/_site/classes/NotImplementedError.html +5 -5
  9. package/_site/classes/PermissionViolationError.html +5 -5
  10. package/_site/classes/Random.html +18 -12
  11. package/_site/classes/RenderLoop.html +22 -19
  12. package/_site/classes/ResourceConflictError.html +5 -5
  13. package/_site/classes/UnexpectedNilError.html +2 -2
  14. package/_site/classes/UnknownError.html +5 -5
  15. package/_site/classes/Vector2.html +33 -29
  16. package/_site/classes/Vector3.html +8 -8
  17. package/_site/functions/addVector2.html +1 -1
  18. package/_site/functions/blend.html +1 -1
  19. package/_site/functions/blendAdditive.html +1 -1
  20. package/_site/functions/blendSubtractive.html +1 -1
  21. package/_site/functions/clamp.html +1 -1
  22. package/_site/functions/cosDeg.html +1 -1
  23. package/_site/functions/deg2rad.html +1 -1
  24. package/_site/functions/difference.html +1 -1
  25. package/_site/functions/distance.html +1 -1
  26. package/_site/functions/errorToJSON.html +1 -1
  27. package/_site/functions/errorToRecord.html +1 -1
  28. package/_site/functions/errorToSimpleSerializable.html +1 -1
  29. package/_site/functions/filterType.html +1 -1
  30. package/_site/functions/formatString.html +1 -1
  31. package/_site/functions/formatStringTemplate.html +1 -1
  32. package/_site/functions/fromRGB.html +1 -1
  33. package/_site/functions/fromRGBA.html +1 -1
  34. package/_site/functions/getA.html +1 -1
  35. package/_site/functions/getB.html +1 -1
  36. package/_site/functions/getDocumentElementTypeById.html +1 -1
  37. package/_site/functions/getG.html +1 -1
  38. package/_site/functions/getR.html +1 -1
  39. package/_site/functions/intersect.html +1 -1
  40. package/_site/functions/is.html +1 -1
  41. package/_site/functions/isError.html +1 -1
  42. package/_site/functions/isInteger.html +1 -1
  43. package/_site/functions/isNil.html +1 -1
  44. package/_site/functions/isqrt.html +1 -1
  45. package/_site/functions/multiplyVector2.html +1 -1
  46. package/_site/functions/mustExist.html +1 -1
  47. package/_site/functions/nextPalette.html +1 -1
  48. package/_site/functions/putPixel32.html +7 -7
  49. package/_site/functions/putPixel32Add.html +7 -7
  50. package/_site/functions/putPixel32Sub.html +7 -7
  51. package/_site/functions/putSubPixel32.html +1 -1
  52. package/_site/functions/rad2deg.html +1 -1
  53. package/_site/functions/randomRange.html +1 -1
  54. package/_site/functions/safeRGBComponent.html +1 -1
  55. package/_site/functions/seedFromString.html +1 -1
  56. package/_site/functions/shuffleArray.html +1 -1
  57. package/_site/functions/sinDeg.html +1 -1
  58. package/_site/functions/sleep.html +1 -1
  59. package/_site/functions/somecolor.html +1 -1
  60. package/_site/functions/subtractVector2.html +1 -1
  61. package/_site/functions/toGrayScale.html +1 -1
  62. package/_site/functions/unknownToError.html +1 -1
  63. package/_site/interfaces/CanvasOptions.html +2 -2
  64. package/_site/interfaces/RenderLoopOptions.html +3 -3
  65. package/_site/modules.html +1 -0
  66. package/_site/types/AnyConstructor.html +1 -1
  67. package/_site/types/AnyFunction.html +1 -1
  68. package/_site/types/ConstructorOf.html +1 -1
  69. package/_site/types/FunctionReturning.html +1 -1
  70. package/_site/types/Maybe.html +1 -1
  71. package/_site/types/Mixin.html +1 -1
  72. package/_site/types/Nil.html +1 -1
  73. package/_site/types/RenderLoopCallback.html +1 -1
  74. package/_site/types/SerializedError.html +1 -1
  75. package/_site/variables/MS_PER_FRAME_60FPS.html +1 -0
  76. package/_site/variables/PALETTES.html +1 -1
  77. package/_site/variables/TWO_PI.html +1 -1
  78. package/_site/variables/random-1.html +1 -1
  79. package/lib/graphics/canvas copy.d.ts +170 -0
  80. package/lib/graphics/canvas copy.js +300 -0
  81. package/lib/graphics/canvas copy.js.map +1 -0
  82. package/lib/graphics/canvas-worker.d.ts +50 -0
  83. package/lib/graphics/canvas-worker.js +78 -0
  84. package/lib/graphics/canvas-worker.js.map +1 -0
  85. package/lib/graphics/canvas.d.ts +1 -3
  86. package/lib/graphics/canvas.js +4 -6
  87. package/lib/graphics/canvas.js.map +1 -1
  88. package/lib/graphics/render-loop.d.ts +5 -5
  89. package/lib/graphics/render-loop.js +17 -9
  90. package/lib/graphics/render-loop.js.map +1 -1
  91. package/lib/math/vector2.d.ts +6 -0
  92. package/lib/math/vector2.js +8 -0
  93. package/lib/math/vector2.js.map +1 -1
  94. package/lib/random.d.ts +8 -0
  95. package/lib/random.js +10 -0
  96. package/lib/random.js.map +1 -1
  97. package/package.json +2 -2
@@ -0,0 +1,300 @@
1
+ import { InvalidOperationError } from "../errors/InvalidOperationError.js";
2
+ import { mustExist } from "../nil.js";
3
+ import { blend, blendAdditive, blendSubtractive, fromRGBA, getA, getB, getG, getR, } from "./core.js";
4
+ /**
5
+ * The {@linkcode Canvas} is a double-buffered construct to help with drawing to a
6
+ * {@linkcode !HTMLCanvasElement} with best possible performance.
7
+ * We utilize an {@linkcode !OffscreenCanvas} with a {@linkcode !OffscreenCanvasRenderingContext2D}
8
+ * to draw frames and expect to render them back to the DOM in regular intervals.
9
+ * @group Graphics
10
+ */
11
+ export class Canvas {
12
+ /**
13
+ * The {@linkcode !HTMLCanvasElement} we're interacting with in the DOM.
14
+ */
15
+ canvasDom;
16
+ /**
17
+ * The rendering context for the canvas located in the DOM.
18
+ */
19
+ //#canvasDomContext: ImageBitmapRenderingContext;
20
+ /**
21
+ * The offscreen canvas we use for rendering.
22
+ */
23
+ #canvasOffscreen;
24
+ /**
25
+ * The width of the canvas.
26
+ */
27
+ width;
28
+ /**
29
+ * The height of the canvas.
30
+ */
31
+ height;
32
+ /**
33
+ * The {@linkcode !OffscreenCanvasRenderingContext2D} we're using to draw to the canvas.
34
+ */
35
+ context;
36
+ /**
37
+ * The {@linkcode !ImageData} object in our offscreen canvas. We usually interact with its
38
+ * {@linkcode Canvas.buffer buffer} directly.
39
+ */
40
+ #imageData;
41
+ /**
42
+ * Our back buffer.
43
+ */
44
+ buffer;
45
+ /**
46
+ * The configuration that was used for this canvas.
47
+ */
48
+ options;
49
+ constructor(canvas, worker, options) {
50
+ this.width = canvas.width;
51
+ this.height = canvas.height;
52
+ // @ts-expect-error this is fucked
53
+ if (canvas["__proto__"].toString().includes("HTMLCanvasElement")) {
54
+ this.options = options ?? {};
55
+ this.canvasDom = canvas;
56
+ //this.#canvasDomContext = mustExist(
57
+ // this.canvasDom.getContext("bitmaprenderer", {
58
+ // alpha: false,
59
+ // }),
60
+ // "Unable to create rendering context for DOM canvas.",
61
+ //);
62
+ this.#canvasOffscreen = this.canvasDom.transferControlToOffscreen();
63
+ //this.context.font = "12px sans-serif";
64
+ mustExist(worker).postMessage({ id: "init", canvas: this.#canvasOffscreen }, [
65
+ this.#canvasOffscreen,
66
+ ]);
67
+ }
68
+ else {
69
+ this.options = options ?? {};
70
+ this.#canvasOffscreen = canvas;
71
+ this.context = mustExist(this.#canvasOffscreen.getContext("2d", {
72
+ alpha: false,
73
+ desynchronized: false,
74
+ //willReadFrequently: this.options.supportReadBack,
75
+ }), "Unable to create rendering context for offscreen canvas.");
76
+ this.#imageData = this.context.createImageData(this.width, this.height);
77
+ this.buffer = this.#imageData.data;
78
+ }
79
+ }
80
+ static reconstruct(canvasOffscreen) {
81
+ const instance = new Canvas(canvasOffscreen);
82
+ return instance;
83
+ }
84
+ /**
85
+ * Draws the back buffer onto the canvas.
86
+ */
87
+ update() {
88
+ if (!this.context || !this.#imageData) {
89
+ return;
90
+ }
91
+ this.context.putImageData(this.#imageData, 0, 0);
92
+ }
93
+ /**
94
+ * Draws the offscreen canvas into the DOM canvas.
95
+ */
96
+ render() {
97
+ this.update();
98
+ return;
99
+ //const newFrame = this.#canvasOffscreen.transferToImageBitmap();
100
+ //this.#canvasDomContext.transferFromImageBitmap(newFrame);
101
+ }
102
+ /**
103
+ * Draws a slightly transparent, black rectangle over the canvas,
104
+ * and then reads the result back into the buffer.
105
+ * @param color The color to fade the buffer with. The alpha component of
106
+ * the color defines how strong the fade is. `0` is not at all, `255` makes
107
+ * it instantly black.
108
+ */
109
+ fade(color = fromRGBA(0, 0, 0, 1)) {
110
+ this.blendWith(color);
111
+ }
112
+ /**
113
+ * Reads the front buffer back into the back buffer.
114
+ */
115
+ bufferReadBack() {
116
+ if (!this.options.supportReadBack) {
117
+ throw new InvalidOperationError("To use `bufferReadBack()`, you must construct the `Canvas` with `options.supportReadBack` set to `true`.");
118
+ }
119
+ if (!this.context) {
120
+ return;
121
+ }
122
+ this.#imageData = this.context.getImageData(0, 0, this.width, this.height);
123
+ this.buffer = this.#imageData.data;
124
+ }
125
+ /**
126
+ * Returns the color of a pixel in the back buffer.
127
+ * @param x The X coordinate to retrieve.
128
+ * @param y The X coordinate to retrieve.
129
+ * @returns The color of the pixel at the given local.
130
+ */
131
+ getPixel32(x, y) {
132
+ if (!this.buffer) {
133
+ return 0;
134
+ }
135
+ const bufferOffset = (x + y * this.width) * 4;
136
+ return fromRGBA(this.buffer[bufferOffset + 0], this.buffer[bufferOffset + 1], this.buffer[bufferOffset + 2], this.buffer[bufferOffset + 3]);
137
+ }
138
+ /**
139
+ * Colors a pixel in the back buffer.
140
+ * @param x The X coordinate to color.
141
+ * @param y The Y coordinate to color.
142
+ * @param color The color to place at the coordinate.
143
+ */
144
+ setPixel32(x, y, color) {
145
+ if (!this.buffer) {
146
+ return;
147
+ }
148
+ const bufferOffset = (x + y * this.width) * 4;
149
+ this.buffer[bufferOffset + 0] = getR(color);
150
+ this.buffer[bufferOffset + 1] = getG(color);
151
+ this.buffer[bufferOffset + 2] = getB(color);
152
+ this.buffer[bufferOffset + 3] = getA(color);
153
+ }
154
+ /**
155
+ * Fills the entire back buffer with the given color.
156
+ * @param color The color to fill the back buffer with.
157
+ */
158
+ clearWith(color) {
159
+ if (!this.buffer) {
160
+ return;
161
+ }
162
+ const r = getR(color);
163
+ const g = getG(color);
164
+ const b = getB(color);
165
+ const a = getA(color);
166
+ for (let bufferOffset = 0; bufferOffset < this.width * this.height * 4; bufferOffset += 4) {
167
+ this.buffer[bufferOffset + 0] = r;
168
+ this.buffer[bufferOffset + 1] = g;
169
+ this.buffer[bufferOffset + 2] = b;
170
+ this.buffer[bufferOffset + 3] = a;
171
+ }
172
+ }
173
+ /**
174
+ * Fills the entire back buffer with the given color.
175
+ * @param color The color to fill the back buffer with.
176
+ */
177
+ blendWith(color) {
178
+ if (!this.buffer) {
179
+ return;
180
+ }
181
+ const r = getR(color);
182
+ const g = getG(color);
183
+ const b = getB(color);
184
+ const a = getA(color);
185
+ for (let bufferOffset = 0; bufferOffset < this.width * this.height * 4; bufferOffset += 4) {
186
+ this.buffer[bufferOffset + 0] = (a * r + (255 - a) * this.buffer[bufferOffset + 0]) >> 8;
187
+ this.buffer[bufferOffset + 1] = (a * g + (255 - a) * this.buffer[bufferOffset + 1]) >> 8;
188
+ this.buffer[bufferOffset + 2] = (a * b + (255 - a) * this.buffer[bufferOffset + 2]) >> 8;
189
+ }
190
+ }
191
+ }
192
+ /**
193
+ * Linearly blends a new pixel with an existing color value in a {@linkcode Canvas}.
194
+ *
195
+ * As this method is often called many times in render loops, only bounds
196
+ * checking is applied to the given coordinates.
197
+ *
198
+ * The coordinates are **expected to already be integers**. Supplying numbers with fractions
199
+ * has performance implications. Ensure you're working with integers, or truncate the
200
+ * coordinates before passing them in.
201
+ *
202
+ * The `alpha` value is expected to be an integer in the range from `0` to `255`.
203
+ * `0` meaning fully transparent, `255` meaning fully opaque.
204
+ * @param canvas The {@linkcode Canvas} to interact with.
205
+ * @param x The X coordinate at which to place the pixel.
206
+ * @param y The Y coordinate at which to place the pixel.
207
+ * @param color The color of the pixel.
208
+ * @param alpha The alpha value to use to blend the pixel with existing color at the location.
209
+ * @group Graphics
210
+ */
211
+ export const putPixel32 = (canvas, x, y, color, alpha) => {
212
+ if (canvas.width < x || x < 0 || canvas.height < y || y < 0) {
213
+ return;
214
+ }
215
+ const srcColor = canvas.getPixel32(x, y);
216
+ const newColor = blend(srcColor, color, alpha);
217
+ canvas.setPixel32(x, y, newColor);
218
+ };
219
+ /**
220
+ * Additively blends a new pixel with an existing color value in a {@linkcode Canvas}.
221
+ *
222
+ * As this method is often called many times in render loops, only bounds
223
+ * checking is applied to the given coordinates.
224
+ *
225
+ * The coordinates are **expected to already be integers**. Supplying numbers with fractions
226
+ * has performance implications. Ensure you're working with integers, or truncate the
227
+ * coordinates before passing them in.
228
+ *
229
+ * The `alpha` value is expected to be an integer in the range from `0` to `255`.
230
+ * `0` meaning fully transparent, `255` meaning fully opaque.
231
+ * @param canvas The {@linkcode Canvas} to interact with.
232
+ * @param x The X coordinate at which to place the pixel.
233
+ * @param y The Y coordinate at which to place the pixel.
234
+ * @param color The color of the pixel.
235
+ * @param alpha The alpha value to use to blend the pixel with existing color at the location.
236
+ * @group Graphics
237
+ */
238
+ export const putPixel32Add = (canvas, x, y, color, alpha) => {
239
+ if (canvas.width < x || x < 0 || canvas.height < y || y < 0) {
240
+ return;
241
+ }
242
+ const srcColor = canvas.getPixel32(x, y);
243
+ const newColor = blendAdditive(srcColor, color, alpha);
244
+ canvas.setPixel32(x, y, newColor);
245
+ };
246
+ /**
247
+ * Subtractively blends a new pixel with an existing color value in a {@linkcode Canvas}.
248
+ *
249
+ * As this method is often called many times in render loops, only bounds
250
+ * checking is applied to the given coordinates.
251
+ *
252
+ * The coordinates are **expected to already be integers**. Supplying numbers with fractions
253
+ * has performance implications. Ensure you're working with integers, or truncate the
254
+ * coordinates before passing them in.
255
+ *
256
+ * The `alpha` value is expected to be an integer in the range from `0` to `255`.
257
+ * `0` meaning fully transparent, `255` meaning fully opaque.
258
+ * @param canvas The {@linkcode Canvas} to interact with.
259
+ * @param x The X coordinate at which to place the pixel.
260
+ * @param y The Y coordinate at which to place the pixel.
261
+ * @param color The color of the pixel.
262
+ * @param alpha The alpha value to use to blend the pixel with existing color at the location.
263
+ * @group Graphics
264
+ */
265
+ export const putPixel32Sub = (canvas, x, y, color, alpha) => {
266
+ if (canvas.width < x || x < 0 || canvas.height < y || y < 0) {
267
+ return;
268
+ }
269
+ const srcColor = canvas.getPixel32(x, y);
270
+ const newColor = blendSubtractive(srcColor, color, alpha);
271
+ canvas.setPixel32(x, y, newColor);
272
+ };
273
+ /**
274
+ * Linearly blends a new pixel with an existing color value in a {@linkcode Canvas}.
275
+ * Compared to {@linkcode putPixel32}, this function supports sub-pixel placement, but is dramatically slower.
276
+ * @param canvas The {@linkcode Canvas} to interact with.
277
+ * @param x The X coordinate at which to place the pixel.
278
+ * @param y The Y coordinate at which to place the pixel.
279
+ * @param color The color of the pixel.
280
+ * @param alpha The alpha value to use to blend the pixel with existing color at the location.
281
+ * @group Graphics
282
+ */
283
+ export const putSubPixel32 = (canvas, x, y, color, alpha) => {
284
+ if (canvas.width < x || x < 0 || canvas.height < y || y < 0) {
285
+ return;
286
+ }
287
+ const xweight = x - Math.trunc(x);
288
+ const yweight = y - Math.trunc(y);
289
+ const xweightn = 1 - xweight;
290
+ const yweightn = 1 - yweight;
291
+ const alpha0 = xweightn * yweightn * alpha;
292
+ const alpha1 = xweight * yweightn * alpha;
293
+ const alpha2 = xweightn * yweight * alpha;
294
+ const alpha3 = xweight * yweight * alpha;
295
+ putPixel32(canvas, x + 0, y + 0, color, alpha0);
296
+ putPixel32(canvas, x + 1, y + 0, color, alpha1);
297
+ putPixel32(canvas, x + 0, y + 1, color, alpha2);
298
+ putPixel32(canvas, x + 1, y + 1, color, alpha3);
299
+ };
300
+ //# sourceMappingURL=canvas%20copy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvas copy.js","sourceRoot":"","sources":["../../source/graphics/canvas copy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ /// <reference types="@types/web" />
2
+ import { CanvasOptions } from "./canvas.js";
3
+ /**
4
+ * The {@linkcode Canvas} is a double-buffered construct to help with drawing to a
5
+ * {@linkcode !HTMLCanvasElement} with best possible performance.
6
+ * We utilize an {@linkcode !OffscreenCanvas} with a {@linkcode !OffscreenCanvasRenderingContext2D}
7
+ * to draw frames and expect to render them back to the DOM in regular intervals.
8
+ * @group Graphics
9
+ */
10
+ export declare class CanvasWorker {
11
+ #private;
12
+ /**
13
+ * The {@linkcode !HTMLCanvasElement} we're interacting with in the DOM.
14
+ */
15
+ readonly canvasDom: HTMLCanvasElement | undefined;
16
+ /**
17
+ * The width of the canvas.
18
+ */
19
+ readonly width: number;
20
+ /**
21
+ * The height of the canvas.
22
+ */
23
+ readonly height: number;
24
+ /**
25
+ * The {@linkcode !OffscreenCanvasRenderingContext2D} we're using to draw to the canvas.
26
+ */
27
+ readonly context: OffscreenCanvasRenderingContext2D | undefined;
28
+ /**
29
+ * Our back buffer.
30
+ */
31
+ buffer: Uint8ClampedArray | undefined;
32
+ worker: Worker;
33
+ /**
34
+ * The configuration that was used for this canvas.
35
+ */
36
+ readonly options: Readonly<Partial<CanvasOptions>>;
37
+ /**
38
+ * Constructs a new {@linkcode Canvas}.
39
+ * @param canvas The canvas to wrap.
40
+ * @param worker
41
+ * @param options The configuration for this canvas.
42
+ */
43
+ constructor(canvas: HTMLCanvasElement, worker: Worker, options?: Partial<CanvasOptions>);
44
+ /**
45
+ * Draws the back buffer onto the canvas.
46
+ */
47
+ update(delta: number, timestamp: number): void;
48
+ render(): void;
49
+ clearWith(color: number): void;
50
+ }
@@ -0,0 +1,78 @@
1
+ /**
2
+ * The {@linkcode Canvas} is a double-buffered construct to help with drawing to a
3
+ * {@linkcode !HTMLCanvasElement} with best possible performance.
4
+ * We utilize an {@linkcode !OffscreenCanvas} with a {@linkcode !OffscreenCanvasRenderingContext2D}
5
+ * to draw frames and expect to render them back to the DOM in regular intervals.
6
+ * @group Graphics
7
+ */
8
+ export class CanvasWorker {
9
+ /**
10
+ * The {@linkcode !HTMLCanvasElement} we're interacting with in the DOM.
11
+ */
12
+ canvasDom;
13
+ /**
14
+ * The rendering context for the canvas located in the DOM.
15
+ */
16
+ //#canvasDomContext: ImageBitmapRenderingContext;
17
+ /**
18
+ * The offscreen canvas we use for rendering.
19
+ */
20
+ #canvasOffscreen;
21
+ /**
22
+ * The width of the canvas.
23
+ */
24
+ width;
25
+ /**
26
+ * The height of the canvas.
27
+ */
28
+ height;
29
+ /**
30
+ * The {@linkcode !OffscreenCanvasRenderingContext2D} we're using to draw to the canvas.
31
+ */
32
+ context;
33
+ /**
34
+ * The {@linkcode !ImageData} object in our offscreen canvas. We usually interact with its
35
+ * {@linkcode Canvas.buffer buffer} directly.
36
+ */
37
+ #imageData;
38
+ /**
39
+ * Our back buffer.
40
+ */
41
+ buffer;
42
+ worker;
43
+ /**
44
+ * The configuration that was used for this canvas.
45
+ */
46
+ options;
47
+ /**
48
+ * Constructs a new {@linkcode Canvas}.
49
+ * @param canvas The canvas to wrap.
50
+ * @param worker
51
+ * @param options The configuration for this canvas.
52
+ */
53
+ constructor(canvas, worker, options) {
54
+ this.width = canvas.width;
55
+ this.height = canvas.height;
56
+ this.options = options ?? {};
57
+ this.canvasDom = canvas;
58
+ //this.#canvasDomContext = mustExist(
59
+ // this.canvasDom.getContext("bitmaprenderer", {
60
+ // alpha: false,
61
+ // }),
62
+ // "Unable to create rendering context for DOM canvas.",
63
+ //);
64
+ this.#canvasOffscreen = this.canvasDom.transferControlToOffscreen();
65
+ //this.context.font = "12px sans-serif";
66
+ this.worker = worker;
67
+ this.worker.postMessage({ id: "init", canvas: this.#canvasOffscreen }, [this.#canvasOffscreen]);
68
+ }
69
+ /**
70
+ * Draws the back buffer onto the canvas.
71
+ */
72
+ update(delta, timestamp) {
73
+ this.worker.postMessage({ id: "draw", delta, timestamp });
74
+ }
75
+ render() { }
76
+ clearWith(color) { }
77
+ }
78
+ //# sourceMappingURL=canvas-worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvas-worker.js","sourceRoot":"","sources":["../../source/graphics/canvas-worker.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,MAAM,OAAO,YAAY;IACvB;;OAEG;IACM,SAAS,CAAgC;IAElD;;OAEG;IACH,iDAAiD;IAEjD;;OAEG;IACH,gBAAgB,CAAkB;IAElC;;OAEG;IACM,KAAK,CAAS;IAEvB;;OAEG;IACM,MAAM,CAAS;IAExB;;OAEG;IACM,OAAO,CAAgD;IAEhE;;;OAGG;IACH,UAAU,CAAwB;IAElC;;OAEG;IACH,MAAM,CAAgC;IAEtC,MAAM,CAAS;IAEf;;OAEG;IACM,OAAO,CAAmC;IAEnD;;;;;OAKG;IACH,YAAY,MAAyB,EAAE,MAAc,EAAE,OAAgC;QACrF,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC1B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC5B,IAAI,CAAC,OAAO,GAAG,OAAO,IAAI,EAAE,CAAC;QAE7B,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC;QACxB,qCAAqC;QACrC,iDAAiD;QACjD,mBAAmB;QACnB,OAAO;QACP,yDAAyD;QACzD,IAAI;QAEJ,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC,0BAA0B,EAAE,CAAC;QAEpE,wCAAwC;QAExC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,gBAAgB,EAAE,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAClG,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAa,EAAE,SAAiB;QACrC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IAC5D,CAAC;IAED,MAAM,KAAG,CAAC;IAEV,SAAS,CAAC,KAAY,IAAE,CAAC;CAC1B"}
@@ -46,11 +46,9 @@ export declare class Canvas {
46
46
  /**
47
47
  * Constructs a new {@linkcode Canvas}.
48
48
  * @param canvas The canvas to wrap.
49
- * @param width The width of the canvas.
50
- * @param height The height of the canvas.
51
49
  * @param options The configuration for this canvas.
52
50
  */
53
- constructor(canvas: HTMLCanvasElement, width: number, height: number, options?: Partial<CanvasOptions>);
51
+ constructor(canvas: HTMLCanvasElement, options?: Partial<CanvasOptions>);
54
52
  /**
55
53
  * Draws the back buffer onto the canvas.
56
54
  */
@@ -49,13 +49,11 @@ export class Canvas {
49
49
  /**
50
50
  * Constructs a new {@linkcode Canvas}.
51
51
  * @param canvas The canvas to wrap.
52
- * @param width The width of the canvas.
53
- * @param height The height of the canvas.
54
52
  * @param options The configuration for this canvas.
55
53
  */
56
- constructor(canvas, width, height, options = {}) {
57
- this.width = width;
58
- this.height = height;
54
+ constructor(canvas, options = {}) {
55
+ this.width = canvas.width;
56
+ this.height = canvas.height;
59
57
  this.options = options;
60
58
  this.canvasDom = canvas;
61
59
  this.#canvasDomContext = mustExist(this.canvasDom.getContext("bitmaprenderer", {
@@ -67,7 +65,7 @@ export class Canvas {
67
65
  desynchronized: true,
68
66
  willReadFrequently: this.options.supportReadBack,
69
67
  }), "Unable to create rendering context for offscreen canvas.");
70
- this.#imageData = this.context.createImageData(width, height);
68
+ this.#imageData = this.context.createImageData(this.width, this.height);
71
69
  this.buffer = this.#imageData.data;
72
70
  this.context.font = "12px sans-serif";
73
71
  }
@@ -1 +1 @@
1
- {"version":3,"file":"canvas.js","sourceRoot":"","sources":["../../source/graphics/canvas.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"canvas.js","sourceRoot":"","sources":["../../source/graphics/canvas.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,9 @@
1
1
  import { Canvas } from "./canvas.js";
2
+ /**
3
+ * The amount of milliseconds your can spend in a frame, if you want to
4
+ * reach a frame rate of 60 FPS.
5
+ */
6
+ export declare const MS_PER_FRAME_60FPS: number;
2
7
  /**
3
8
  * The signature of a function that is called to draw a frame.
4
9
  * @group Graphics
@@ -46,11 +51,6 @@ export declare class RenderLoop {
46
51
  * The time at which we rendered the last frame to the DOM.
47
52
  */
48
53
  private previousTimestampRender;
49
- /**
50
- * Our `#main` function bound to this classes
51
- * for easier invokation through external callers.
52
- */
53
- private readonly boundMain;
54
54
  /**
55
55
  * The ID of our {@linkcode https://developer.mozilla.org/en-US/docs/Web/API/window/requestAnimationFrame requestAnimationFrame} request.
56
56
  */
@@ -1,3 +1,8 @@
1
+ /**
2
+ * The amount of milliseconds your can spend in a frame, if you want to
3
+ * reach a frame rate of 60 FPS.
4
+ */
5
+ export const MS_PER_FRAME_60FPS = /* __PURE __ */ 1000 / 60;
1
6
  /**
2
7
  * Conveniently provides a way to have a render loop called at
3
8
  * a constant frame rate.
@@ -28,7 +33,12 @@ export class RenderLoop {
28
33
  * Our `#main` function bound to this classes
29
34
  * for easier invokation through external callers.
30
35
  */
31
- boundMain;
36
+ #boundMain;
37
+ /**
38
+ * Our `#drawFrame` function bound to this classes
39
+ * for easier invokation through external callers.
40
+ */
41
+ #boundDrawFrame;
32
42
  /**
33
43
  * The ID of our {@linkcode https://developer.mozilla.org/en-US/docs/Web/API/window/requestAnimationFrame requestAnimationFrame} request.
34
44
  */
@@ -61,7 +71,8 @@ export class RenderLoop {
61
71
  this.renderLoop = renderLoop;
62
72
  this.previousTimestampDraw = new Date().getTime();
63
73
  this.previousTimestampRender = this.previousTimestampDraw;
64
- this.boundMain = this.#main.bind(this);
74
+ this.#boundMain = this.#main.bind(this);
75
+ this.#boundDrawFrame = this.#drawFrame.bind(this);
65
76
  }
66
77
  /**
67
78
  * Stop the render loop.
@@ -80,11 +91,9 @@ export class RenderLoop {
80
91
  * Start the render loop.
81
92
  */
82
93
  unblock() {
83
- this.frameRequestId = window.requestAnimationFrame(this.boundMain);
94
+ this.frameRequestId = window.requestAnimationFrame(this.#boundMain);
84
95
  if (!this.drawTimeout) {
85
- this.drawTimeout = setTimeout(() => {
86
- this.#drawFrame();
87
- });
96
+ this.drawTimeout = setTimeout(this.#boundDrawFrame);
88
97
  }
89
98
  }
90
99
  /**
@@ -108,10 +117,9 @@ export class RenderLoop {
108
117
  const timestamp = new Date().getTime();
109
118
  const timeDelta = timestamp - this.previousTimestampDraw;
110
119
  this.renderLoop(timeDelta, timestamp);
120
+ const frameTime = new Date().getTime() - timestamp;
121
+ this.drawTimeout = setTimeout(this.#boundDrawFrame, Math.max(0, MS_PER_FRAME_60FPS - frameTime));
111
122
  this.previousTimestampDraw = timestamp;
112
- this.drawTimeout = setTimeout(() => {
113
- this.#drawFrame();
114
- });
115
123
  }
116
124
  /**
117
125
  * Draw a new frame.
@@ -1 +1 @@
1
- {"version":3,"file":"render-loop.js","sourceRoot":"","sources":["../../source/graphics/render-loop.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"render-loop.js","sourceRoot":"","sources":["../../source/graphics/render-loop.ts"],"names":[],"mappings":"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"}
@@ -173,6 +173,12 @@ export declare class Vector2 {
173
173
  * @returns The components of this vector as an array.
174
174
  */
175
175
  asArray(): [number, number];
176
+ /**
177
+ * Creates a copy of another {@linkcode Vector2}.
178
+ * @param vector The vector to copy.
179
+ * @returns A new vector.
180
+ */
181
+ static fromVector2(vector: Readonly<Vector2>): Vector2;
176
182
  }
177
183
  /**
178
184
  * Adds two vectors and returns a new vector with the result.
@@ -272,6 +272,14 @@ export class Vector2 {
272
272
  asArray() {
273
273
  return [this.x, this.y];
274
274
  }
275
+ /**
276
+ * Creates a copy of another {@linkcode Vector2}.
277
+ * @param vector The vector to copy.
278
+ * @returns A new vector.
279
+ */
280
+ static fromVector2(vector) {
281
+ return new Vector2(vector.x, vector.y);
282
+ }
275
283
  }
276
284
  /**
277
285
  * Adds two vectors and returns a new vector with the result.