From a0adb4242378dd764d06404e9711e2a9152c7c0c Mon Sep 17 00:00:00 2001 From: Hichem Fantar Date: Sat, 12 Oct 2024 14:48:22 +0100 Subject: [PATCH] feat: Add child event listeners in useFollowCam hook --- src/hooks/useFollowCam.tsx | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/src/hooks/useFollowCam.tsx b/src/hooks/useFollowCam.tsx index 783f1b5..486d40d 100644 --- a/src/hooks/useFollowCam.tsx +++ b/src/hooks/useFollowCam.tsx @@ -1,6 +1,6 @@ import { useThree } from "@react-three/fiber"; // import { useRapier } from "@react-three/rapier"; -import { useEffect, useMemo } from "react"; +import { useEffect, useMemo, useState } from "react"; import * as THREE from "three"; import type { camListenerTargetType } from "../Ecctrl"; @@ -10,6 +10,7 @@ export const useFollowCam = function (props: UseFollowCamProps) { const disableFollowCamPos = props.disableFollowCamPos; const disableFollowCamTarget = props.disableFollowCamTarget; // const { rapier, world } = useRapier(); + const [render, setRender] = useState(false); let isMouseDown = false; let previousTouch1: Touch = null; @@ -293,6 +294,23 @@ export const useFollowCam = function (props: UseFollowCamProps) { }; }); + useEffect(() => { + function onChildAdded() { + setRender((prev) => !prev); + } + function onChildRemoved() { + setRender((prev) => !prev); + } + + scene.addEventListener("childadded", onChildAdded); + scene.addEventListener("childremoved", onChildRemoved); + + return () => { + scene.removeEventListener("childadded", onChildAdded); + scene.removeEventListener("childremoved", onChildRemoved); + }; + }, [scene]); + return { pivot, followCam, cameraCollisionDetect, joystickCamMove }; };