From bf62805c389239676ebb3026e32919c8b44a37c3 Mon Sep 17 00:00:00 2001 From: hypercross Date: Sat, 4 Apr 2026 16:19:18 +0800 Subject: [PATCH] refactor: context update --- packages/framework/src/ui/PhaserBridge.tsx | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/packages/framework/src/ui/PhaserBridge.tsx b/packages/framework/src/ui/PhaserBridge.tsx index 45eda7c..465e230 100644 --- a/packages/framework/src/ui/PhaserBridge.tsx +++ b/packages/framework/src/ui/PhaserBridge.tsx @@ -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(undefined)); +export const phaserContext = createContext>(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>(signal(undefined)); export function PhaserScene(props: PhaserSceneProps) { const context = useContext(phaserContext); + const sceneSignal = useSignal(); 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 {props.children}; }