refactor: clean up

This commit is contained in:
2026-04-04 13:21:44 +08:00
parent 2b59adf000
commit 2984d8b20d
16 changed files with 152 additions and 788 deletions
@@ -0,0 +1,40 @@
import Phaser from 'phaser';
import { effect, type ReadonlySignal } from '@preact/signals-core';
import type { GameHost } from 'boardgame-core';
import { DisposableBag, type IDisposable } from '../utils';
type CleanupFn = void | (() => void);
export interface GameHostSceneOptions<TState extends Record<string, unknown>> {
gameHost: GameHost<TState>;
}
export abstract class GameHostScene<TState extends Record<string, unknown>>
extends Phaser.Scene
implements IDisposable
{
protected disposables = new DisposableBag();
protected gameHost!: GameHost<TState>;
init(data: GameHostSceneOptions<TState>): void {
this.gameHost = data.gameHost;
}
create(): void {
this.events.on('shutdown', this.dispose, this);
}
dispose(): void {
this.disposables.dispose();
}
/** 获取当前状态的只读快照 */
protected get state(): TState {
return this.gameHost.state.value;
}
/** 注册响应式监听(场景关闭时自动清理) */
protected watch(fn: () => CleanupFn): void {
this.disposables.add(effect(fn));
}
}
+2
View File
@@ -0,0 +1,2 @@
export { GameHostScene } from './GameHostScene';
export type { GameHostSceneOptions } from './GameHostScene';