From 703b0f13d4dbfe20ba53a69fda1594ff66f0cafc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Fri, 2 Jan 2026 21:17:30 +0100 Subject: [PATCH] Add Component.useSignalValues --- .../react-godot-renderer/src/Component.ts | 31 ++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/packages/react-godot-renderer/src/Component.ts b/packages/react-godot-renderer/src/Component.ts index 68ab98b..067076f 100644 --- a/packages/react-godot-renderer/src/Component.ts +++ b/packages/react-godot-renderer/src/Component.ts @@ -80,4 +80,33 @@ export const useSignal = , A extends use const callable = Godot.Callable.create(ref.current, f) signal.connect(callable) return () => { signal.disconnect(callable) } -}, [ref.current]) +}, [ref.current, name]) + +export declare namespace useSignalValues { + export type SignalNames> = useSignal.SignalNames + + export type SignalValues, N extends useSignal.SignalNames> = ( + T[N] extends Godot.Signal + ? Parameters + : never + ) +} + +export const useSignalValues = , A extends useSignal.SignalNames>( + ref: React.RefObject, + name: A, + initialValue: + | useSignalValues.SignalValues, NoInfer> + | (() => useSignalValues.SignalValues, NoInfer>), +): useSignalValues.SignalValues => { + const [values, setValues] = React.useState(initialValue) + React.useEffect(() => { + if (!ref.current) return + const signal = ref.current[name] as Godot.Signal + const callable = Godot.Callable.create(setValues) + signal.connect(callable) + return () => { signal.disconnect(callable) } + }, [ref.current, name]) + + return values +}