refactor: improved scene manager

This commit is contained in:
hyper
2026-04-12 17:52:44 +08:00
parent fe57583a8f
commit 9ab7ae3e60
3 changed files with 73 additions and 20 deletions
@@ -10,7 +10,14 @@ export abstract class GameHostScene<TState extends Record<string, unknown>>
extends ReactiveScene<GameHostSceneOptions<TState>>
{
public get gameHost(): GameHost<TState> {
return this.initData.gameHost as GameHost<TState>;
const gameHost = this.initData.gameHost as GameHost<TState>;
if (!gameHost) {
throw new Error(
`GameHostScene (${this.scene.key}): gameHost 未提供。` +
`确保在 PhaserScene 组件的 data 属性中传入 gameHost。`
);
}
return gameHost;
}
public get state(): TState {
@@ -29,13 +29,19 @@ export abstract class ReactiveScene<TData extends Record<string, unknown> = {}>
implements IDisposable
{
protected disposables = new DisposableBag();
private _initData!: TData & ReactiveScenePhaserData;
private _initData?: TData & ReactiveScenePhaserData;
/**
* 获取通过 init() 注入的数据
* 在 create() 阶段保证可用
*/
public get initData(): TData & ReactiveScenePhaserData {
if (!this._initData) {
throw new Error(
`ReactiveScene (${this.scene.key}): initData 尚未初始化。` +
`确保场景通过 PhaserScene 组件注册,并在 create() 阶段访问。`
);
}
return this._initData;
}
@@ -43,14 +49,14 @@ export abstract class ReactiveScene<TData extends Record<string, unknown> = {}>
* 获取 Phaser game 实例的响应式信号
*/
public get phaserGame(): ReadonlySignal<{ game: Phaser.Game }> {
return this._initData.phaserGame;
return this.initData.phaserGame;
}
/**
* 获取场景控制器
*/
public get sceneController(): SceneController {
return this._initData.sceneController;
return this.initData.sceneController;
}
constructor(key?: string) {