@debuffjp/core 0.13.2 → 0.14.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.
- package/dist/game.d.ts +1 -0
- package/dist/game.d.ts.map +1 -1
- package/dist/game.js +28 -5
- package/dist/game.js.map +1 -1
- package/dist/hooks.d.ts +11 -1
- package/dist/hooks.d.ts.map +1 -1
- package/dist/hooks.js +14 -1
- package/dist/hooks.js.map +1 -1
- package/dist/testing.d.ts +16 -0
- package/dist/testing.d.ts.map +1 -0
- package/dist/testing.js +26 -0
- package/dist/testing.js.map +1 -0
- package/package.json +6 -2
- package/dist/render/backend.d.ts +0 -48
- package/dist/render/backend.d.ts.map +0 -1
- package/dist/render/backend.js +0 -2
- package/dist/render/backend.js.map +0 -1
- package/dist/render/bitmap-font.d.ts +0 -55
- package/dist/render/bitmap-font.d.ts.map +0 -1
- package/dist/render/bitmap-font.js +0 -103
- package/dist/render/bitmap-font.js.map +0 -1
- package/dist/render/canvas2d.d.ts +0 -30
- package/dist/render/canvas2d.d.ts.map +0 -1
- package/dist/render/canvas2d.js +0 -128
- package/dist/render/canvas2d.js.map +0 -1
- package/dist/render/color.d.ts +0 -7
- package/dist/render/color.d.ts.map +0 -1
- package/dist/render/color.js +0 -49
- package/dist/render/color.js.map +0 -1
- package/dist/render/draw.d.ts +0 -125
- package/dist/render/draw.d.ts.map +0 -1
- package/dist/render/draw.js +0 -426
- package/dist/render/draw.js.map +0 -1
- package/dist/render/webgl2.d.ts +0 -46
- package/dist/render/webgl2.d.ts.map +0 -1
- package/dist/render/webgl2.js +0 -312
- package/dist/render/webgl2.js.map +0 -1
package/dist/render/canvas2d.js
DELETED
|
@@ -1,128 +0,0 @@
|
|
|
1
|
-
import { rgbaToCss } from "./color.js";
|
|
2
|
-
/**
|
|
3
|
-
* Canvas 2D fallback for the `draw` API. Same output for solid shapes, sprites, text and alpha.
|
|
4
|
-
* Canvas 2D has no per-draw tint, so tinted textures (text, bitmap fonts, `tint`) go through a scratch
|
|
5
|
-
* canvas: slower than WebGL2, but only when a tint other than white is asked for.
|
|
6
|
-
*/
|
|
7
|
-
export class Canvas2DBackend {
|
|
8
|
-
kind = "2d";
|
|
9
|
-
raw;
|
|
10
|
-
ctx;
|
|
11
|
-
scale = 1;
|
|
12
|
-
smoothing;
|
|
13
|
-
scratch;
|
|
14
|
-
clipped = false;
|
|
15
|
-
blendMode = "normal";
|
|
16
|
-
constructor(ctx) {
|
|
17
|
-
this.ctx = ctx;
|
|
18
|
-
this.raw = { kind: "2d", ctx };
|
|
19
|
-
}
|
|
20
|
-
begin(clear, width, height, scale) {
|
|
21
|
-
this.scale = scale;
|
|
22
|
-
const ctx = this.ctx;
|
|
23
|
-
ctx.setTransform(scale, 0, 0, scale, 0, 0);
|
|
24
|
-
ctx.globalAlpha = 1;
|
|
25
|
-
ctx.globalCompositeOperation = "source-over";
|
|
26
|
-
ctx.fillStyle = rgbaToCss(clear);
|
|
27
|
-
ctx.fillRect(0, 0, width, height);
|
|
28
|
-
}
|
|
29
|
-
quad(m, src, sx, sy, sw, sh, color, flash, smooth) {
|
|
30
|
-
const ctx = this.ctx;
|
|
31
|
-
const s = this.scale;
|
|
32
|
-
ctx.setTransform(m[0] * s, m[1] * s, m[2] * s, m[3] * s, m[4] * s, m[5] * s);
|
|
33
|
-
if (!src) {
|
|
34
|
-
ctx.globalAlpha = 1;
|
|
35
|
-
ctx.fillStyle = rgbaToCss(color);
|
|
36
|
-
ctx.fillRect(0, 0, 1, 1);
|
|
37
|
-
return;
|
|
38
|
-
}
|
|
39
|
-
if (this.smoothing !== smooth) {
|
|
40
|
-
ctx.imageSmoothingEnabled = smooth;
|
|
41
|
-
this.smoothing = smooth;
|
|
42
|
-
}
|
|
43
|
-
ctx.globalAlpha = (color & 0xff) / 255;
|
|
44
|
-
if (color >>> 8 === 0xffffff)
|
|
45
|
-
ctx.drawImage(src, sx, sy, sw, sh, 0, 0, 1, 1);
|
|
46
|
-
else
|
|
47
|
-
ctx.drawImage(this.tinted(src, sx, sy, sw, sh, color), 0, 0, sw, sh, 0, 0, 1, 1);
|
|
48
|
-
if (flash > 0) {
|
|
49
|
-
ctx.globalAlpha *= Math.min(1, flash);
|
|
50
|
-
ctx.drawImage(this.whiteSilhouette(src, sx, sy, sw, sh), 0, 0, sw, sh, 0, 0, 1, 1);
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
setBlend(mode) {
|
|
54
|
-
this.blendMode = mode;
|
|
55
|
-
this.ctx.globalCompositeOperation = mode === "add" ? "lighter" : "source-over";
|
|
56
|
-
}
|
|
57
|
-
setClip(rect) {
|
|
58
|
-
const ctx = this.ctx;
|
|
59
|
-
// Canvas clips only shrink, so each change restores to the unclipped state first.
|
|
60
|
-
if (this.clipped) {
|
|
61
|
-
ctx.restore();
|
|
62
|
-
this.clipped = false;
|
|
63
|
-
this.setBlend(this.blendMode);
|
|
64
|
-
}
|
|
65
|
-
if (!rect)
|
|
66
|
-
return;
|
|
67
|
-
ctx.save();
|
|
68
|
-
ctx.setTransform(1, 0, 0, 1, 0, 0);
|
|
69
|
-
ctx.beginPath();
|
|
70
|
-
ctx.rect(rect.x, rect.y, rect.w, rect.h);
|
|
71
|
-
ctx.clip();
|
|
72
|
-
this.clipped = true;
|
|
73
|
-
}
|
|
74
|
-
end() {
|
|
75
|
-
this.setClip(null);
|
|
76
|
-
this.ctx.setTransform(1, 0, 0, 1, 0, 0);
|
|
77
|
-
this.ctx.globalAlpha = 1;
|
|
78
|
-
}
|
|
79
|
-
resize() {
|
|
80
|
-
// Canvas resize resets context state; it's reapplied in begin().
|
|
81
|
-
this.smoothing = undefined;
|
|
82
|
-
}
|
|
83
|
-
invalidate() {
|
|
84
|
-
// Canvas 2D reads sources directly; nothing is cached.
|
|
85
|
-
}
|
|
86
|
-
dispose() { }
|
|
87
|
-
/** The source region multiplied by `color`'s RGB, keeping the source's alpha. */
|
|
88
|
-
tinted(src, x, y, w, h, color) {
|
|
89
|
-
const scratch = this.scratchCanvas(w, h);
|
|
90
|
-
const sctx = scratch.getContext("2d");
|
|
91
|
-
if (!sctx)
|
|
92
|
-
return scratch;
|
|
93
|
-
sctx.clearRect(0, 0, w, h);
|
|
94
|
-
sctx.globalCompositeOperation = "source-over";
|
|
95
|
-
sctx.drawImage(src, x, y, w, h, 0, 0, w, h);
|
|
96
|
-
sctx.globalCompositeOperation = "multiply";
|
|
97
|
-
sctx.fillStyle = rgbaToCss(color | 0xff);
|
|
98
|
-
sctx.fillRect(0, 0, w, h);
|
|
99
|
-
// multiply filled the transparent pixels too; cut back to the source's shape.
|
|
100
|
-
sctx.globalCompositeOperation = "destination-in";
|
|
101
|
-
sctx.drawImage(src, x, y, w, h, 0, 0, w, h);
|
|
102
|
-
sctx.globalCompositeOperation = "source-over";
|
|
103
|
-
return scratch;
|
|
104
|
-
}
|
|
105
|
-
scratchCanvas(w, h) {
|
|
106
|
-
if (!this.scratch)
|
|
107
|
-
this.scratch = typeof OffscreenCanvas !== "undefined" ? new OffscreenCanvas(w, h) : document.createElement("canvas");
|
|
108
|
-
if (this.scratch.width < w)
|
|
109
|
-
this.scratch.width = w;
|
|
110
|
-
if (this.scratch.height < h)
|
|
111
|
-
this.scratch.height = h;
|
|
112
|
-
return this.scratch;
|
|
113
|
-
}
|
|
114
|
-
whiteSilhouette(src, x, y, w, h) {
|
|
115
|
-
const scratch = this.scratchCanvas(w, h);
|
|
116
|
-
const sctx = scratch.getContext("2d");
|
|
117
|
-
if (!sctx)
|
|
118
|
-
return scratch;
|
|
119
|
-
sctx.clearRect(0, 0, w, h);
|
|
120
|
-
sctx.globalCompositeOperation = "source-over";
|
|
121
|
-
sctx.drawImage(src, x, y, w, h, 0, 0, w, h);
|
|
122
|
-
sctx.globalCompositeOperation = "source-in";
|
|
123
|
-
sctx.fillStyle = "#fff";
|
|
124
|
-
sctx.fillRect(0, 0, w, h);
|
|
125
|
-
return scratch;
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
//# sourceMappingURL=canvas2d.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"canvas2d.js","sourceRoot":"","sources":["../../src/render/canvas2d.ts"],"names":[],"mappings":"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"}
|
package/dist/render/color.d.ts
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
/** A colour: CSS hex string (`#rgb`, `#rgba`, `#rrggbb`, `#rrggbbaa`) or a number `0xRRGGBBAA`. */
|
|
2
|
-
export type Color = string | number;
|
|
3
|
-
/** Normalise a colour to `0xRRGGBBAA` (unsigned). Hex strings are cached; other CSS colours resolve through the browser. */
|
|
4
|
-
export declare function toRGBA(color: Color): number;
|
|
5
|
-
/** `0xRRGGBBAA` to a CSS colour string. */
|
|
6
|
-
export declare function rgbaToCss(rgba: number, alphaScale?: number): string;
|
|
7
|
-
//# sourceMappingURL=color.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"color.d.ts","sourceRoot":"","sources":["../../src/render/color.ts"],"names":[],"mappings":"AAAA,mGAAmG;AACnG,MAAM,MAAM,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;AAIpC,4HAA4H;AAC5H,wBAAgB,MAAM,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAQ3C;AA8BD,2CAA2C;AAC3C,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,SAAI,GAAG,MAAM,CAG9D"}
|
package/dist/render/color.js
DELETED
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
const cache = new Map();
|
|
2
|
-
/** Normalise a colour to `0xRRGGBBAA` (unsigned). Hex strings are cached; other CSS colours resolve through the browser. */
|
|
3
|
-
export function toRGBA(color) {
|
|
4
|
-
if (typeof color === "number")
|
|
5
|
-
return color >>> 0;
|
|
6
|
-
const hit = cache.get(color);
|
|
7
|
-
if (hit !== undefined)
|
|
8
|
-
return hit;
|
|
9
|
-
const value = parse(color);
|
|
10
|
-
if (cache.size > 512)
|
|
11
|
-
cache.clear();
|
|
12
|
-
cache.set(color, value);
|
|
13
|
-
return value;
|
|
14
|
-
}
|
|
15
|
-
function parse(input) {
|
|
16
|
-
let hex = input.trim();
|
|
17
|
-
if (hex.startsWith("#")) {
|
|
18
|
-
hex = hex.slice(1);
|
|
19
|
-
if (hex.length === 3 || hex.length === 4)
|
|
20
|
-
hex = [...hex].map((c) => c + c).join("");
|
|
21
|
-
if (hex.length === 6)
|
|
22
|
-
hex += "ff";
|
|
23
|
-
if (hex.length === 8 && /^[0-9a-f]{8}$/i.test(hex))
|
|
24
|
-
return Number.parseInt(hex, 16) >>> 0;
|
|
25
|
-
}
|
|
26
|
-
return parseCss(input);
|
|
27
|
-
}
|
|
28
|
-
let probe;
|
|
29
|
-
/** Any other CSS colour (named, rgb(), hsl()…): let the browser resolve it once. */
|
|
30
|
-
function parseCss(input) {
|
|
31
|
-
if (probe === undefined) {
|
|
32
|
-
const canvas = typeof OffscreenCanvas !== "undefined" ? new OffscreenCanvas(1, 1) : document.createElement("canvas");
|
|
33
|
-
probe = canvas.getContext("2d", { willReadFrequently: true });
|
|
34
|
-
}
|
|
35
|
-
if (!probe)
|
|
36
|
-
throw new Error(`Cannot parse colour "${input}" without a 2D canvas; use hex`);
|
|
37
|
-
probe.clearRect(0, 0, 1, 1);
|
|
38
|
-
probe.fillStyle = "#000";
|
|
39
|
-
probe.fillStyle = input;
|
|
40
|
-
probe.fillRect(0, 0, 1, 1);
|
|
41
|
-
const [r = 0, g = 0, b = 0, a = 0] = probe.getImageData(0, 0, 1, 1).data;
|
|
42
|
-
return ((r << 24) | (g << 16) | (b << 8) | a) >>> 0;
|
|
43
|
-
}
|
|
44
|
-
/** `0xRRGGBBAA` to a CSS colour string. */
|
|
45
|
-
export function rgbaToCss(rgba, alphaScale = 1) {
|
|
46
|
-
const a = ((rgba & 0xff) / 255) * alphaScale;
|
|
47
|
-
return `rgba(${rgba >>> 24},${(rgba >>> 16) & 0xff},${(rgba >>> 8) & 0xff},${a})`;
|
|
48
|
-
}
|
|
49
|
-
//# sourceMappingURL=color.js.map
|
package/dist/render/color.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"color.js","sourceRoot":"","sources":["../../src/render/color.ts"],"names":[],"mappings":"AAGA,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;AAExC,4HAA4H;AAC5H,MAAM,UAAU,MAAM,CAAC,KAAY;IACjC,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,KAAK,CAAC,CAAC;IAClD,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC7B,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,GAAG,CAAC;IAClC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;IAC3B,IAAI,KAAK,CAAC,IAAI,GAAG,GAAG;QAAE,KAAK,CAAC,KAAK,EAAE,CAAC;IACpC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACxB,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,KAAK,CAAC,KAAa;IAC1B,IAAI,GAAG,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IACvB,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACnB,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;YAAE,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACpF,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;YAAE,GAAG,IAAI,IAAI,CAAC;QAClC,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC;YAAE,OAAO,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;IAC5F,CAAC;IACD,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC;AACzB,CAAC;AAGD,IAAI,KAA+B,CAAC;AACpC,oFAAoF;AACpF,SAAS,QAAQ,CAAC,KAAa;IAC7B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,MAAM,MAAM,GAAG,OAAO,eAAe,KAAK,WAAW,CAAC,CAAC,CAAC,IAAI,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QACrH,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAiB,CAAC;IAChF,CAAC;IACD,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,KAAK,gCAAgC,CAAC,CAAC;IAC3F,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5B,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC;IACzB,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC;IACxB,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3B,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACzE,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;AACtD,CAAC;AAED,2CAA2C;AAC3C,MAAM,UAAU,SAAS,CAAC,IAAY,EAAE,UAAU,GAAG,CAAC;IACpD,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,UAAU,CAAC;IAC7C,OAAO,QAAQ,IAAI,KAAK,EAAE,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC;AACpF,CAAC"}
|
package/dist/render/draw.d.ts
DELETED
|
@@ -1,125 +0,0 @@
|
|
|
1
|
-
import type { Backend, BlendMode, Matrix, RawContext, TextureSource } from "./backend.js";
|
|
2
|
-
import type { BitmapFont } from "./bitmap-font.js";
|
|
3
|
-
import { type Color } from "./color.js";
|
|
4
|
-
/** A rectangular region of an image, in source pixels. */
|
|
5
|
-
export interface Frame {
|
|
6
|
-
image: TextureSource;
|
|
7
|
-
x: number;
|
|
8
|
-
y: number;
|
|
9
|
-
w: number;
|
|
10
|
-
h: number;
|
|
11
|
-
}
|
|
12
|
-
export interface SpriteDrawOptions {
|
|
13
|
-
/** Anchor as a fraction of the frame size. Default [0.5, 0.5] (centre). */
|
|
14
|
-
origin?: readonly [number, number];
|
|
15
|
-
scaleX?: number;
|
|
16
|
-
scaleY?: number;
|
|
17
|
-
/** Radians. */
|
|
18
|
-
rotation?: number;
|
|
19
|
-
flipX?: boolean;
|
|
20
|
-
flipY?: boolean;
|
|
21
|
-
/** Multiplied with the global alpha. */
|
|
22
|
-
alpha?: number;
|
|
23
|
-
/** Colour multiplier. Default white. */
|
|
24
|
-
tint?: Color;
|
|
25
|
-
/** 0..1 mix toward white, e.g. hit flashes. */
|
|
26
|
-
flash?: number;
|
|
27
|
-
/** Linear filtering for this sprite. Default: the game's setting (off when `pixelArt`). */
|
|
28
|
-
smooth?: boolean;
|
|
29
|
-
}
|
|
30
|
-
export interface TextDrawOptions {
|
|
31
|
-
/** A `BitmapFont`, or a CSS font such as "16px monospace". Default: debuff sans, the built-in pixel font. */
|
|
32
|
-
font?: string | BitmapFont | undefined;
|
|
33
|
-
color?: Color;
|
|
34
|
-
align?: "left" | "center" | "right";
|
|
35
|
-
baseline?: "top" | "middle" | "bottom";
|
|
36
|
-
alpha?: number;
|
|
37
|
-
}
|
|
38
|
-
/**
|
|
39
|
-
* Immediate-mode drawing in logical units, the same API on WebGL2 and Canvas 2D (ADR 0007).
|
|
40
|
-
* Everything batches automatically; call order is draw order.
|
|
41
|
-
*/
|
|
42
|
-
export declare class Draw {
|
|
43
|
-
private backend;
|
|
44
|
-
/** Default filtering for images (false for pixel art). */
|
|
45
|
-
smooth: boolean;
|
|
46
|
-
/** Global alpha multiplier for subsequent draws. */
|
|
47
|
-
alpha: number;
|
|
48
|
-
/** Quads (sprites, rects, glyph runs…) submitted this frame. Reset each frame; for diagnostics. */
|
|
49
|
-
quads: number;
|
|
50
|
-
/** Preallocated transform stack: push/pop copy six numbers and never allocate. */
|
|
51
|
-
private readonly stack;
|
|
52
|
-
private depth;
|
|
53
|
-
private readonly m;
|
|
54
|
-
private readonly frames;
|
|
55
|
-
private readonly clips;
|
|
56
|
-
private readonly tmp;
|
|
57
|
-
private readonly textCache;
|
|
58
|
-
private circleTexture;
|
|
59
|
-
private backingW;
|
|
60
|
-
private backingH;
|
|
61
|
-
/** @internal */
|
|
62
|
-
constructor(backend: Backend,
|
|
63
|
-
/** Default filtering for images (false for pixel art). */
|
|
64
|
-
smooth: boolean);
|
|
65
|
-
/** Which backend is active. */
|
|
66
|
-
get kind(): "webgl2" | "2d";
|
|
67
|
-
/** Draw calls this frame: batched GPU calls on WebGL2, one per quad on Canvas 2D. */
|
|
68
|
-
get drawCalls(): number;
|
|
69
|
-
/** Raw `WebGL2RenderingContext` or `CanvasRenderingContext2D`. Mixing raw calls with `draw` calls requires care. */
|
|
70
|
-
get raw(): RawContext;
|
|
71
|
-
push(): void;
|
|
72
|
-
pop(): void;
|
|
73
|
-
translate(x: number, y: number): void;
|
|
74
|
-
scale(x: number, y?: number): void;
|
|
75
|
-
rotate(radians: number): void;
|
|
76
|
-
/**
|
|
77
|
-
* Run `fn` with drawing restricted to a rectangle (in current units), then restore. Nested clips
|
|
78
|
-
* intersect. Clips are axis-aligned on screen: under rotation the rectangle's screen bounds are used.
|
|
79
|
-
*/
|
|
80
|
-
clip(x: number, y: number, w: number, h: number, fn: () => void): void;
|
|
81
|
-
/** Run `fn` with the camera's view applied, then restore. */
|
|
82
|
-
withCamera(camera: {
|
|
83
|
-
view(): Matrix;
|
|
84
|
-
}, fn: () => void): void;
|
|
85
|
-
blend(mode: BlendMode): void;
|
|
86
|
-
rect(x: number, y: number, w: number, h: number, color: Color): void;
|
|
87
|
-
/** Filled circle (antialiased). */
|
|
88
|
-
circle(x: number, y: number, radius: number, color: Color): void;
|
|
89
|
-
line(x1: number, y1: number, x2: number, y2: number, width: number, color: Color): void;
|
|
90
|
-
/** Draw an image frame (or a whole image) at `x, y`, anchored by `origin`. Allocation-free hot path. */
|
|
91
|
-
sprite(frame: Frame | TextureSource, x: number, y: number, o?: SpriteDrawOptions): void;
|
|
92
|
-
/** Text, rasterised once and cached as a texture (crisp at the current render scale). */
|
|
93
|
-
text(text: string, x: number, y: number, o?: TextDrawOptions): void;
|
|
94
|
-
/**
|
|
95
|
-
* The logical box `text()` fills for this string and font, so layouts can align and centre without
|
|
96
|
-
* guessing. Same cache as `text()`, so measuring then drawing rasterises once.
|
|
97
|
-
*/
|
|
98
|
-
measure(text: string, font?: string | BitmapFont): {
|
|
99
|
-
w: number;
|
|
100
|
-
h: number;
|
|
101
|
-
};
|
|
102
|
-
private bitmapText;
|
|
103
|
-
/** Re-upload a source whose pixels changed (e.g. a canvas you draw into). */
|
|
104
|
-
invalidate(src: TextureSource): void;
|
|
105
|
-
/** @internal */
|
|
106
|
-
renderScale: number;
|
|
107
|
-
/** @internal */
|
|
108
|
-
begin(clear: Color, width: number, height: number, scale: number): void;
|
|
109
|
-
/** @internal Reset transform and blend between scene and afterRender hooks. */
|
|
110
|
-
reset(): void;
|
|
111
|
-
/** @internal */
|
|
112
|
-
end(): void;
|
|
113
|
-
/** @internal Release GPU resources and listeners. */
|
|
114
|
-
dispose(): void;
|
|
115
|
-
/** @internal */
|
|
116
|
-
resize(w: number, h: number): void;
|
|
117
|
-
/** @internal Switch to a backend that finished loading (the Canvas 2D fallback), at the current size. */
|
|
118
|
-
setBackend(backend: Backend): void;
|
|
119
|
-
/** tmp = current matrix × (translate(x, y) · scale(w, h)): maps the unit square to the rect. */
|
|
120
|
-
private local;
|
|
121
|
-
private wholeImage;
|
|
122
|
-
private withAlpha;
|
|
123
|
-
private circle64;
|
|
124
|
-
}
|
|
125
|
-
//# sourceMappingURL=draw.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"draw.d.ts","sourceRoot":"","sources":["../../src/render/draw.ts"],"names":[],"mappings":"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"}
|