This commit is contained in:
@@ -80,4 +80,33 @@ export const useSignal = <T extends Godot.Node<Godot.NodePathMap>, 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<T extends Godot.Node<Godot.NodePathMap>> = useSignal.SignalNames<T>
|
||||
|
||||
export type SignalValues<T extends Godot.Node<Godot.NodePathMap>, N extends useSignal.SignalNames<T>> = (
|
||||
T[N] extends Godot.Signal<infer F>
|
||||
? Parameters<F>
|
||||
: never
|
||||
)
|
||||
}
|
||||
|
||||
export const useSignalValues = <T extends Godot.Node<Godot.NodePathMap>, A extends useSignal.SignalNames<T>>(
|
||||
ref: React.RefObject<T | null>,
|
||||
name: A,
|
||||
initialValue:
|
||||
| useSignalValues.SignalValues<NoInfer<T>, NoInfer<A>>
|
||||
| (() => useSignalValues.SignalValues<NoInfer<T>, NoInfer<A>>),
|
||||
): useSignalValues.SignalValues<T, A> => {
|
||||
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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user