@oliversalzburg/js-utils 0.0.10 → 0.0.11
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.
- package/_site/assets/navigation.js +1 -1
- package/_site/assets/search.js +1 -1
- package/_site/classes/AbstractError.html +5 -5
- package/_site/classes/Canvas.html +36 -25
- package/_site/classes/InternalError.html +6 -6
- package/_site/classes/InvalidArgumentError.html +5 -5
- package/_site/classes/InvalidOperationError.html +5 -5
- package/_site/classes/NotImplementedError.html +5 -5
- package/_site/classes/PermissionViolationError.html +5 -5
- package/_site/classes/Random.html +12 -12
- package/_site/classes/RenderLoop.html +31 -18
- package/_site/classes/ResourceConflictError.html +5 -5
- package/_site/classes/UnexpectedNilError.html +3 -3
- package/_site/classes/UnknownError.html +5 -5
- package/_site/classes/Vector2.html +32 -29
- package/_site/classes/Vector3.html +8 -8
- package/_site/functions/addVector2.html +1 -1
- package/_site/functions/blend.html +1 -1
- package/_site/functions/blendAdditive.html +1 -1
- package/_site/functions/blendSubtractive.html +1 -1
- package/_site/functions/clamp.html +6 -0
- package/_site/functions/cosDeg.html +1 -1
- package/_site/functions/deg2rad.html +1 -1
- package/_site/functions/difference.html +1 -1
- package/_site/functions/distance.html +1 -1
- package/_site/functions/errorToJSON.html +1 -1
- package/_site/functions/errorToRecord.html +1 -1
- package/_site/functions/errorToSimpleSerializable.html +1 -1
- package/_site/functions/filterType.html +1 -1
- package/_site/functions/formatString.html +1 -1
- package/_site/functions/formatStringTemplate.html +1 -1
- package/_site/functions/fromRGB.html +1 -1
- package/_site/functions/fromRGBA.html +1 -1
- package/_site/functions/getA.html +1 -1
- package/_site/functions/getB.html +1 -1
- package/_site/functions/getDocumentElementTypeById.html +1 -1
- package/_site/functions/getG.html +1 -1
- package/_site/functions/getR.html +1 -1
- package/_site/functions/intersect.html +1 -1
- package/_site/functions/is.html +1 -1
- package/_site/functions/isError.html +1 -1
- package/_site/functions/isInteger.html +1 -1
- package/_site/functions/isNil.html +1 -1
- package/_site/functions/isqrt.html +1 -1
- package/_site/functions/multiplyVector2.html +1 -1
- package/_site/functions/mustExist.html +1 -1
- package/_site/functions/nextPalette.html +1 -1
- package/_site/functions/putPixel32.html +8 -1
- package/_site/functions/putPixel32Add.html +8 -1
- package/_site/functions/putPixel32Sub.html +8 -1
- package/_site/functions/putSubPixel32.html +1 -1
- package/_site/functions/rad2deg.html +1 -1
- package/_site/functions/randomRange.html +1 -1
- package/_site/functions/safeRGBComponent.html +1 -1
- package/_site/functions/seedFromString.html +1 -1
- package/_site/functions/shuffleArray.html +1 -1
- package/_site/functions/sinDeg.html +1 -1
- package/_site/functions/sleep.html +1 -1
- package/_site/functions/somecolor.html +1 -1
- package/_site/functions/subtractVector2.html +1 -1
- package/_site/functions/toGrayScale.html +1 -1
- package/_site/functions/unknownToError.html +1 -1
- package/_site/index.html +5 -1
- package/_site/interfaces/CanvasOptions.html +5 -0
- package/_site/interfaces/RenderLoopOptions.html +7 -0
- package/_site/modules.html +5 -2
- package/_site/types/AnyConstructor.html +1 -1
- package/_site/types/AnyFunction.html +1 -1
- package/_site/types/ConstructorOf.html +1 -1
- package/_site/types/FunctionReturning.html +1 -1
- package/_site/types/Maybe.html +1 -1
- package/_site/types/Mixin.html +1 -1
- package/_site/types/Nil.html +1 -1
- package/_site/types/RenderLoopCallback.html +1 -1
- package/_site/types/SerializedError.html +1 -1
- package/_site/variables/PALETTES.html +1 -1
- package/_site/variables/TWO_PI.html +1 -1
- package/_site/variables/random-1.html +1 -1
- package/lib/array.js +1 -1
- package/lib/core.d.ts +8 -0
- package/lib/core.js +10 -1
- package/lib/core.js.map +1 -1
- package/lib/dom/core.d.ts +1 -0
- package/lib/graphics/canvas.d.ts +38 -6
- package/lib/graphics/canvas.js +62 -31
- package/lib/graphics/canvas.js.map +1 -1
- package/lib/graphics/render-loop.d.ts +17 -3
- package/lib/graphics/render-loop.js +57 -17
- package/lib/graphics/render-loop.js.map +1 -1
- package/package.json +3 -3
package/lib/graphics/canvas.js
CHANGED
|
@@ -32,10 +32,10 @@ export class Canvas {
|
|
|
32
32
|
*/
|
|
33
33
|
context;
|
|
34
34
|
/**
|
|
35
|
-
* The {@linkcode !ImageData} object
|
|
36
|
-
*
|
|
35
|
+
* The {@linkcode !ImageData} object in our offscreen canvas. We usually interact with its
|
|
36
|
+
* {@linkcode Canvas.buffer buffer} directly.
|
|
37
37
|
*/
|
|
38
|
-
|
|
38
|
+
#imageData;
|
|
39
39
|
/**
|
|
40
40
|
* Our back buffer.
|
|
41
41
|
*/
|
|
@@ -56,22 +56,24 @@ export class Canvas {
|
|
|
56
56
|
this.height = height;
|
|
57
57
|
this.options = options;
|
|
58
58
|
this.canvasDom = canvas;
|
|
59
|
-
this.#canvasDomContext = mustExist(this.canvasDom.getContext("bitmaprenderer"
|
|
59
|
+
this.#canvasDomContext = mustExist(this.canvasDom.getContext("bitmaprenderer", {
|
|
60
|
+
alpha: false,
|
|
61
|
+
}), "Unable to create rendering context for DOM canvas.");
|
|
60
62
|
this.#canvasOffscreen = new OffscreenCanvas(this.width, this.height);
|
|
61
63
|
this.context = mustExist(this.#canvasOffscreen.getContext("2d", {
|
|
62
64
|
alpha: false,
|
|
63
65
|
desynchronized: true,
|
|
64
66
|
willReadFrequently: this.options.supportReadBack,
|
|
65
67
|
}), "Unable to create rendering context for offscreen canvas.");
|
|
66
|
-
this
|
|
67
|
-
this.buffer = this.
|
|
68
|
+
this.#imageData = this.context.createImageData(width, height);
|
|
69
|
+
this.buffer = this.#imageData.data;
|
|
68
70
|
this.context.font = "12px sans-serif";
|
|
69
71
|
}
|
|
70
72
|
/**
|
|
71
73
|
* Draws the back buffer onto the canvas.
|
|
72
74
|
*/
|
|
73
75
|
update() {
|
|
74
|
-
this.context.putImageData(this
|
|
76
|
+
this.context.putImageData(this.#imageData, 0, 0);
|
|
75
77
|
}
|
|
76
78
|
/**
|
|
77
79
|
* Draws the offscreen canvas into the DOM canvas.
|
|
@@ -83,12 +85,11 @@ export class Canvas {
|
|
|
83
85
|
/**
|
|
84
86
|
* Draws a slightly transparent, black rectangle over the canvas,
|
|
85
87
|
* and then reads the result back into the buffer.
|
|
88
|
+
* @param amount How much the screen should be faded to black. `0` is
|
|
89
|
+
* not at all, `255` makes it instantly black.
|
|
86
90
|
*/
|
|
87
|
-
fade() {
|
|
88
|
-
this.
|
|
89
|
-
this.context.rect(0, 0, this.width, this.height);
|
|
90
|
-
this.context.fill();
|
|
91
|
-
this.bufferReadBack();
|
|
91
|
+
fade(amount = 1) {
|
|
92
|
+
this.blendWith(fromRGBA(0, 0, 0, amount));
|
|
92
93
|
}
|
|
93
94
|
/**
|
|
94
95
|
* Reads the front buffer back into the back buffer.
|
|
@@ -97,8 +98,8 @@ export class Canvas {
|
|
|
97
98
|
if (!this.options.supportReadBack) {
|
|
98
99
|
throw new InvalidOperationError("To use `bufferReadBack()`, you must construct the `Canvas` with `options.supportReadBack` set to `true`.");
|
|
99
100
|
}
|
|
100
|
-
this
|
|
101
|
-
this.buffer = this.
|
|
101
|
+
this.#imageData = this.context.getImageData(0, 0, this.width, this.height);
|
|
102
|
+
this.buffer = this.#imageData.data;
|
|
102
103
|
}
|
|
103
104
|
/**
|
|
104
105
|
* Returns the color of a pixel in the back buffer.
|
|
@@ -107,7 +108,7 @@ export class Canvas {
|
|
|
107
108
|
* @returns The color of the pixel at the given local.
|
|
108
109
|
*/
|
|
109
110
|
getPixel32(x, y) {
|
|
110
|
-
const bufferOffset =
|
|
111
|
+
const bufferOffset = (x + y * this.width) * 4;
|
|
111
112
|
return fromRGBA(this.buffer[bufferOffset + 0], this.buffer[bufferOffset + 1], this.buffer[bufferOffset + 2], this.buffer[bufferOffset + 3]);
|
|
112
113
|
}
|
|
113
114
|
/**
|
|
@@ -117,7 +118,7 @@ export class Canvas {
|
|
|
117
118
|
* @param color The color to place at the coordinate.
|
|
118
119
|
*/
|
|
119
120
|
setPixel32(x, y, color) {
|
|
120
|
-
const bufferOffset =
|
|
121
|
+
const bufferOffset = (x + y * this.width) * 4;
|
|
121
122
|
this.buffer[bufferOffset + 0] = getR(color);
|
|
122
123
|
this.buffer[bufferOffset + 1] = getG(color);
|
|
123
124
|
this.buffer[bufferOffset + 2] = getB(color);
|
|
@@ -139,9 +140,34 @@ export class Canvas {
|
|
|
139
140
|
this.buffer[bufferOffset + 3] = a;
|
|
140
141
|
}
|
|
141
142
|
}
|
|
143
|
+
/**
|
|
144
|
+
* Fills the entire back buffer with the given color.
|
|
145
|
+
* @param color The color to fill the back buffer with.
|
|
146
|
+
*/
|
|
147
|
+
blendWith(color) {
|
|
148
|
+
const r = getR(color);
|
|
149
|
+
const g = getG(color);
|
|
150
|
+
const b = getB(color);
|
|
151
|
+
const a = getA(color);
|
|
152
|
+
for (let bufferOffset = 0; bufferOffset < this.width * this.height * 4; bufferOffset += 4) {
|
|
153
|
+
this.buffer[bufferOffset + 0] = (a * r + (255 - a) * this.buffer[bufferOffset + 0]) >> 8;
|
|
154
|
+
this.buffer[bufferOffset + 1] = (a * g + (255 - a) * this.buffer[bufferOffset + 1]) >> 8;
|
|
155
|
+
this.buffer[bufferOffset + 2] = (a * b + (255 - a) * this.buffer[bufferOffset + 2]) >> 8;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
142
158
|
}
|
|
143
159
|
/**
|
|
144
160
|
* Linearly blends a new pixel with an existing color value in a {@linkcode Canvas}.
|
|
161
|
+
*
|
|
162
|
+
* As this method is often called many times in render loops, only bounds
|
|
163
|
+
* checking is applied to the given coordinates.
|
|
164
|
+
*
|
|
165
|
+
* The coordinates are **expected to already be integers**. Supplying numbers with fractions
|
|
166
|
+
* has performance implications. Ensure you're working with integers, or truncate the
|
|
167
|
+
* coordinates before passing them in.
|
|
168
|
+
*
|
|
169
|
+
* The `alpha` value is expected to be an integer in the range from `0` to `255`.
|
|
170
|
+
* `0` meaning fully transparent, `255` meaning fully opaque.
|
|
145
171
|
* @param canvas The {@linkcode Canvas} to interact with.
|
|
146
172
|
* @param x The X coordinate at which to place the pixel.
|
|
147
173
|
* @param y The Y coordinate at which to place the pixel.
|
|
@@ -153,17 +179,22 @@ export const putPixel32 = (canvas, x, y, color, alpha) => {
|
|
|
153
179
|
if (canvas.width < x || x < 0 || canvas.height < y || y < 0) {
|
|
154
180
|
return;
|
|
155
181
|
}
|
|
156
|
-
x = Math.trunc(x);
|
|
157
|
-
y = Math.trunc(y);
|
|
158
|
-
if (alpha > 255) {
|
|
159
|
-
alpha = 255;
|
|
160
|
-
}
|
|
161
182
|
const srcColor = canvas.getPixel32(x, y);
|
|
162
183
|
const newColor = blend(srcColor, color, alpha);
|
|
163
184
|
canvas.setPixel32(x, y, newColor);
|
|
164
185
|
};
|
|
165
186
|
/**
|
|
166
187
|
* Additively blends a new pixel with an existing color value in a {@linkcode Canvas}.
|
|
188
|
+
*
|
|
189
|
+
* As this method is often called many times in render loops, only bounds
|
|
190
|
+
* checking is applied to the given coordinates.
|
|
191
|
+
*
|
|
192
|
+
* The coordinates are **expected to already be integers**. Supplying numbers with fractions
|
|
193
|
+
* has performance implications. Ensure you're working with integers, or truncate the
|
|
194
|
+
* coordinates before passing them in.
|
|
195
|
+
*
|
|
196
|
+
* The `alpha` value is expected to be an integer in the range from `0` to `255`.
|
|
197
|
+
* `0` meaning fully transparent, `255` meaning fully opaque.
|
|
167
198
|
* @param canvas The {@linkcode Canvas} to interact with.
|
|
168
199
|
* @param x The X coordinate at which to place the pixel.
|
|
169
200
|
* @param y The Y coordinate at which to place the pixel.
|
|
@@ -175,17 +206,22 @@ export const putPixel32Add = (canvas, x, y, color, alpha) => {
|
|
|
175
206
|
if (canvas.width < x || x < 0 || canvas.height < y || y < 0) {
|
|
176
207
|
return;
|
|
177
208
|
}
|
|
178
|
-
x = Math.round(x);
|
|
179
|
-
y = Math.round(y);
|
|
180
|
-
if (alpha > 255) {
|
|
181
|
-
alpha = 255;
|
|
182
|
-
}
|
|
183
209
|
const srcColor = canvas.getPixel32(x, y);
|
|
184
210
|
const newColor = blendAdditive(srcColor, color, alpha);
|
|
185
211
|
canvas.setPixel32(x, y, newColor);
|
|
186
212
|
};
|
|
187
213
|
/**
|
|
188
214
|
* Subtractively blends a new pixel with an existing color value in a {@linkcode Canvas}.
|
|
215
|
+
*
|
|
216
|
+
* As this method is often called many times in render loops, only bounds
|
|
217
|
+
* checking is applied to the given coordinates.
|
|
218
|
+
*
|
|
219
|
+
* The coordinates are **expected to already be integers**. Supplying numbers with fractions
|
|
220
|
+
* has performance implications. Ensure you're working with integers, or truncate the
|
|
221
|
+
* coordinates before passing them in.
|
|
222
|
+
*
|
|
223
|
+
* The `alpha` value is expected to be an integer in the range from `0` to `255`.
|
|
224
|
+
* `0` meaning fully transparent, `255` meaning fully opaque.
|
|
189
225
|
* @param canvas The {@linkcode Canvas} to interact with.
|
|
190
226
|
* @param x The X coordinate at which to place the pixel.
|
|
191
227
|
* @param y The Y coordinate at which to place the pixel.
|
|
@@ -197,11 +233,6 @@ export const putPixel32Sub = (canvas, x, y, color, alpha) => {
|
|
|
197
233
|
if (canvas.width < x || x < 0 || canvas.height < y || y < 0) {
|
|
198
234
|
return;
|
|
199
235
|
}
|
|
200
|
-
x = Math.round(x);
|
|
201
|
-
y = Math.round(y);
|
|
202
|
-
if (alpha > 255) {
|
|
203
|
-
alpha = 255;
|
|
204
|
-
}
|
|
205
236
|
const srcColor = canvas.getPixel32(x, y);
|
|
206
237
|
const newColor = blendSubtractive(srcColor, color, alpha);
|
|
207
238
|
canvas.setPixel32(x, y, newColor);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canvas.js","sourceRoot":"","sources":["../../source/graphics/canvas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EACL,KAAK,EACL,aAAa,EACb,gBAAgB,EAChB,QAAQ,EACR,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,GACL,MAAM,WAAW,CAAC;AAcnB;;;;GAIG;AACH,MAAM,OAAO,MAAM;IACjB;;OAEG;IACM,SAAS,CAAoB;IAEtC;;OAEG;IACH,iBAAiB,CAA8B;IAE/C;;OAEG;IACH,gBAAgB,CAAkB;IAElC;;OAEG;IACM,KAAK,CAAS;IAEvB;;OAEG;IACM,MAAM,CAAS;IAExB;;OAEG;IACM,OAAO,CAAoC;IAEpD;;;OAGG;IACH,
|
|
1
|
+
{"version":3,"file":"canvas.js","sourceRoot":"","sources":["../../source/graphics/canvas.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,7 +17,7 @@ export interface RenderLoopOptions {
|
|
|
17
17
|
/**
|
|
18
18
|
* Should the buffer be cleared or faded to black before each frame?
|
|
19
19
|
*/
|
|
20
|
-
onRefresh: "clear"
|
|
20
|
+
onRefresh: "clear";
|
|
21
21
|
}
|
|
22
22
|
/**
|
|
23
23
|
* Conveniently provides a way to have a render loop called at
|
|
@@ -39,9 +39,13 @@ export declare class RenderLoop {
|
|
|
39
39
|
*/
|
|
40
40
|
readonly options: Readonly<Partial<RenderLoopOptions>>;
|
|
41
41
|
/**
|
|
42
|
-
* The
|
|
42
|
+
* The time at which we drew the last frame to the offscreen buffer.
|
|
43
43
|
*/
|
|
44
|
-
private
|
|
44
|
+
private previousTimestampDraw;
|
|
45
|
+
/**
|
|
46
|
+
* The time at which we rendered the last frame to the DOM.
|
|
47
|
+
*/
|
|
48
|
+
private previousTimestampRender;
|
|
45
49
|
/**
|
|
46
50
|
* Our `#main` function bound to this classes
|
|
47
51
|
* for easier invokation through external callers.
|
|
@@ -51,6 +55,16 @@ export declare class RenderLoop {
|
|
|
51
55
|
* The ID of our {@linkcode https://developer.mozilla.org/en-US/docs/Web/API/window/requestAnimationFrame requestAnimationFrame} request.
|
|
52
56
|
*/
|
|
53
57
|
private frameRequestId;
|
|
58
|
+
/**
|
|
59
|
+
* The ID of our {@linkcode https://developer.mozilla.org/en-US/docs/Web/API/setTimeout setTimeout}-based
|
|
60
|
+
* offscreen rendering loop.
|
|
61
|
+
*/
|
|
62
|
+
private drawTimeout;
|
|
63
|
+
/**
|
|
64
|
+
* Retrieves the amount of frames drawn to the DOM throughout the loops lifetime.
|
|
65
|
+
* @returns The frame count.
|
|
66
|
+
*/
|
|
67
|
+
get frameCounter(): number;
|
|
54
68
|
/**
|
|
55
69
|
* Constructs a new {@linkcode RenderLoop}.
|
|
56
70
|
* @param renderLoop The function to call when a new frame should be drawn.
|
|
@@ -17,9 +17,13 @@ export class RenderLoop {
|
|
|
17
17
|
*/
|
|
18
18
|
options;
|
|
19
19
|
/**
|
|
20
|
-
* The
|
|
20
|
+
* The time at which we drew the last frame to the offscreen buffer.
|
|
21
21
|
*/
|
|
22
|
-
|
|
22
|
+
previousTimestampDraw;
|
|
23
|
+
/**
|
|
24
|
+
* The time at which we rendered the last frame to the DOM.
|
|
25
|
+
*/
|
|
26
|
+
previousTimestampRender;
|
|
23
27
|
/**
|
|
24
28
|
* Our `#main` function bound to this classes
|
|
25
29
|
* for easier invokation through external callers.
|
|
@@ -29,6 +33,22 @@ export class RenderLoop {
|
|
|
29
33
|
* The ID of our {@linkcode https://developer.mozilla.org/en-US/docs/Web/API/window/requestAnimationFrame requestAnimationFrame} request.
|
|
30
34
|
*/
|
|
31
35
|
frameRequestId = null;
|
|
36
|
+
/**
|
|
37
|
+
* The ID of our {@linkcode https://developer.mozilla.org/en-US/docs/Web/API/setTimeout setTimeout}-based
|
|
38
|
+
* offscreen rendering loop.
|
|
39
|
+
*/
|
|
40
|
+
drawTimeout = null;
|
|
41
|
+
/**
|
|
42
|
+
* How many frames we've drawn to the DOM throughout the loops lifetime.
|
|
43
|
+
*/
|
|
44
|
+
#frameCounter = 0;
|
|
45
|
+
/**
|
|
46
|
+
* Retrieves the amount of frames drawn to the DOM throughout the loops lifetime.
|
|
47
|
+
* @returns The frame count.
|
|
48
|
+
*/
|
|
49
|
+
get frameCounter() {
|
|
50
|
+
return this.#frameCounter;
|
|
51
|
+
}
|
|
32
52
|
/**
|
|
33
53
|
* Constructs a new {@linkcode RenderLoop}.
|
|
34
54
|
* @param renderLoop The function to call when a new frame should be drawn.
|
|
@@ -39,46 +59,66 @@ export class RenderLoop {
|
|
|
39
59
|
this.canvas = canvas;
|
|
40
60
|
this.options = options;
|
|
41
61
|
this.renderLoop = renderLoop;
|
|
42
|
-
this.
|
|
62
|
+
this.previousTimestampDraw = 0;
|
|
63
|
+
this.previousTimestampRender = 0;
|
|
43
64
|
this.boundMain = this.#main.bind(this);
|
|
44
65
|
}
|
|
45
66
|
/**
|
|
46
67
|
* Stop the render loop.
|
|
47
68
|
*/
|
|
48
69
|
block() {
|
|
49
|
-
if (this.frameRequestId
|
|
50
|
-
|
|
70
|
+
if (this.frameRequestId !== null) {
|
|
71
|
+
window.cancelAnimationFrame(this.frameRequestId);
|
|
72
|
+
this.frameRequestId = null;
|
|
73
|
+
}
|
|
74
|
+
if (this.drawTimeout !== null) {
|
|
75
|
+
window.clearTimeout(this.drawTimeout);
|
|
76
|
+
this.drawTimeout = null;
|
|
51
77
|
}
|
|
52
|
-
window.cancelAnimationFrame(this.frameRequestId);
|
|
53
|
-
this.frameRequestId = null;
|
|
54
78
|
}
|
|
55
79
|
/**
|
|
56
80
|
* Start the render loop.
|
|
57
81
|
*/
|
|
58
82
|
unblock() {
|
|
59
83
|
this.frameRequestId = window.requestAnimationFrame(this.boundMain);
|
|
84
|
+
if (!this.drawTimeout) {
|
|
85
|
+
this.drawTimeout = setTimeout(() => {
|
|
86
|
+
this.#drawFrame();
|
|
87
|
+
});
|
|
88
|
+
}
|
|
60
89
|
}
|
|
61
90
|
/**
|
|
62
|
-
* Our main loop.
|
|
91
|
+
* Our main loop, as invoked through the frame request.
|
|
63
92
|
* @param timestamp The current timestamp.
|
|
64
93
|
*/
|
|
65
94
|
#main(timestamp) {
|
|
66
|
-
const timeDelta = timestamp - this.
|
|
67
|
-
this.#
|
|
95
|
+
const timeDelta = timestamp - this.previousTimestampRender;
|
|
96
|
+
this.#renderFrame(timeDelta);
|
|
68
97
|
this.unblock();
|
|
69
|
-
this.
|
|
98
|
+
this.previousTimestampRender = timestamp;
|
|
99
|
+
++this.#frameCounter;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Draws a new frame to the offscreen buffer.
|
|
103
|
+
*/
|
|
104
|
+
#drawFrame() {
|
|
105
|
+
if (this.frameRequestId === null) {
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
const timestamp = new Date().getTime();
|
|
109
|
+
const timeDelta = timestamp - this.previousTimestampDraw;
|
|
110
|
+
this.renderLoop(timeDelta, timestamp);
|
|
111
|
+
this.previousTimestampDraw = timestamp;
|
|
112
|
+
this.drawTimeout = setTimeout(() => {
|
|
113
|
+
this.#drawFrame();
|
|
114
|
+
});
|
|
70
115
|
}
|
|
71
116
|
/**
|
|
72
117
|
* Draw a new frame.
|
|
73
|
-
* @param timestamp The current timestamp.
|
|
74
118
|
* @param delta The delta to the timestamp of the previous frame.
|
|
75
119
|
*/
|
|
76
|
-
#
|
|
77
|
-
this.renderLoop(delta, timestamp);
|
|
120
|
+
#renderFrame(delta) {
|
|
78
121
|
this.canvas.update();
|
|
79
|
-
if (this.options.onRefresh === "fade") {
|
|
80
|
-
this.canvas.fade();
|
|
81
|
-
}
|
|
82
122
|
if (this.options.onRefresh === "clear") {
|
|
83
123
|
this.canvas.clearWith(0);
|
|
84
124
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render-loop.js","sourceRoot":"","sources":["../../source/graphics/render-loop.ts"],"names":[],"mappings":"AAyBA;;;;GAIG;AACH,MAAM,OAAO,UAAU;IACrB;;OAEG;IACM,MAAM,CAAS;IAExB;;OAEG;IACM,UAAU,CAAqB;IAExC;;OAEG;IACM,OAAO,CAAuC;IAEvD;;OAEG;IACK,
|
|
1
|
+
{"version":3,"file":"render-loop.js","sourceRoot":"","sources":["../../source/graphics/render-loop.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json.schemastore.org/package.json",
|
|
3
3
|
"name": "@oliversalzburg/js-utils",
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.0.11",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Oliver Salzburg <oliver.salzburg@gmail.com>",
|
|
7
7
|
"type": "module",
|
|
@@ -45,12 +45,12 @@
|
|
|
45
45
|
"chai-as-promised": "7.1.1",
|
|
46
46
|
"esbuild": "0.19.5",
|
|
47
47
|
"eslint": "8.53.0",
|
|
48
|
-
"eslint-plugin-jsdoc": "46.
|
|
48
|
+
"eslint-plugin-jsdoc": "46.9.0",
|
|
49
49
|
"lint-staged": "15.0.2",
|
|
50
50
|
"mocha": "10.2.0",
|
|
51
51
|
"prettier": "3.0.3",
|
|
52
52
|
"prettier-package-json": "2.8.0",
|
|
53
|
-
"prettier-plugin-organize-imports": "3.2.
|
|
53
|
+
"prettier-plugin-organize-imports": "3.2.4",
|
|
54
54
|
"typedoc": "0.25.3",
|
|
55
55
|
"typedoc-plugin-mdn-links": "3.1.0",
|
|
56
56
|
"typescript": "5.2.2"
|