like2d 2.3.0 → 2.5.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 +1 @@
1
- {"version":3,"file":"canvas-config.d.ts","sourceRoot":"","sources":["../../src/core/canvas-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE5C,MAAM,MAAM,YAAY,GACpB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,GACpD;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAC;AAEvB;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,CAKzG"}
1
+ {"version":3,"file":"canvas-config.d.ts","sourceRoot":"","sources":["../../src/core/canvas-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC,MAAM,MAAM,UAAU,GAAG;IACvB,eAAe,EAAE,OAAO,GAAG,IAAI,CAAC;IAChC,UAAU,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,eAAe,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACjC,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,CAKzG"}
@@ -1,4 +1,4 @@
1
- import type { CanvasConfig } from './canvas-config';
1
+ import type { CanvasMode, PartialCanvasMode } from './canvas-config';
2
2
  import { type Vector2 } from './vector2';
3
3
  export declare class CanvasManager {
4
4
  private canvas;
@@ -6,17 +6,16 @@ export declare class CanvasManager {
6
6
  private ctx;
7
7
  private config;
8
8
  private resizeObserver;
9
- private pixelArtCanvas;
10
- private pixelArtCtx;
9
+ private pixelCanvas;
10
+ private pixelCtx;
11
11
  private onWindowResize;
12
- private onFullscreenChange;
13
12
  onResize: ((size: Vector2, pixelSize: Vector2, fullscreen: boolean) => void) | null;
14
- constructor(canvas: HTMLCanvasElement, container: HTMLElement, ctx: CanvasRenderingContext2D, config?: CanvasConfig);
13
+ constructor(canvas: HTMLCanvasElement, container: HTMLElement, ctx: CanvasRenderingContext2D, config?: CanvasMode);
15
14
  private listenForPixelRatioChanges;
16
- setConfig(config: CanvasConfig): void;
17
- getConfig(): CanvasConfig;
15
+ setMode(mode: PartialCanvasMode): void;
16
+ getMode(): CanvasMode;
18
17
  private applyConfig;
19
- private applyFixedMode;
18
+ private applyPixelMode;
20
19
  private applyNativeMode;
21
20
  dispose(): void;
22
21
  present(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"canvas-manager.d.ts","sourceRoot":"","sources":["../../src/core/canvas-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAQ,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AAmB/C,qBAAa,aAAa;IAWtB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,GAAG;IACX,OAAO,CAAC,MAAM;IAbhB,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,cAAc,CAAkC;IACxD,OAAO,CAAC,WAAW,CAAyC;IAE5D,OAAO,CAAC,cAAc,CAA4B;IAClD,OAAO,CAAC,kBAAkB,CAA4B;IAE/C,QAAQ,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,KAAK,IAAI,CAAC,GAAG,IAAI,CAAQ;gBAGxF,MAAM,EAAE,iBAAiB,EACzB,SAAS,EAAE,WAAW,EACtB,GAAG,EAAE,wBAAwB,EAC7B,MAAM,GAAE,YAAiC;IAYnD,OAAO,CAAC,0BAA0B;IAQlC,SAAS,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI;IAKrC,SAAS,IAAI,YAAY;IAIzB,OAAO,CAAC,WAAW;IA+BnB,OAAO,CAAC,cAAc;IAiCtB,OAAO,CAAC,eAAe;IAkBvB,OAAO,IAAI,IAAI;IASf,OAAO,IAAI,IAAI;IAaf,gBAAgB,IAAI,iBAAiB;IAIrC,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO;CAiB5D"}
1
+ {"version":3,"file":"canvas-manager.d.ts","sourceRoot":"","sources":["../../src/core/canvas-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACrE,OAAO,EAAQ,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AAmB/C,qBAAa,aAAa;IAUtB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,GAAG;IACX,OAAO,CAAC,MAAM;IAZhB,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,WAAW,CAAkC;IACrD,OAAO,CAAC,QAAQ,CAAyC;IAEzD,OAAO,CAAC,cAAc,CAA4B;IAE3C,QAAQ,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,KAAK,IAAI,CAAC,GAAG,IAAI,CAAQ;gBAGxF,MAAM,EAAE,iBAAiB,EACzB,SAAS,EAAE,WAAW,EACtB,GAAG,EAAE,wBAAwB,EAC7B,MAAM,GAAE,UAAyD;IAW3E,OAAO,CAAC,0BAA0B;IAQlC,OAAO,CAAC,IAAI,EAAE,iBAAiB,GAAG,IAAI;IAKtC,OAAO,IAAI,UAAU;IAIrB,OAAO,CAAC,WAAW;IA2BnB,OAAO,CAAC,cAAc;IAwBtB,OAAO,CAAC,eAAe;IAkBvB,OAAO,IAAI,IAAI;IAQf,OAAO,IAAI,IAAI;IAaf,gBAAgB,IAAI,iBAAiB;IAIrC,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO;CAiB5D"}
@@ -14,7 +14,7 @@ function centerElement(el) {
14
14
  el.style.transform = 'translate(-50%, -50%)';
15
15
  }
16
16
  export class CanvasManager {
17
- constructor(canvas, container, ctx, config = { mode: 'native' }) {
17
+ constructor(canvas, container, ctx, config = { pixelResolution: null, fullscreen: false }) {
18
18
  Object.defineProperty(this, "canvas", {
19
19
  enumerable: true,
20
20
  configurable: true,
@@ -45,13 +45,13 @@ export class CanvasManager {
45
45
  writable: true,
46
46
  value: null
47
47
  });
48
- Object.defineProperty(this, "pixelArtCanvas", {
48
+ Object.defineProperty(this, "pixelCanvas", {
49
49
  enumerable: true,
50
50
  configurable: true,
51
51
  writable: true,
52
52
  value: null
53
53
  });
54
- Object.defineProperty(this, "pixelArtCtx", {
54
+ Object.defineProperty(this, "pixelCtx", {
55
55
  enumerable: true,
56
56
  configurable: true,
57
57
  writable: true,
@@ -63,12 +63,6 @@ export class CanvasManager {
63
63
  writable: true,
64
64
  value: () => this.applyConfig()
65
65
  });
66
- Object.defineProperty(this, "onFullscreenChange", {
67
- enumerable: true,
68
- configurable: true,
69
- writable: true,
70
- value: () => this.applyConfig()
71
- });
72
66
  Object.defineProperty(this, "onResize", {
73
67
  enumerable: true,
74
68
  configurable: true,
@@ -78,7 +72,6 @@ export class CanvasManager {
78
72
  this.resizeObserver = new ResizeObserver(() => this.applyConfig());
79
73
  this.resizeObserver.observe(this.container);
80
74
  window.addEventListener('resize', this.onWindowResize);
81
- document.addEventListener('fullscreenchange', this.onFullscreenChange);
82
75
  this.listenForPixelRatioChanges();
83
76
  this.applyConfig();
84
77
  }
@@ -89,63 +82,50 @@ export class CanvasManager {
89
82
  this.listenForPixelRatioChanges();
90
83
  }, { once: true });
91
84
  }
92
- setConfig(config) {
93
- this.config = config;
85
+ setMode(mode) {
86
+ this.config = { ...this.config, ...mode };
94
87
  this.applyConfig();
95
88
  }
96
- getConfig() {
89
+ getMode() {
97
90
  return { ...this.config };
98
91
  }
99
92
  applyConfig() {
100
93
  const containerSize = document.fullscreenElement
101
94
  ? [document.fullscreenElement.clientWidth, document.fullscreenElement.clientHeight]
102
95
  : [this.container.clientWidth, this.container.clientHeight];
103
- // Always clean up pixel art canvas first
104
- if (this.pixelArtCanvas) {
105
- this.pixelArtCanvas.remove();
106
- this.pixelArtCanvas = null;
107
- this.pixelArtCtx = null;
96
+ // Always clean up pixel canvas first
97
+ if (this.pixelCanvas) {
98
+ this.pixelCanvas.remove();
99
+ this.pixelCanvas = null;
100
+ this.pixelCtx = null;
101
+ }
102
+ if (this.config.pixelResolution) {
103
+ this.applyPixelMode(containerSize);
108
104
  }
109
- switch (this.config.mode) {
110
- case 'fixed':
111
- this.applyFixedMode(containerSize);
112
- break;
113
- case 'native':
114
- this.applyNativeMode(containerSize);
115
- break;
105
+ else {
106
+ this.applyNativeMode(containerSize);
116
107
  }
117
- const displayCanvas = this.pixelArtCanvas ?? this.canvas;
118
- const isFullscreen = !!document.fullscreenElement;
119
- this.onResize?.(containerSize, [displayCanvas.width, displayCanvas.height], isFullscreen);
108
+ const displayCanvas = this.pixelCanvas ?? this.canvas;
109
+ this.onResize?.(containerSize, [displayCanvas.width, displayCanvas.height], this.config.fullscreen);
120
110
  }
121
- applyFixedMode(csize) {
122
- const { size: gameSize, pixelArt } = this.config;
111
+ applyPixelMode(csize) {
112
+ const gameSize = this.config.pixelResolution;
123
113
  const pixelRatio = window.devicePixelRatio || 1;
124
114
  const scale = Math.min(csize[0] / gameSize[0], csize[1] / gameSize[1]);
125
- if (pixelArt) {
126
- const physicalScale = scale * pixelRatio;
127
- const intScale = Math.max(1, Math.floor(physicalScale));
128
- this.pixelArtCanvas = document.createElement('canvas');
129
- this.pixelArtCtx = this.pixelArtCanvas.getContext('2d');
130
- setCanvasSize(this.pixelArtCanvas, Vec2.mul(gameSize, intScale));
131
- setCanvasSize(this.canvas, gameSize);
132
- this.canvas.style.display = 'none';
133
- const pac = this.pixelArtCanvas;
134
- setCanvasDisplaySize(pac, Vec2.mul(gameSize, scale));
135
- pac.style.maxWidth = '100%';
136
- pac.style.maxHeight = '100%';
137
- pac.style.imageRendering = 'auto';
138
- centerElement(pac);
139
- this.container.appendChild(pac);
140
- }
141
- else {
142
- setCanvasSize(this.canvas, gameSize);
143
- this.canvas.style.display = 'block';
144
- setCanvasDisplaySize(this.canvas, Vec2.mul(gameSize, scale));
145
- this.canvas.style.imageRendering = pixelArt ? 'pixelated' : 'auto';
146
- this.ctx.imageSmoothingEnabled = !pixelArt;
147
- centerElement(this.canvas);
148
- }
115
+ const physicalScale = scale * pixelRatio;
116
+ const intScale = Math.max(1, Math.floor(physicalScale));
117
+ this.pixelCanvas = document.createElement('canvas');
118
+ this.pixelCtx = this.pixelCanvas.getContext('2d');
119
+ setCanvasSize(this.pixelCanvas, Vec2.mul(gameSize, intScale));
120
+ setCanvasSize(this.canvas, gameSize);
121
+ this.canvas.style.display = 'none';
122
+ const pc = this.pixelCanvas;
123
+ setCanvasDisplaySize(pc, Vec2.mul(gameSize, scale));
124
+ pc.style.maxWidth = '100%';
125
+ pc.style.maxHeight = '100%';
126
+ pc.style.imageRendering = 'auto';
127
+ centerElement(pc);
128
+ this.container.appendChild(pc);
149
129
  }
150
130
  applyNativeMode(csize) {
151
131
  const pixelRatio = window.devicePixelRatio || 1;
@@ -164,34 +144,35 @@ export class CanvasManager {
164
144
  dispose() {
165
145
  this.resizeObserver?.disconnect();
166
146
  window.removeEventListener('resize', this.onWindowResize);
167
- document.removeEventListener('fullscreenchange', this.onFullscreenChange);
168
- this.pixelArtCanvas?.remove();
169
- this.pixelArtCanvas = null;
170
- this.pixelArtCtx = null;
147
+ this.pixelCanvas?.remove();
148
+ this.pixelCanvas = null;
149
+ this.pixelCtx = null;
171
150
  }
172
151
  present() {
173
- if (!this.pixelArtCtx || !this.pixelArtCanvas) {
152
+ if (!this.pixelCtx || !this.pixelCanvas) {
174
153
  return;
175
154
  }
176
- this.pixelArtCtx.imageSmoothingEnabled = false;
177
- this.pixelArtCtx.drawImage(this.canvas, 0, 0, this.canvas.width, this.canvas.height, 0, 0, this.pixelArtCanvas.width, this.pixelArtCanvas.height);
155
+ this.pixelCtx.imageSmoothingEnabled = false;
156
+ this.pixelCtx.drawImage(this.canvas, 0, 0, this.canvas.width, this.canvas.height, 0, 0, this.pixelCanvas.width, this.pixelCanvas.height);
178
157
  }
179
158
  getDisplayCanvas() {
180
- return this.pixelArtCanvas ?? this.canvas;
159
+ return this.pixelCanvas ?? this.canvas;
181
160
  }
182
161
  transformMousePosition(cssX, cssY) {
183
162
  const displayCanvas = this.getDisplayCanvas();
184
163
  const rect = displayCanvas.getBoundingClientRect();
185
164
  const relative = [cssX - rect.left, cssY - rect.top];
186
- switch (this.config.mode) {
187
- case 'fixed': {
188
- const scale = [displayCanvas.width / rect.width, displayCanvas.height / rect.height];
189
- return Vec2.mul(relative, scale);
190
- }
191
- case 'native':
192
- default: {
193
- return Vec2.mul(relative, window.devicePixelRatio || 1);
194
- }
165
+ if (this.config.pixelResolution) {
166
+ // In pixel mode: CSS position (as fraction of CSS size) × game size = game position
167
+ const gameSize = this.config.pixelResolution;
168
+ return Vec2.mul(relative, [gameSize[0] / rect.width, gameSize[1] / rect.height]);
169
+ }
170
+ else {
171
+ // In native mode, canvas fills the container completely at position 0,0
172
+ // Mouse coordinates should be relative to the canvas, accounting for the fact
173
+ // that the canvas internal pixel size != CSS size
174
+ const pixelRatio = window.devicePixelRatio || 1;
175
+ return Vec2.mul(relative, pixelRatio);
195
176
  }
196
177
  }
197
178
  }
@@ -1,52 +1,24 @@
1
1
  import type { Vector2 } from './vector2';
2
- export type Like2DEvent = {
3
- type: 'load';
4
- args: [];
5
- timestamp: number;
6
- } | {
7
- type: 'update';
8
- args: [dt: number];
9
- timestamp: number;
10
- } | {
11
- type: 'draw';
12
- args: [canvas: HTMLCanvasElement];
13
- timestamp: number;
14
- } | {
15
- type: 'resize';
16
- args: [size: Vector2, pixelSize: Vector2, fullscreen: boolean];
17
- timestamp: number;
18
- } | {
19
- type: 'keypressed';
20
- args: [scancode: string, keycode: string];
21
- timestamp: number;
22
- } | {
23
- type: 'keyreleased';
24
- args: [scancode: string, keycode: string];
25
- timestamp: number;
26
- } | {
27
- type: 'mousepressed';
28
- args: [x: number, y: number, button: number];
29
- timestamp: number;
30
- } | {
31
- type: 'mousereleased';
32
- args: [x: number, y: number, button: number];
33
- timestamp: number;
34
- } | {
35
- type: 'gamepadpressed';
36
- args: [gamepadIndex: number, buttonIndex: number, buttonName: string];
37
- timestamp: number;
38
- } | {
39
- type: 'gamepadreleased';
40
- args: [gamepadIndex: number, buttonIndex: number, buttonName: string];
41
- timestamp: number;
42
- } | {
43
- type: 'actionpressed';
44
- args: [action: string];
45
- timestamp: number;
46
- } | {
47
- type: 'actionreleased';
48
- args: [action: string];
49
- timestamp: number;
2
+ export type EventMap = {
3
+ load: [];
4
+ update: [dt: number];
5
+ draw: [];
6
+ resize: [size: Vector2, pixelSize: Vector2, fullscreen: boolean];
7
+ keypressed: [scancode: string, keycode: string];
8
+ keyreleased: [scancode: string, keycode: string];
9
+ mousepressed: [x: number, y: number, button: number];
10
+ mousereleased: [x: number, y: number, button: number];
11
+ gamepadpressed: [gamepadIndex: number, buttonIndex: number, buttonName: string];
12
+ gamepadreleased: [gamepadIndex: number, buttonIndex: number, buttonName: string];
13
+ actionpressed: [action: string];
14
+ actionreleased: [action: string];
50
15
  };
51
- export type EventType = Like2DEvent['type'];
16
+ export type EventType = keyof EventMap;
17
+ export type Like2DEvent = {
18
+ [K in EventType]: {
19
+ type: K;
20
+ args: EventMap[K];
21
+ timestamp: number;
22
+ };
23
+ }[EventType];
52
24
  //# sourceMappingURL=events.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/core/events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,EAAE,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAC7C;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GACzD;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GACtE;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GACrG;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GACpF;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GACrF;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GACzF;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAC1F;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,IAAI,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GACpH;IAAE,IAAI,EAAE,iBAAiB,CAAC;IAAC,IAAI,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GACrH;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GACpE;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC;AAE1E,MAAM,MAAM,SAAS,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC"}
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/core/events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGzC,MAAM,MAAM,QAAQ,GAAG;IACrB,IAAI,EAAE,EAAE,CAAC;IACT,MAAM,EAAE,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IACrB,IAAI,EAAE,EAAE,CAAC;IACT,MAAM,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;IACjE,UAAU,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IAChD,WAAW,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IACjD,YAAY,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACrD,aAAa,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACtD,cAAc,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IAChF,eAAe,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IACjF,aAAa,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC;AAGvC,MAAM,MAAM,WAAW,GAAG;KACvB,CAAC,IAAI,SAAS,GAAG;QAAE,IAAI,EAAE,CAAC,CAAC;QAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE;CACpE,CAAC,SAAS,CAAC,CAAC"}
@@ -10,7 +10,6 @@ export type Canvas = {
10
10
  ctx: CanvasRenderingContext2D;
11
11
  };
12
12
  export type ShapeProps = {
13
- color?: Color;
14
13
  lineWidth?: number;
15
14
  lineCap?: 'butt' | 'round' | 'square';
16
15
  lineJoin?: 'bevel' | 'miter' | 'round';
@@ -27,6 +26,11 @@ export type PrintProps = {
27
26
  limit?: number;
28
27
  align?: 'left' | 'center' | 'right';
29
28
  };
29
+ export type GraphicsState = {
30
+ screenCtx: CanvasRenderingContext2D;
31
+ currentCtx: CanvasRenderingContext2D;
32
+ canvases: Map<Canvas, true>;
33
+ };
30
34
  export declare class ImageHandle {
31
35
  readonly path: string;
32
36
  private element;
@@ -38,37 +42,39 @@ export declare class ImageHandle {
38
42
  get size(): Vector2;
39
43
  getElement(): HTMLImageElement | null;
40
44
  }
41
- export declare class Graphics {
42
- private ctx;
43
- private readonly screenCtx;
44
- private canvases;
45
- private backgroundColor;
46
- private images;
47
- private defaultFont;
48
- constructor(ctx: CanvasRenderingContext2D);
49
- private applyColor;
50
- private setStrokeProps;
51
- clear(): void;
52
- setBackgroundColor(color: Color): void;
53
- rectangle(mode: DrawMode, color: Color, rect: Rect, props?: ShapeProps): void;
54
- circle(mode: DrawMode, color: Color, position: Vector2, radii: number | Vector2, props?: ShapeProps & {
45
+ export declare function newState(ctx: CanvasRenderingContext2D): GraphicsState;
46
+ export declare function clear(s: GraphicsState, color?: Color): void;
47
+ export declare function rectangle(s: GraphicsState, mode: DrawMode, color: Color, rect: Rect, props?: ShapeProps): void;
48
+ export declare function circle(s: GraphicsState, mode: DrawMode, color: Color, position: Vector2, radii: number | Vector2, props?: ShapeProps & {
49
+ angle?: number;
50
+ arc?: [number, number];
51
+ }): void;
52
+ export declare function line(s: GraphicsState, color: Color, points: Vector2[], props?: ShapeProps): void;
53
+ export declare function print(s: GraphicsState, color: Color, text: string, position: Vector2, props?: PrintProps): void;
54
+ export declare function drawImage(s: GraphicsState, handle: ImageHandle, position: Vector2, props?: DrawProps): void;
55
+ export declare function getCanvasSize(s: GraphicsState): Vector2;
56
+ export declare function newCanvas(s: GraphicsState, size: Vector2): Canvas;
57
+ export declare function setCanvas(s: GraphicsState, canvas?: Canvas | null): void;
58
+ export declare function clip(s: GraphicsState, rect?: Rect): void;
59
+ export declare function polygon(s: GraphicsState, mode: DrawMode, color: Color, points: Vector2[], props?: ShapeProps): void;
60
+ export declare function points(s: GraphicsState, color: Color, pts: Vector2[]): void;
61
+ export declare function newImage(path: string): ImageHandle;
62
+ export type BoundGraphics = {
63
+ clear: (color?: Color) => void;
64
+ rectangle: (mode: DrawMode, color: Color, rect: Rect, props?: ShapeProps) => void;
65
+ circle: (mode: DrawMode, color: Color, position: Vector2, radii: number | Vector2, props?: ShapeProps & {
55
66
  angle?: number;
56
67
  arc?: [number, number];
57
- }): void;
58
- line(color: Color, points: Vector2[], props?: ShapeProps): void;
59
- print(color: Color, text: string, position: Vector2, props?: PrintProps): void;
60
- private wrapText;
61
- private getFontHeight;
62
- setFont(size: number, font?: string): void;
63
- getFont(): string;
64
- newImage(path: string): ImageHandle;
65
- draw(handle: ImageHandle, position: Vector2, props?: DrawProps): void;
66
- getCanvasSize(): Vector2;
67
- newCanvas(size: Vector2): Canvas;
68
- setCanvas(canvas?: Canvas | null): void;
69
- clip(rect?: Rect): void;
70
- polygon(mode: DrawMode, color: Color, points: Vector2[], props?: ShapeProps): void;
71
- arc(mode: DrawMode, x: number, y: number, radius: number, angle1: number, angle2: number, props?: ShapeProps): void;
72
- points(color: Color, points: Vector2[]): void;
73
- }
68
+ }) => void;
69
+ line: (color: Color, points: Vector2[], props?: ShapeProps) => void;
70
+ print: (color: Color, text: string, position: Vector2, props?: PrintProps) => void;
71
+ draw: (handle: ImageHandle, position: Vector2, props?: DrawProps) => void;
72
+ getCanvasSize: () => Vector2;
73
+ newCanvas: (size: Vector2) => Canvas;
74
+ setCanvas: (canvas?: Canvas | null) => void;
75
+ clip: (rect?: Rect) => void;
76
+ polygon: (mode: DrawMode, color: Color, points: Vector2[], props?: ShapeProps) => void;
77
+ points: (color: Color, pts: Vector2[]) => void;
78
+ };
79
+ export declare function bindGraphics(s: GraphicsState): BoundGraphics;
74
80
  //# sourceMappingURL=graphics.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"graphics.d.ts","sourceRoot":"","sources":["../../src/core/graphics.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"graphics.d.ts","sourceRoot":"","sources":["../../src/core/graphics.ts"],"names":[],"mappings":"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"}