refactor: context update

This commit is contained in:
hypercross 2026-04-04 16:19:18 +08:00
parent 6c86a97c8f
commit bf62805c38
1 changed files with 8 additions and 2 deletions

View File

@ -2,8 +2,9 @@ import Phaser from 'phaser';
import { signal, useSignal, useSignalEffect, type Signal } from '@preact/signals';
import { createContext, h } from 'preact';
import { useContext } from 'preact/hooks';
import {ReadonlySignal} from "@preact/signals-core";
export const phaserContext = createContext<Signal<Phaser.Game | undefined>>(signal(undefined));
export const phaserContext = createContext<ReadonlySignal<Phaser.Game | undefined>>(signal(undefined));
export const defaultPhaserConfig: Phaser.Types.Core.GameConfig = {
type: Phaser.AUTO,
@ -50,20 +51,25 @@ export interface PhaserSceneProps {
scene: Phaser.Scene;
autoStart: boolean;
data?: object;
children?: any;
}
export const phaserSceneContext = createContext<ReadonlySignal<Phaser.Scene | undefined>>(signal(undefined));
export function PhaserScene(props: PhaserSceneProps) {
const context = useContext(phaserContext);
const sceneSignal = useSignal<Phaser.Scene>();
useSignalEffect(() => {
const game = context.value;
if (!game) return;
game.scene.add(props.sceneKey, props.scene, props.autoStart, props.data);
sceneSignal.value = game.scene.getScene(props.sceneKey);
return () => {
sceneSignal.value = undefined;
game.scene.remove(props.sceneKey);
};
});
return null;
return <phaserSceneContext.Provider value={sceneSignal}>{props.children}</phaserSceneContext.Provider>;
}