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,65 @@
import Phaser from 'phaser';
import { signal, useSignal, useSignalEffect, type Signal } from '@preact/signals';
import { createContext, h } from 'preact';
import { useContext } from 'preact/hooks';
export const phaserContext = createContext<Signal<Phaser.Game | undefined>>(signal(undefined));
export const defaultPhaserConfig: Phaser.Types.Core.GameConfig = {
type: Phaser.AUTO,
width: 560,
height: 560,
parent: 'phaser-container',
backgroundColor: '#f9fafb',
scene: [],
};
export interface PhaserGameProps {
config?: Partial<Phaser.Types.Core.GameConfig>;
children?: any;
}
export function PhaserGame(props: PhaserGameProps) {
const gameSignal = useSignal<Phaser.Game>();
useSignalEffect(() => {
const phaserGame = new Phaser.Game(props.config || defaultPhaserConfig);
gameSignal.value = phaserGame;
return () => {
gameSignal.value = undefined;
phaserGame.destroy(true);
};
});
return (
<div id="phaser-container" className="w-full h-full">
<phaserContext.Provider value={gameSignal}>
{props.children}
</phaserContext.Provider>
</div>
);
}
export interface PhaserSceneProps {
sceneKey: string;
scene: Phaser.Scene;
autoStart: boolean;
data?: object;
}
export function PhaserScene(props: PhaserSceneProps) {
const context = useContext(phaserContext);
useSignalEffect(() => {
const game = context.value;
if (!game) return;
game.scene.add(props.sceneKey, props.scene, props.autoStart, props.data);
return () => {
game.scene.remove(props.sceneKey);
};
});
return null;
}
+5
View File
@@ -0,0 +1,5 @@
export { GameUI } from './GameUI';
export type { GameUIOptions } from './GameUI';
export { PhaserGame, PhaserScene, phaserContext, defaultPhaserConfig } from './PhaserBridge';
export type { PhaserGameProps, PhaserSceneProps } from './PhaserBridge';