From 54c6466127fe7a3c98f169278979c7b234d8b5d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Fri, 2 Jan 2026 03:24:30 +0100 Subject: [PATCH] Add Component.fromScene --- packages/example/src/TestUi1Component.tsx | 1 + .../gen/godot/src/TestUi1.nodes.gen.ts | 5 ----- .../gen/godot/src/TestUi1.tscn.gen.ts | 6 ----- .../gen/godot/src/TestUi2.nodes.gen.ts | 5 ----- .../gen/godot/src/TestUi2.tscn.gen.ts | 6 ----- .../react-godot-renderer/src/Component.ts | 22 ++++++++++++++++--- packages/react-godot-renderer/tsconfig.json | 2 +- 7 files changed, 21 insertions(+), 26 deletions(-) delete mode 100644 packages/react-godot-renderer/gen/godot/src/TestUi1.nodes.gen.ts delete mode 100644 packages/react-godot-renderer/gen/godot/src/TestUi1.tscn.gen.ts delete mode 100644 packages/react-godot-renderer/gen/godot/src/TestUi2.nodes.gen.ts delete mode 100644 packages/react-godot-renderer/gen/godot/src/TestUi2.tscn.gen.ts diff --git a/packages/example/src/TestUi1Component.tsx b/packages/example/src/TestUi1Component.tsx index db8a14c..c9ff913 100644 --- a/packages/example/src/TestUi1Component.tsx +++ b/packages/example/src/TestUi1Component.tsx @@ -7,6 +7,7 @@ const VFlowContainer = Component.make(Godot.VFlowContainer) const Label = Component.make(Godot.Label) const TextEdit = Component.make(Godot.TextEdit) const Button = Component.make(Godot.Button) +const Test = Component. export function TestUi1Component() { const [text, setText] = useState("Default text") diff --git a/packages/react-godot-renderer/gen/godot/src/TestUi1.nodes.gen.ts b/packages/react-godot-renderer/gen/godot/src/TestUi1.nodes.gen.ts deleted file mode 100644 index 7b62684..0000000 --- a/packages/react-godot-renderer/gen/godot/src/TestUi1.nodes.gen.ts +++ /dev/null @@ -1,5 +0,0 @@ -declare module "godot" { - interface SceneNodes { - "src/TestUi1.tscn": {}; - } -} diff --git a/packages/react-godot-renderer/gen/godot/src/TestUi1.tscn.gen.ts b/packages/react-godot-renderer/gen/godot/src/TestUi1.tscn.gen.ts deleted file mode 100644 index 695cbb2..0000000 --- a/packages/react-godot-renderer/gen/godot/src/TestUi1.tscn.gen.ts +++ /dev/null @@ -1,6 +0,0 @@ -import TestUi1 from "../../../src/TestUi1"; -declare module "godot" { - interface ResourceTypes { - "res://src/TestUi1.tscn": PackedScene; - } -} diff --git a/packages/react-godot-renderer/gen/godot/src/TestUi2.nodes.gen.ts b/packages/react-godot-renderer/gen/godot/src/TestUi2.nodes.gen.ts deleted file mode 100644 index a2d1200..0000000 --- a/packages/react-godot-renderer/gen/godot/src/TestUi2.nodes.gen.ts +++ /dev/null @@ -1,5 +0,0 @@ -declare module "godot" { - interface SceneNodes { - "src/TestUi2.tscn": {}; - } -} diff --git a/packages/react-godot-renderer/gen/godot/src/TestUi2.tscn.gen.ts b/packages/react-godot-renderer/gen/godot/src/TestUi2.tscn.gen.ts deleted file mode 100644 index 89801b3..0000000 --- a/packages/react-godot-renderer/gen/godot/src/TestUi2.tscn.gen.ts +++ /dev/null @@ -1,6 +0,0 @@ -import TestUi2 from "../../../src/TestUi2"; -declare module "godot" { - interface ResourceTypes { - "res://src/TestUi2.tscn": PackedScene; - } -} diff --git a/packages/react-godot-renderer/src/Component.ts b/packages/react-godot-renderer/src/Component.ts index 5e5bdd4..34809aa 100644 --- a/packages/react-godot-renderer/src/Component.ts +++ b/packages/react-godot-renderer/src/Component.ts @@ -37,6 +37,22 @@ export const make = >( Prototype, ) +export declare namespace fromScene { + export type SceneNames = { + [K in keyof Godot.ResourceTypes]: Godot.ResourceTypes[K] extends Godot.PackedScene ? K : never + }[keyof Godot.ResourceTypes] +} + +export const fromScene = ( + name: A +): Component => Object.setPrototypeOf( + Object.assign( + (props: Props) => React.createElement("element", { ...props }), + { displayName: name }, + ), + Prototype, +) + export declare namespace useSignal { export type SignalNames> = { [K in keyof T & string]: T[K] extends Godot.Signal ? K : never @@ -49,10 +65,10 @@ export declare namespace useSignal { ) } -export const useSignal = , N extends useSignal.SignalNames>( +export const useSignal = , A extends useSignal.SignalNames>( ref: React.RefObject, - name: N, - f: useSignal.Function, + name: A, + f: useSignal.Function, // biome-ignore lint/correctness/useExhaustiveDependencies: "f" is non-reactive ): void => React.useEffect(() => { if (!ref.current) return diff --git a/packages/react-godot-renderer/tsconfig.json b/packages/react-godot-renderer/tsconfig.json index 138f3c7..31e0fc2 100644 --- a/packages/react-godot-renderer/tsconfig.json +++ b/packages/react-godot-renderer/tsconfig.json @@ -31,5 +31,5 @@ "sourceMap": true }, - "include": ["./src", "./typings"] + "include": ["./src", "./typings", "./gen"] }