@@ -16,6 +16,8 @@ export const useFollowCam = function ({
1616 camInitDir = { x : 0 , y : 0 } , // in rad
1717 camMoveSpeed = 1 ,
1818 camZoomSpeed = 1 ,
19+ camInvertX = false ,
20+ camInvertY = false ,
1921 camCollisionOffset = 0.7 , // percentage
2022 camCollisionSpeedMult = 4 ,
2123 camListenerTarget = "domElement" ,
@@ -24,6 +26,14 @@ export const useFollowCam = function ({
2426 const { scene, camera, gl } = useThree ( ) ;
2527 // const { rapier, world } = useRapier();
2628
29+ const camInvertXRef = useRef ( camInvertX ? - 1 : 1 ) ;
30+ const camInvertYRef = useRef ( camInvertY ? - 1 : 1 ) ;
31+
32+ useEffect ( ( ) => {
33+ camInvertXRef . current = camInvertX ? - 1 : 1 ;
34+ camInvertYRef . current = camInvertY ? - 1 : 1 ;
35+ } , [ camInvertX , camInvertY ] ) ;
36+
2737 let isMouseDown = false ;
2838 let previousTouch1 : Touch = null ;
2939 let previousTouch2 : Touch = null ;
@@ -64,8 +74,8 @@ export const useFollowCam = function ({
6474 // Mouse move event
6575 const onDocumentMouseMove = ( e : MouseEvent ) => {
6676 if ( document . pointerLockElement || isMouseDown ) {
67- pivot . rotation . y -= e . movementX * 0.002 * camMoveSpeed ;
68- const vy = followCam . rotation . x + e . movementY * 0.002 * camMoveSpeed ;
77+ pivot . rotation . y -= e . movementX * 0.002 * camMoveSpeed * camInvertXRef . current ;
78+ const vy = followCam . rotation . x + ( e . movementY * camInvertYRef . current ) * 0.002 * camMoveSpeed ;
6979
7080 cameraDistance = followCam . position . length ( ) ;
7181
@@ -114,8 +124,8 @@ export const useFollowCam = function ({
114124 const touch1MovementX = touch1 . pageX - previousTouch1 . pageX ;
115125 const touch1MovementY = touch1 . pageY - previousTouch1 . pageY ;
116126
117- pivot . rotation . y -= touch1MovementX * 0.005 * camMoveSpeed ;
118- const vy = followCam . rotation . x + touch1MovementY * 0.005 * camMoveSpeed ;
127+ pivot . rotation . y -= touch1MovementX * 0.005 * camMoveSpeed * camInvertXRef . current ;
128+ const vy = followCam . rotation . x + ( touch1MovementY * camInvertYRef . current ) * 0.005 * camMoveSpeed ;
119129
120130 cameraDistance = followCam . position . length ( ) ;
121131
@@ -155,8 +165,8 @@ export const useFollowCam = function ({
155165 * Gamepad second joystick event
156166 */
157167 const joystickCamMove = ( movementX : number , movementY : number ) => {
158- pivot . rotation . y -= movementX * 0.005 * camMoveSpeed * 5 ;
159- const vy = followCam . rotation . x + movementY * 0.005 * camMoveSpeed * 5 ;
168+ pivot . rotation . y -= movementX * 0.005 * camMoveSpeed * 5 * camInvertXRef . current ;
169+ const vy = followCam . rotation . x + ( movementY * camInvertYRef . current ) * 0.005 * camMoveSpeed * 5 ;
160170
161171 cameraDistance = followCam . position . length ( ) ;
162172
@@ -327,6 +337,8 @@ export type UseFollowCamProps = {
327337 camInitDir ?: { x : number , y : number } ;
328338 camMoveSpeed ?: number ;
329339 camZoomSpeed ?: number ;
340+ camInvertX ?: boolean ,
341+ camInvertY ?: boolean ,
330342 camCollisionOffset ?: number ;
331343 camCollisionSpeedMult ?: number ;
332344 camListenerTarget ?: camListenerTargetType ;
0 commit comments