Skip to content

Commit 76bbaa4

Browse files
add wake up delay after visible change
1 parent 5843730 commit 76bbaa4

File tree

3 files changed

+29
-7
lines changed

3 files changed

+29
-7
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "ecctrl",
3-
"version": "1.0.48",
3+
"version": "1.0.49",
44
"author": "Erdong Chen",
55
"license": "MIT",
66
"description": "A floating rigibody character controller for R3F",

readme.md

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,7 @@ EcctrlProps: {
150150
camFollowMult: 11, // Camera follow speed multiplier
151151
fallingGravityScale: 2.5, // Character is falling, apply higher gravity
152152
fallingMaxVel: -20, // Limit character max falling velocity
153+
wakeUpDelay: 200, // Wake up character delay time after window visibility change to visible (in ms)
153154
// Floating Ray setups
154155
rayOriginOffest: { x: 0, y: -capsuleHalfHeight, z: 0 }, // Ray origin offset
155156
rayHitForgiveness: 0.1, // Ray hit forgiveness
@@ -410,12 +411,25 @@ const releaseAllButtons = useJoystickControls(
410411
(state) => state.releaseAllButtons
411412
);
412413
//...
413-
// call the proper fuctions
414-
setJoystick(joystickDis, joystickAng, runState)
414+
// call the proper fuctions
415+
setJoystick(joystickDis, joystickAng, runState);
415416
// or
416417
pressButton1();
417418
```
418419

420+
### (Optional) First-person view setup
421+
422+
If you would like to quickly set up a first-person mode, you can modify these props to achieve that:
423+
424+
```js
425+
<Ecctrl
426+
camInitDis={-0.01} // camera intial position
427+
camMinDis={-0.01} // camera zoom in closest position
428+
camFollowMult={100} // give any big number here, so the camera follows the character instantly
429+
autoBalance={false} // turn off auto balance since it's not useful for the first-person view
430+
>
431+
```
432+
419433
## Contributions
420434

421435
I appreciate your interest in this project! If you have any feedback, suggestions, or resources related to the controller, please feel free to share.

src/Ecctrl.tsx

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ const Ecctrl = forwardRef<RapierRigidBody, EcctrlProps>(({
8181
camFollowMult = 11,
8282
fallingGravityScale = 2.5,
8383
fallingMaxVel = -20,
84+
wakeUpDelay = 200,
8485
// Floating Ray setups
8586
rayOriginOffest = { x: 0, y: -capsuleHalfHeight, z: 0 },
8687
rayHitForgiveness = 0.1,
@@ -407,7 +408,7 @@ const Ecctrl = forwardRef<RapierRigidBody, EcctrlProps>(({
407408
// can jump setup
408409
let canJump = false;
409410
let isFalling = false;
410-
const initialGravityScale = useMemo(() => props.gravityScale || 1, [])
411+
const initialGravityScale: number = useMemo(() => props.gravityScale || 1, [])
411412

412413
// on moving object state
413414
let isOnMovingObject = false;
@@ -654,7 +655,13 @@ const Ecctrl = forwardRef<RapierRigidBody, EcctrlProps>(({
654655
* Character sleep function
655656
*/
656657
const sleepCharacter = () => {
657-
characterRef.current.sleep()
658+
if (document.visibilityState === "hidden") {
659+
characterRef.current.sleep()
660+
} else {
661+
setTimeout(() => {
662+
characterRef.current.wakeUp()
663+
}, wakeUpDelay)
664+
}
658665
}
659666

660667
useEffect(() => {
@@ -780,10 +787,10 @@ const Ecctrl = forwardRef<RapierRigidBody, EcctrlProps>(({
780787
pivot.rotation.y = camInitDir.y
781788
pivot.rotation.z = camInitDir.z
782789

783-
window.addEventListener("blur", sleepCharacter);
790+
window.addEventListener("visibilitychange", sleepCharacter);
784791

785792
return () => {
786-
window.removeEventListener("blur", sleepCharacter);
793+
window.removeEventListener("visibilitychange", sleepCharacter);
787794
}
788795
}, [])
789796

@@ -1216,6 +1223,7 @@ export interface EcctrlProps extends RigidBodyProps {
12161223
camFollowMult?: number;
12171224
fallingGravityScale?: number;
12181225
fallingMaxVel?: number;
1226+
wakeUpDelay?: number;
12191227
// Floating Ray setups
12201228
rayOriginOffest?: { x: number; y: number; z: number };
12211229
rayHitForgiveness?: number;

0 commit comments

Comments
 (0)