modern-canvas 0.4.8 → 0.4.10

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/index.cjs CHANGED
@@ -2237,14 +2237,12 @@ class MainLoop extends CoreObject {
2237
2237
  this.on("process", process);
2238
2238
  Ticker.on(this._onNextTick, { sort: 0 });
2239
2239
  }
2240
- return this;
2241
2240
  }
2242
2241
  stop() {
2243
2242
  if (this._starting) {
2244
2243
  this._starting = false;
2245
2244
  Ticker.off(this._onNextTick, { sort: 0 });
2246
2245
  }
2247
- return this;
2248
2246
  }
2249
2247
  _onNextTick() {
2250
2248
  const elapsed = Ticker.elapsed * this.speed;
@@ -5773,9 +5771,9 @@ exports.Node = class Node extends CoreObject {
5773
5771
  case "inherit":
5774
5772
  return this._parent?.canProcess() ?? true;
5775
5773
  case "pausable":
5776
- return !this._tree.paused;
5774
+ return !this._tree.processPaused;
5777
5775
  case "when_paused":
5778
- return this._tree.paused;
5776
+ return this._tree.processPaused;
5779
5777
  case "always":
5780
5778
  return true;
5781
5779
  case "disabled":
@@ -8352,15 +8350,16 @@ class SceneTree extends MainLoop {
8352
8350
  console.log(`[modern-canvas]`, ...args);
8353
8351
  }
8354
8352
  }
8355
- _render(renderer, delta = 0) {
8356
- this.timeline.addTime(delta);
8353
+ _process(delta = 0) {
8354
+ this.timeline.emit("process", delta);
8357
8355
  this.emit("processing");
8358
8356
  this.root.emit("process", delta);
8359
8357
  this.emit("processed");
8358
+ }
8359
+ _render(renderer) {
8360
8360
  renderer.program.uniforms.projectionMatrix = this.root.toProjectionArray(true);
8361
8361
  this.renderStack.render(renderer);
8362
8362
  this._renderScreen(renderer);
8363
- return this;
8364
8363
  }
8365
8364
  _renderScreen(renderer) {
8366
8365
  renderer.state.reset();
@@ -8393,7 +8392,7 @@ class SceneTree extends MainLoop {
8393
8392
  }
8394
8393
  __decorateClass$r([
8395
8394
  property({ default: false })
8396
- ], SceneTree.prototype, "paused");
8395
+ ], SceneTree.prototype, "processPaused");
8397
8396
  __decorateClass$r([
8398
8397
  property()
8399
8398
  ], SceneTree.prototype, "backgroundColor");
@@ -13191,13 +13190,20 @@ class Engine extends SceneTree {
13191
13190
  await assets.waitUntilLoad();
13192
13191
  await this.nextTick();
13193
13192
  }
13193
+ async waitAndRender(delta = 0) {
13194
+ this._process(delta);
13195
+ await this.waitUntilLoad();
13196
+ this._render(this.renderer);
13197
+ }
13194
13198
  render(delta = 0) {
13195
- return this._render(this.renderer, delta);
13199
+ this._process(delta);
13200
+ this._render(this.renderer);
13196
13201
  }
13197
- start() {
13198
- this.render();
13199
- return super.start((delta) => {
13200
- this.render(delta);
13202
+ async start() {
13203
+ await this.waitAndRender();
13204
+ super.start((delta) => {
13205
+ this._process(delta);
13206
+ this._render(this.renderer);
13201
13207
  });
13202
13208
  }
13203
13209
  free() {
@@ -13206,7 +13212,6 @@ class Engine extends SceneTree {
13206
13212
  this.renderer.free();
13207
13213
  }
13208
13214
  toPixels() {
13209
- this.render();
13210
13215
  return this.renderer.toPixels();
13211
13216
  }
13212
13217
  toImageData() {
@@ -13237,10 +13242,14 @@ class Engine extends SceneTree {
13237
13242
  }
13238
13243
 
13239
13244
  let engine;
13240
- let renderLoop;
13241
13245
  const queue = [];
13242
- async function startRenderLoop(sleep = 100) {
13243
- while (true) {
13246
+ let starting = false;
13247
+ async function start(sleep = 100) {
13248
+ if (starting) {
13249
+ return;
13250
+ }
13251
+ starting = true;
13252
+ while (queue.length) {
13244
13253
  const cb = queue.shift();
13245
13254
  if (cb) {
13246
13255
  try {
@@ -13252,28 +13261,29 @@ async function startRenderLoop(sleep = 100) {
13252
13261
  await new Promise((r) => setTimeout(r, sleep));
13253
13262
  }
13254
13263
  }
13264
+ starting = false;
13255
13265
  }
13256
- async function performRender(options) {
13266
+ async function task(options) {
13267
+ const { data, width, height, time = 0 } = options;
13257
13268
  engine ??= new Engine({ width: 1, height: 1 });
13258
- const root = engine.root;
13259
- root.removeChildren();
13260
- const { data, width, height } = options;
13269
+ engine.root.removeChildren();
13270
+ engine.timeline.currentTime = time;
13261
13271
  engine.resize(width, height);
13262
13272
  (Array.isArray(data) ? data : [data]).forEach((v) => {
13263
13273
  if (v instanceof exports.Node) {
13264
- root.appendChild(v);
13274
+ engine.root.appendChild(v);
13265
13275
  } else {
13266
- root.appendChild(exports.Node.parse(v));
13276
+ engine.root.appendChild(exports.Node.parse(v));
13267
13277
  }
13268
13278
  });
13269
- await engine.waitUntilLoad();
13270
13279
  await options.onBeforeRender?.(engine);
13280
+ await engine.waitAndRender();
13271
13281
  return engine.toCanvas2D();
13272
13282
  }
13273
13283
  async function render(options) {
13274
- renderLoop ??= startRenderLoop();
13275
13284
  return new Promise((r) => {
13276
- queue.push(async () => r(await performRender(options)));
13285
+ queue.push(async () => r(await task(options)));
13286
+ start();
13277
13287
  });
13278
13288
  }
13279
13289
 
package/dist/index.d.cts CHANGED
@@ -595,8 +595,8 @@ declare class MainLoop extends CoreObject {
595
595
  get starting(): boolean;
596
596
  get spf(): number;
597
597
  constructor();
598
- start(process: (delta: number) => void): this;
599
- stop(): this;
598
+ start(process: (delta: number) => void): void;
599
+ stop(): void;
600
600
  protected _onNextTick(): void;
601
601
  free(): void;
602
602
  }
@@ -1569,7 +1569,7 @@ interface SceneTree {
1569
1569
  emit: (<K extends keyof SceneTreeEventMap>(type: K, ...args: Parameters<SceneTreeEventMap[K]>) => boolean) & ((type: string, ...args: any[]) => boolean);
1570
1570
  }
1571
1571
  declare class SceneTree extends MainLoop {
1572
- paused: boolean;
1572
+ processPaused: boolean;
1573
1573
  backgroundColor?: ColorValue;
1574
1574
  debug: boolean;
1575
1575
  readonly input: Input;
@@ -1583,7 +1583,8 @@ declare class SceneTree extends MainLoop {
1583
1583
  constructor(timeline?: Timeline);
1584
1584
  protected _updateProperty(key: PropertyKey, value: any, oldValue: any, declaration?: PropertyDeclaration): void;
1585
1585
  log(...args: any[]): void;
1586
- protected _render(renderer: WebGLRenderer, delta?: number): this;
1586
+ protected _process(delta?: number): void;
1587
+ protected _render(renderer: WebGLRenderer): void;
1587
1588
  protected _renderScreen(renderer: WebGLRenderer): void;
1588
1589
  free(): void;
1589
1590
  }
@@ -3042,8 +3043,9 @@ declare class Engine extends SceneTree {
3042
3043
  resize(width: number, height: number, updateCss?: boolean): this;
3043
3044
  nextTick(): Promise<void>;
3044
3045
  waitUntilLoad(): Promise<void>;
3045
- render(delta?: number): this;
3046
- start(): this;
3046
+ waitAndRender(delta?: number): Promise<void>;
3047
+ render(delta?: number): void;
3048
+ start(): Promise<void>;
3047
3049
  free(): void;
3048
3050
  toPixels(): Uint8ClampedArray;
3049
3051
  toImageData(): ImageData;
@@ -3054,6 +3056,7 @@ interface RenderOptions {
3054
3056
  data: Record<string, any> | Node | (Node | Record<string, any>)[];
3055
3057
  width: number;
3056
3058
  height: number;
3059
+ time?: number;
3057
3060
  onBeforeRender?: (engine: Engine) => void | Promise<void>;
3058
3061
  }
3059
3062
  declare function render(options: RenderOptions): Promise<HTMLCanvasElement>;
package/dist/index.d.mts CHANGED
@@ -595,8 +595,8 @@ declare class MainLoop extends CoreObject {
595
595
  get starting(): boolean;
596
596
  get spf(): number;
597
597
  constructor();
598
- start(process: (delta: number) => void): this;
599
- stop(): this;
598
+ start(process: (delta: number) => void): void;
599
+ stop(): void;
600
600
  protected _onNextTick(): void;
601
601
  free(): void;
602
602
  }
@@ -1569,7 +1569,7 @@ interface SceneTree {
1569
1569
  emit: (<K extends keyof SceneTreeEventMap>(type: K, ...args: Parameters<SceneTreeEventMap[K]>) => boolean) & ((type: string, ...args: any[]) => boolean);
1570
1570
  }
1571
1571
  declare class SceneTree extends MainLoop {
1572
- paused: boolean;
1572
+ processPaused: boolean;
1573
1573
  backgroundColor?: ColorValue;
1574
1574
  debug: boolean;
1575
1575
  readonly input: Input;
@@ -1583,7 +1583,8 @@ declare class SceneTree extends MainLoop {
1583
1583
  constructor(timeline?: Timeline);
1584
1584
  protected _updateProperty(key: PropertyKey, value: any, oldValue: any, declaration?: PropertyDeclaration): void;
1585
1585
  log(...args: any[]): void;
1586
- protected _render(renderer: WebGLRenderer, delta?: number): this;
1586
+ protected _process(delta?: number): void;
1587
+ protected _render(renderer: WebGLRenderer): void;
1587
1588
  protected _renderScreen(renderer: WebGLRenderer): void;
1588
1589
  free(): void;
1589
1590
  }
@@ -3042,8 +3043,9 @@ declare class Engine extends SceneTree {
3042
3043
  resize(width: number, height: number, updateCss?: boolean): this;
3043
3044
  nextTick(): Promise<void>;
3044
3045
  waitUntilLoad(): Promise<void>;
3045
- render(delta?: number): this;
3046
- start(): this;
3046
+ waitAndRender(delta?: number): Promise<void>;
3047
+ render(delta?: number): void;
3048
+ start(): Promise<void>;
3047
3049
  free(): void;
3048
3050
  toPixels(): Uint8ClampedArray;
3049
3051
  toImageData(): ImageData;
@@ -3054,6 +3056,7 @@ interface RenderOptions {
3054
3056
  data: Record<string, any> | Node | (Node | Record<string, any>)[];
3055
3057
  width: number;
3056
3058
  height: number;
3059
+ time?: number;
3057
3060
  onBeforeRender?: (engine: Engine) => void | Promise<void>;
3058
3061
  }
3059
3062
  declare function render(options: RenderOptions): Promise<HTMLCanvasElement>;
package/dist/index.d.ts CHANGED
@@ -595,8 +595,8 @@ declare class MainLoop extends CoreObject {
595
595
  get starting(): boolean;
596
596
  get spf(): number;
597
597
  constructor();
598
- start(process: (delta: number) => void): this;
599
- stop(): this;
598
+ start(process: (delta: number) => void): void;
599
+ stop(): void;
600
600
  protected _onNextTick(): void;
601
601
  free(): void;
602
602
  }
@@ -1569,7 +1569,7 @@ interface SceneTree {
1569
1569
  emit: (<K extends keyof SceneTreeEventMap>(type: K, ...args: Parameters<SceneTreeEventMap[K]>) => boolean) & ((type: string, ...args: any[]) => boolean);
1570
1570
  }
1571
1571
  declare class SceneTree extends MainLoop {
1572
- paused: boolean;
1572
+ processPaused: boolean;
1573
1573
  backgroundColor?: ColorValue;
1574
1574
  debug: boolean;
1575
1575
  readonly input: Input;
@@ -1583,7 +1583,8 @@ declare class SceneTree extends MainLoop {
1583
1583
  constructor(timeline?: Timeline);
1584
1584
  protected _updateProperty(key: PropertyKey, value: any, oldValue: any, declaration?: PropertyDeclaration): void;
1585
1585
  log(...args: any[]): void;
1586
- protected _render(renderer: WebGLRenderer, delta?: number): this;
1586
+ protected _process(delta?: number): void;
1587
+ protected _render(renderer: WebGLRenderer): void;
1587
1588
  protected _renderScreen(renderer: WebGLRenderer): void;
1588
1589
  free(): void;
1589
1590
  }
@@ -3042,8 +3043,9 @@ declare class Engine extends SceneTree {
3042
3043
  resize(width: number, height: number, updateCss?: boolean): this;
3043
3044
  nextTick(): Promise<void>;
3044
3045
  waitUntilLoad(): Promise<void>;
3045
- render(delta?: number): this;
3046
- start(): this;
3046
+ waitAndRender(delta?: number): Promise<void>;
3047
+ render(delta?: number): void;
3048
+ start(): Promise<void>;
3047
3049
  free(): void;
3048
3050
  toPixels(): Uint8ClampedArray;
3049
3051
  toImageData(): ImageData;
@@ -3054,6 +3056,7 @@ interface RenderOptions {
3054
3056
  data: Record<string, any> | Node | (Node | Record<string, any>)[];
3055
3057
  width: number;
3056
3058
  height: number;
3059
+ time?: number;
3057
3060
  onBeforeRender?: (engine: Engine) => void | Promise<void>;
3058
3061
  }
3059
3062
  declare function render(options: RenderOptions): Promise<HTMLCanvasElement>;