@@ -16,6 +16,8 @@ export const useFollowCam = function ({
16
16
camInitDir = { x : 0 , y : 0 } , // in rad
17
17
camMoveSpeed = 1 ,
18
18
camZoomSpeed = 1 ,
19
+ camInvertX = false ,
20
+ camInvertY = false ,
19
21
camCollisionOffset = 0.7 , // percentage
20
22
camCollisionSpeedMult = 4 ,
21
23
camListenerTarget = "domElement" ,
@@ -24,6 +26,14 @@ export const useFollowCam = function ({
24
26
const { scene, camera, gl } = useThree ( ) ;
25
27
// const { rapier, world } = useRapier();
26
28
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
+
27
37
let isMouseDown = false ;
28
38
let previousTouch1 : Touch = null ;
29
39
let previousTouch2 : Touch = null ;
@@ -64,8 +74,8 @@ export const useFollowCam = function ({
64
74
// Mouse move event
65
75
const onDocumentMouseMove = ( e : MouseEvent ) => {
66
76
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 ;
69
79
70
80
cameraDistance = followCam . position . length ( ) ;
71
81
@@ -114,8 +124,8 @@ export const useFollowCam = function ({
114
124
const touch1MovementX = touch1 . pageX - previousTouch1 . pageX ;
115
125
const touch1MovementY = touch1 . pageY - previousTouch1 . pageY ;
116
126
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 ;
119
129
120
130
cameraDistance = followCam . position . length ( ) ;
121
131
@@ -155,8 +165,8 @@ export const useFollowCam = function ({
155
165
* Gamepad second joystick event
156
166
*/
157
167
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 ;
160
170
161
171
cameraDistance = followCam . position . length ( ) ;
162
172
@@ -327,6 +337,8 @@ export type UseFollowCamProps = {
327
337
camInitDir ?: { x : number , y : number } ;
328
338
camMoveSpeed ?: number ;
329
339
camZoomSpeed ?: number ;
340
+ camInvertX ?: boolean ,
341
+ camInvertY ?: boolean ,
330
342
camCollisionOffset ?: number ;
331
343
camCollisionSpeedMult ?: number ;
332
344
camListenerTarget ?: camListenerTargetType ;
0 commit comments