From 01407b5ede606e279898b63d3bc35fb5f416535a Mon Sep 17 00:00:00 2001 From: hypercross Date: Fri, 3 Apr 2026 16:18:05 +0800 Subject: [PATCH] fix: usage compliance --- packages/framework/src/bindings/index.ts | 10 ++++++---- packages/framework/src/input/index.ts | 15 ++------------- 2 files changed, 8 insertions(+), 17 deletions(-) diff --git a/packages/framework/src/bindings/index.ts b/packages/framework/src/bindings/index.ts index b8ebaa2..9c746b4 100644 --- a/packages/framework/src/bindings/index.ts +++ b/packages/framework/src/bindings/index.ts @@ -31,10 +31,11 @@ export interface BindRegionOptions { factory: (part: TPart, position: Phaser.Math.Vector2) => Phaser.GameObjects.GameObject; } -export function bindRegion( +export function bindRegion( + state: MutableSignal, + partsGetter: (state: TState) => Part[], region: Region, - parts: Record, - options: BindRegionOptions, + options: BindRegionOptions>, container: Phaser.GameObjects.Container, ): { cleanup: () => void; objects: Map } { const objects = new Map(); @@ -43,6 +44,7 @@ export function bindRegion( const offset = options.offset ?? { x: 0, y: 0 }; function syncParts() { + const parts = partsGetter(state.value); const currentIds = new Set(region.childIds); for (const [id, obj] of objects) { if (!currentIds.has(id)) { @@ -52,7 +54,7 @@ export function bindRegion( } for (const childId of region.childIds) { - const part = parts[childId]; + const part = parts.find(p => p.id === childId); if (!part) continue; const pos = new Phaser.Math.Vector2( diff --git a/packages/framework/src/input/index.ts b/packages/framework/src/input/index.ts index c9e58d3..cdf2667 100644 --- a/packages/framework/src/input/index.ts +++ b/packages/framework/src/input/index.ts @@ -35,7 +35,7 @@ export class InputMapper> { const cmd = onCellClick(col, row); if (cmd) { - this.commands.run(cmd); + this.commands._tryCommit(cmd); } }; @@ -83,7 +83,6 @@ export class PromptHandler> { private onPrompt: (prompt: PromptEvent) => void; private onSubmit: (input: string) => string | null; private onCancel: (reason?: string) => void; - private listener: ((event: PromptEvent) => void) | null = null; constructor(options: PromptHandlerOptions) { this.scene = options.scene; @@ -94,13 +93,6 @@ export class PromptHandler> { } start(): void { - const listener = (event: PromptEvent) => { - this.onPrompt(event); - }; - - this.listener = listener; - this.commands.on('prompt', listener); - this.commands.promptQueue.pop().then((promptEvent) => { this.onPrompt(promptEvent); }).catch(() => { @@ -117,10 +109,7 @@ export class PromptHandler> { } destroy(): void { - if (this.listener) { - this.commands.off('prompt', this.listener); - this.listener = null; - } + // No cleanup needed - promptQueue handles its own lifecycle } }