@react-three/rapier 0.14.0-rc.2 → 0.14.0-rc.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,9 +1,9 @@
|
|
1
|
-
|
1
|
+
import React from "react";
|
2
2
|
import { PhysicsProps } from "./Physics";
|
3
3
|
interface FrameStepperProps {
|
4
4
|
type?: PhysicsProps["updateLoop"];
|
5
5
|
onStep: (dt: number) => void;
|
6
6
|
updatePriority?: number;
|
7
7
|
}
|
8
|
-
declare const _default:
|
8
|
+
declare const _default: React.MemoExoticComponent<({ onStep, type, updatePriority }: FrameStepperProps) => JSX.Element>;
|
9
9
|
export default _default;
|
@@ -4,7 +4,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
5
5
|
var rapier3dCompat = require('@dimforge/rapier3d-compat');
|
6
6
|
var fiber = require('@react-three/fiber');
|
7
|
-
var React
|
7
|
+
var React = require('react');
|
8
8
|
var three = require('three');
|
9
9
|
var useAsset = require('use-asset');
|
10
10
|
var threeStdlib = require('three-stdlib');
|
@@ -29,7 +29,7 @@ function _interopNamespace(e) {
|
|
29
29
|
return Object.freeze(n);
|
30
30
|
}
|
31
31
|
|
32
|
-
var React__default = /*#__PURE__*/_interopDefault(React
|
32
|
+
var React__default = /*#__PURE__*/_interopDefault(React);
|
33
33
|
|
34
34
|
function _defineProperty(obj, key, value) {
|
35
35
|
if (key in obj) {
|
@@ -167,7 +167,7 @@ const vectorToTuple = v => {
|
|
167
167
|
return [v];
|
168
168
|
};
|
169
169
|
function useConst(initialValue) {
|
170
|
-
const ref = React
|
170
|
+
const ref = React.useRef();
|
171
171
|
|
172
172
|
if (ref.current === undefined) {
|
173
173
|
ref.current = {
|
@@ -344,10 +344,10 @@ const setColliderOptions = (collider, options, states) => {
|
|
344
344
|
};
|
345
345
|
const useUpdateColliderOptions = (getCollider, props, states) => {
|
346
346
|
// TODO: Improve this, split each prop into its own effect
|
347
|
-
const mutablePropsAsFlatArray = React
|
347
|
+
const mutablePropsAsFlatArray = React.useMemo(() => mutableColliderOptionKeys.flatMap(key => {
|
348
348
|
return vectorToTuple(props[key]);
|
349
349
|
}), [props]);
|
350
|
-
React
|
350
|
+
React.useEffect(() => {
|
351
351
|
const collider = getCollider();
|
352
352
|
setColliderOptions(collider, props, states);
|
353
353
|
}, mutablePropsAsFlatArray);
|
@@ -493,7 +493,7 @@ activeEvents = {}) => {
|
|
493
493
|
onIntersectionExit,
|
494
494
|
onContactForce
|
495
495
|
} = props;
|
496
|
-
React
|
496
|
+
React.useEffect(() => {
|
497
497
|
const collider = getCollider();
|
498
498
|
|
499
499
|
if (collider) {
|
@@ -535,8 +535,8 @@ const cleanRigidBodyPropsForCollider = (props = {}) => {
|
|
535
535
|
};
|
536
536
|
|
537
537
|
const useMutableCallback = fn => {
|
538
|
-
const ref = React
|
539
|
-
React
|
538
|
+
const ref = React.useRef(fn);
|
539
|
+
React.useEffect(() => {
|
540
540
|
ref.current = fn;
|
541
541
|
}, [fn]);
|
542
542
|
return ref;
|
@@ -549,7 +549,7 @@ const useMutableCallback = fn => {
|
|
549
549
|
|
550
550
|
|
551
551
|
const useRapier = () => {
|
552
|
-
return React
|
552
|
+
return React.useContext(rapierContext);
|
553
553
|
};
|
554
554
|
/**
|
555
555
|
* Registers a callback to be called before the physics step
|
@@ -561,7 +561,7 @@ const useBeforePhysicsStep = callback => {
|
|
561
561
|
beforeStepCallbacks
|
562
562
|
} = useRapier();
|
563
563
|
const ref = useMutableCallback(callback);
|
564
|
-
React
|
564
|
+
React.useEffect(() => {
|
565
565
|
beforeStepCallbacks.add(ref);
|
566
566
|
return () => {
|
567
567
|
beforeStepCallbacks.delete(ref);
|
@@ -578,7 +578,7 @@ const useAfterPhysicsStep = callback => {
|
|
578
578
|
afterStepCallbacks
|
579
579
|
} = useRapier();
|
580
580
|
const ref = useMutableCallback(callback);
|
581
|
-
React
|
581
|
+
React.useEffect(() => {
|
582
582
|
afterStepCallbacks.add(ref);
|
583
583
|
return () => {
|
584
584
|
afterStepCallbacks.delete(ref);
|
@@ -591,8 +591,8 @@ const useAfterPhysicsStep = callback => {
|
|
591
591
|
*/
|
592
592
|
|
593
593
|
const useChildColliderProps = (ref, options, ignoreMeshColliders = true) => {
|
594
|
-
const [colliderProps, setColliderProps] = React
|
595
|
-
React
|
594
|
+
const [colliderProps, setColliderProps] = React.useState([]);
|
595
|
+
React.useEffect(() => {
|
596
596
|
const object = ref.current;
|
597
597
|
|
598
598
|
if (object && options.colliders !== false) {
|
@@ -652,7 +652,7 @@ const applyAttractorForceOnRigidBody = (rigidBody, {
|
|
652
652
|
}
|
653
653
|
}
|
654
654
|
};
|
655
|
-
const Attractor = /*#__PURE__*/React
|
655
|
+
const Attractor = /*#__PURE__*/React.memo(props => {
|
656
656
|
const {
|
657
657
|
position = [0, 0, 0],
|
658
658
|
strength = 1,
|
@@ -664,8 +664,8 @@ const Attractor = /*#__PURE__*/React$1.memo(props => {
|
|
664
664
|
const {
|
665
665
|
attractorStates
|
666
666
|
} = useRapier();
|
667
|
-
const object = React
|
668
|
-
React
|
667
|
+
const object = React.useRef(null);
|
668
|
+
React.useEffect(() => {
|
669
669
|
var _object$current;
|
670
670
|
|
671
671
|
let uuid = ((_object$current = object.current) === null || _object$current === void 0 ? void 0 : _object$current.uuid) || "_";
|
@@ -692,13 +692,13 @@ const Attractor = /*#__PURE__*/React$1.memo(props => {
|
|
692
692
|
});
|
693
693
|
|
694
694
|
const useRaf = callback => {
|
695
|
-
const cb = React
|
696
|
-
const raf = React
|
697
|
-
const lastFrame = React
|
698
|
-
React
|
695
|
+
const cb = React.useRef(callback);
|
696
|
+
const raf = React.useRef(0);
|
697
|
+
const lastFrame = React.useRef(0);
|
698
|
+
React.useEffect(() => {
|
699
699
|
cb.current = callback;
|
700
700
|
}, [callback]);
|
701
|
-
React
|
701
|
+
React.useEffect(() => {
|
702
702
|
const loop = () => {
|
703
703
|
const now = performance.now();
|
704
704
|
const delta = now - lastFrame.current;
|
@@ -736,17 +736,17 @@ const FrameStepper = ({
|
|
736
736
|
type,
|
737
737
|
updatePriority
|
738
738
|
}) => {
|
739
|
-
return type === "independent" ? /*#__PURE__*/
|
739
|
+
return type === "independent" ? /*#__PURE__*/React__default["default"].createElement(RafStepper, {
|
740
740
|
onStep: onStep
|
741
|
-
}) : /*#__PURE__*/
|
741
|
+
}) : /*#__PURE__*/React__default["default"].createElement(UseFrameStepper, {
|
742
742
|
onStep: onStep,
|
743
743
|
updatePriority: updatePriority
|
744
744
|
});
|
745
745
|
};
|
746
746
|
|
747
|
-
var FrameStepper$1 = /*#__PURE__*/React
|
747
|
+
var FrameStepper$1 = /*#__PURE__*/React.memo(FrameStepper);
|
748
748
|
|
749
|
-
const rapierContext = /*#__PURE__*/React
|
749
|
+
const rapierContext = /*#__PURE__*/React.createContext(undefined);
|
750
750
|
|
751
751
|
const getCollisionPayloadFromSource = (target, other) => {
|
752
752
|
var _target$collider$stat, _target$rigidBody$sta, _other$collider$state, _other$rigidBody$stat, _other$collider$state2, _other$rigidBody$stat2;
|
@@ -795,8 +795,8 @@ const Physics = ({
|
|
795
795
|
const {
|
796
796
|
invalidate
|
797
797
|
} = fiber.useThree();
|
798
|
-
const worldRef = React
|
799
|
-
const getWorldRef = React
|
798
|
+
const worldRef = React.useRef();
|
799
|
+
const getWorldRef = React.useRef(() => {
|
800
800
|
if (!worldRef.current) {
|
801
801
|
const world = new rapier.World(vectorArrayToVector3(_gravity));
|
802
802
|
worldRef.current = world;
|
@@ -813,7 +813,7 @@ const Physics = ({
|
|
813
813
|
const beforeStepCallbacks = useConst(() => new Set());
|
814
814
|
const afterStepCallbacks = useConst(() => new Set()); // Init world
|
815
815
|
|
816
|
-
React
|
816
|
+
React.useEffect(() => {
|
817
817
|
const world = getWorldRef.current();
|
818
818
|
return () => {
|
819
819
|
if (world) {
|
@@ -823,15 +823,15 @@ const Physics = ({
|
|
823
823
|
};
|
824
824
|
}, []); // Update gravity
|
825
825
|
|
826
|
-
React
|
826
|
+
React.useEffect(() => {
|
827
827
|
const world = worldRef.current;
|
828
828
|
|
829
829
|
if (world) {
|
830
830
|
world.gravity = vectorArrayToVector3(_gravity);
|
831
831
|
}
|
832
832
|
}, [_gravity]);
|
833
|
-
const api = React
|
834
|
-
const getSourceFromColliderHandle = React
|
833
|
+
const api = React.useMemo(() => createWorldApi(getWorldRef), []);
|
834
|
+
const getSourceFromColliderHandle = React.useCallback(handle => {
|
835
835
|
const world = worldRef.current;
|
836
836
|
|
837
837
|
if (world) {
|
@@ -859,11 +859,11 @@ const Physics = ({
|
|
859
859
|
return source;
|
860
860
|
}
|
861
861
|
}, []);
|
862
|
-
const [steppingState] = React
|
862
|
+
const [steppingState] = React.useState({
|
863
863
|
previousState: {},
|
864
864
|
accumulator: 0
|
865
865
|
});
|
866
|
-
const step = React
|
866
|
+
const step = React.useCallback(dt => {
|
867
867
|
const world = worldRef.current;
|
868
868
|
if (!world) return;
|
869
869
|
/* Check if the timestep is supposed to be variable. We'll do this here
|
@@ -1079,7 +1079,7 @@ const Physics = ({
|
|
1079
1079
|
invalidate();
|
1080
1080
|
});
|
1081
1081
|
}, [_paused, _timeStep, _interpolate]);
|
1082
|
-
const context = React
|
1082
|
+
const context = React.useMemo(() => ({
|
1083
1083
|
rapier,
|
1084
1084
|
world: api,
|
1085
1085
|
physicsOptions: {
|
@@ -1096,7 +1096,7 @@ const Physics = ({
|
|
1096
1096
|
isPaused: _paused,
|
1097
1097
|
step
|
1098
1098
|
}), [_paused, step]);
|
1099
|
-
const stepCallback = React
|
1099
|
+
const stepCallback = React.useCallback(delta => {
|
1100
1100
|
if (!_paused) {
|
1101
1101
|
step(delta);
|
1102
1102
|
}
|
@@ -1132,15 +1132,15 @@ function _extends() {
|
|
1132
1132
|
*/
|
1133
1133
|
|
1134
1134
|
const useImperativeInstance = (createFn, destroyFn) => {
|
1135
|
-
const ref = React
|
1136
|
-
const refGetter = React
|
1135
|
+
const ref = React.useRef();
|
1136
|
+
const refGetter = React.useMemo(() => () => {
|
1137
1137
|
if (!ref.current) {
|
1138
1138
|
ref.current = createFn();
|
1139
1139
|
}
|
1140
1140
|
|
1141
1141
|
return ref.current;
|
1142
1142
|
}, []);
|
1143
|
-
React
|
1143
|
+
React.useEffect(() => {
|
1144
1144
|
const instance = refGetter();
|
1145
1145
|
return () => {
|
1146
1146
|
destroyFn(instance);
|
@@ -1207,7 +1207,7 @@ const euler = ({
|
|
1207
1207
|
* A collider is a shape that can be attached to a rigid body to define its physical properties.
|
1208
1208
|
* @internal
|
1209
1209
|
*/
|
1210
|
-
const AnyCollider = /*#__PURE__*/React
|
1210
|
+
const AnyCollider = /*#__PURE__*/React.memo( /*#__PURE__*/React.forwardRef((props, forwardedRef) => {
|
1211
1211
|
const {
|
1212
1212
|
children,
|
1213
1213
|
position,
|
@@ -1222,7 +1222,7 @@ const AnyCollider = /*#__PURE__*/React$1.memo( /*#__PURE__*/React$1.forwardRef((
|
|
1222
1222
|
colliderStates
|
1223
1223
|
} = useRapier();
|
1224
1224
|
const rigidBodyContext = useRigidBodyContext();
|
1225
|
-
const ref = React
|
1225
|
+
const ref = React.useRef(null);
|
1226
1226
|
const getInstance = useImperativeInstance(() => {
|
1227
1227
|
const worldScale = ref.current.getWorldScale(vec3());
|
1228
1228
|
const collider = createColliderFromOptions(props, world, worldScale, rigidBodyContext === null || rigidBodyContext === void 0 ? void 0 : rigidBodyContext.getRigidBody);
|
@@ -1230,15 +1230,15 @@ const AnyCollider = /*#__PURE__*/React$1.memo( /*#__PURE__*/React$1.forwardRef((
|
|
1230
1230
|
}, collider => {
|
1231
1231
|
world.removeCollider(collider);
|
1232
1232
|
});
|
1233
|
-
React
|
1233
|
+
React.useEffect(() => {
|
1234
1234
|
const collider = getInstance();
|
1235
1235
|
colliderStates.set(collider.handle, createColliderState(collider, ref.current, rigidBodyContext === null || rigidBodyContext === void 0 ? void 0 : rigidBodyContext.ref.current));
|
1236
1236
|
return () => {
|
1237
1237
|
colliderStates.delete(collider.handle);
|
1238
1238
|
};
|
1239
1239
|
}, []);
|
1240
|
-
React
|
1241
|
-
const mergedProps = React
|
1240
|
+
React.useImperativeHandle(forwardedRef, () => getInstance());
|
1241
|
+
const mergedProps = React.useMemo(() => {
|
1242
1242
|
return _objectSpread2(_objectSpread2({}, cleanRigidBodyPropsForCollider(rigidBodyContext === null || rigidBodyContext === void 0 ? void 0 : rigidBodyContext.options)), props);
|
1243
1243
|
}, [props, rigidBodyContext === null || rigidBodyContext === void 0 ? void 0 : rigidBodyContext.options]);
|
1244
1244
|
useUpdateColliderOptions(getInstance, mergedProps, colliderStates);
|
@@ -1475,10 +1475,10 @@ const setRigidBodyOptions = (rigidBody, options, states, updateTranslations = tr
|
|
1475
1475
|
};
|
1476
1476
|
const useUpdateRigidBodyOptions = (getRigidBody, props, states, updateTranslations = true) => {
|
1477
1477
|
// TODO: Improve this, split each prop into its own effect
|
1478
|
-
const mutablePropsAsFlatArray = React
|
1478
|
+
const mutablePropsAsFlatArray = React.useMemo(() => mutableRigidBodyOptionKeys.flatMap(key => {
|
1479
1479
|
return vectorToTuple(props[key]);
|
1480
1480
|
}), [props]);
|
1481
|
-
React
|
1481
|
+
React.useEffect(() => {
|
1482
1482
|
const rigidBody = getRigidBody();
|
1483
1483
|
setRigidBodyOptions(rigidBody, props, states, updateTranslations);
|
1484
1484
|
}, mutablePropsAsFlatArray);
|
@@ -1502,7 +1502,7 @@ const useRigidBodyEvents = (getRigidBody, props, events) => {
|
|
1502
1502
|
onIntersectionExit,
|
1503
1503
|
onContactForce
|
1504
1504
|
};
|
1505
|
-
React
|
1505
|
+
React.useEffect(() => {
|
1506
1506
|
const rigidBody = getRigidBody();
|
1507
1507
|
events.set(rigidBody.handle, eventHandlers);
|
1508
1508
|
return () => {
|
@@ -1512,14 +1512,14 @@ const useRigidBodyEvents = (getRigidBody, props, events) => {
|
|
1512
1512
|
};
|
1513
1513
|
|
1514
1514
|
const _excluded$1 = ["children", "type", "position", "rotation", "scale", "quaternion", "transformState"];
|
1515
|
-
const RigidBodyContext = /*#__PURE__*/React
|
1516
|
-
const useRigidBodyContext = () => React
|
1515
|
+
const RigidBodyContext = /*#__PURE__*/React.createContext(undefined);
|
1516
|
+
const useRigidBodyContext = () => React.useContext(RigidBodyContext);
|
1517
1517
|
|
1518
1518
|
/**
|
1519
1519
|
* A rigid body is a physical object that can be simulated by the physics engine.
|
1520
1520
|
* @category Components
|
1521
1521
|
*/
|
1522
|
-
const RigidBody = /*#__PURE__*/React
|
1522
|
+
const RigidBody = /*#__PURE__*/React.memo( /*#__PURE__*/React.forwardRef((props, forwardedRef) => {
|
1523
1523
|
const {
|
1524
1524
|
children,
|
1525
1525
|
type,
|
@@ -1531,14 +1531,14 @@ const RigidBody = /*#__PURE__*/React$1.memo( /*#__PURE__*/React$1.forwardRef((pr
|
|
1531
1531
|
} = props,
|
1532
1532
|
objectProps = _objectWithoutProperties(props, _excluded$1);
|
1533
1533
|
|
1534
|
-
const ref = React
|
1534
|
+
const ref = React.useRef(null);
|
1535
1535
|
const {
|
1536
1536
|
world,
|
1537
1537
|
rigidBodyStates,
|
1538
1538
|
physicsOptions,
|
1539
1539
|
rigidBodyEvents
|
1540
1540
|
} = useRapier();
|
1541
|
-
const mergedOptions = React
|
1541
|
+
const mergedOptions = React.useMemo(() => {
|
1542
1542
|
return _objectSpread2(_objectSpread2(_objectSpread2({}, physicsOptions), props), {}, {
|
1543
1543
|
children: undefined
|
1544
1544
|
});
|
@@ -1553,7 +1553,7 @@ const RigidBody = /*#__PURE__*/React$1.memo( /*#__PURE__*/React$1.forwardRef((pr
|
|
1553
1553
|
world.removeRigidBody(rigidBody);
|
1554
1554
|
}); // Only provide a object state after the ref has been set
|
1555
1555
|
|
1556
|
-
React
|
1556
|
+
React.useEffect(() => {
|
1557
1557
|
const rigidBody = getInstance();
|
1558
1558
|
const state = createRigidBodyState({
|
1559
1559
|
rigidBody,
|
@@ -1566,8 +1566,8 @@ const RigidBody = /*#__PURE__*/React$1.memo( /*#__PURE__*/React$1.forwardRef((pr
|
|
1566
1566
|
}, []);
|
1567
1567
|
useUpdateRigidBodyOptions(getInstance, mergedOptions, rigidBodyStates);
|
1568
1568
|
useRigidBodyEvents(getInstance, mergedOptions, rigidBodyEvents);
|
1569
|
-
React
|
1570
|
-
const contextValue = React
|
1569
|
+
React.useImperativeHandle(forwardedRef, () => getInstance());
|
1570
|
+
const contextValue = React.useMemo(() => {
|
1571
1571
|
return {
|
1572
1572
|
ref,
|
1573
1573
|
getRigidBody: getInstance,
|
@@ -1593,7 +1593,7 @@ RigidBody.displayName = "RigidBody";
|
|
1593
1593
|
* A mesh collider is a collider that is automatically generated from the geometry of the children.
|
1594
1594
|
* @category Colliders
|
1595
1595
|
*/
|
1596
|
-
const MeshCollider = /*#__PURE__*/React
|
1596
|
+
const MeshCollider = /*#__PURE__*/React.memo(props => {
|
1597
1597
|
const {
|
1598
1598
|
children,
|
1599
1599
|
type
|
@@ -1601,11 +1601,11 @@ const MeshCollider = /*#__PURE__*/React$1.memo(props => {
|
|
1601
1601
|
const {
|
1602
1602
|
physicsOptions
|
1603
1603
|
} = useRapier();
|
1604
|
-
const object = React
|
1604
|
+
const object = React.useRef(null);
|
1605
1605
|
const {
|
1606
1606
|
options
|
1607
1607
|
} = useRigidBodyContext();
|
1608
|
-
const mergedOptions = React
|
1608
|
+
const mergedOptions = React.useMemo(() => {
|
1609
1609
|
return _objectSpread2(_objectSpread2(_objectSpread2({}, physicsOptions), options), {}, {
|
1610
1610
|
children: undefined,
|
1611
1611
|
colliders: type
|
@@ -1645,10 +1645,10 @@ const AttractorHelper = props => {
|
|
1645
1645
|
const {
|
1646
1646
|
scene
|
1647
1647
|
} = fiber.useThree();
|
1648
|
-
const ref = React
|
1649
|
-
const normalsHelper = React
|
1648
|
+
const ref = React.useRef(null);
|
1649
|
+
const normalsHelper = React.useRef();
|
1650
1650
|
const color = props.strength > 0 ? 0x0000ff : 0xff0000;
|
1651
|
-
React
|
1651
|
+
React.useEffect(() => {
|
1652
1652
|
if (ref.current) {
|
1653
1653
|
normalsHelper.current = new threeStdlib.VertexNormalsHelper(ref.current, props.range, color);
|
1654
1654
|
normalsHelper.current.frustumCulled = false;
|
@@ -1682,14 +1682,14 @@ const AttractorHelper = props => {
|
|
1682
1682
|
}));
|
1683
1683
|
};
|
1684
1684
|
|
1685
|
-
const Debug = /*#__PURE__*/React
|
1685
|
+
const Debug = /*#__PURE__*/React.memo(() => {
|
1686
1686
|
const {
|
1687
1687
|
world,
|
1688
1688
|
attractorStates
|
1689
1689
|
} = useRapier();
|
1690
|
-
const ref = React
|
1691
|
-
const [attractors, setAttractors] = React
|
1692
|
-
const currMap = React
|
1690
|
+
const ref = React.useRef(null);
|
1691
|
+
const [attractors, setAttractors] = React.useState([]);
|
1692
|
+
const currMap = React.useRef(new Map());
|
1693
1693
|
fiber.useFrame(() => {
|
1694
1694
|
const mesh = ref.current;
|
1695
1695
|
if (!mesh) return;
|
@@ -1714,9 +1714,9 @@ const Debug = /*#__PURE__*/React$1.memo(() => {
|
|
1714
1714
|
});
|
1715
1715
|
|
1716
1716
|
const _excluded = ["children", "instances", "colliderNodes", "position", "rotation", "quaternion", "scale"];
|
1717
|
-
const InstancedRigidBodies = /*#__PURE__*/React
|
1718
|
-
const object = React
|
1719
|
-
const instancedWrapper = React
|
1717
|
+
const InstancedRigidBodies = /*#__PURE__*/React.memo( /*#__PURE__*/React.forwardRef((props, ref) => {
|
1718
|
+
const object = React.useRef(null);
|
1719
|
+
const instancedWrapper = React.useRef(null);
|
1720
1720
|
|
1721
1721
|
const {
|
1722
1722
|
// instanced props
|
@@ -1731,8 +1731,8 @@ const InstancedRigidBodies = /*#__PURE__*/React$1.memo( /*#__PURE__*/React$1.for
|
|
1731
1731
|
} = props,
|
1732
1732
|
rigidBodyProps = _objectWithoutProperties(props, _excluded);
|
1733
1733
|
|
1734
|
-
const rigidBodyApis = React
|
1735
|
-
React
|
1734
|
+
const rigidBodyApis = React.useRef([]);
|
1735
|
+
React.useImperativeHandle(ref, () => rigidBodyApis.current, [instances]);
|
1736
1736
|
const childColliderProps = useChildColliderProps(object, _objectSpread2(_objectSpread2({}, props), {}, {
|
1737
1737
|
children: undefined
|
1738
1738
|
}));
|
@@ -1747,7 +1747,7 @@ const InstancedRigidBodies = /*#__PURE__*/React$1.memo( /*#__PURE__*/React$1.for
|
|
1747
1747
|
return undefined;
|
1748
1748
|
};
|
1749
1749
|
|
1750
|
-
React
|
1750
|
+
React.useEffect(() => {
|
1751
1751
|
const instancedMesh = getInstancedMesh();
|
1752
1752
|
|
1753
1753
|
if (instancedMesh) {
|
@@ -1789,7 +1789,7 @@ const InstancedRigidBodies = /*#__PURE__*/React$1.memo( /*#__PURE__*/React$1.for
|
|
1789
1789
|
}, children), instances === null || instances === void 0 ? void 0 : instances.map((instance, index) => /*#__PURE__*/React__default["default"].createElement(RigidBody, _extends({}, rigidBodyProps, instance, {
|
1790
1790
|
ref: body => rigidBodyApis.current[index] = body,
|
1791
1791
|
transformState: state => applyInstancedState(state, index)
|
1792
|
-
}), /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, colliderNodes.map((node, index) => /*#__PURE__*/React__default["default"].createElement(React
|
1792
|
+
}), /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, colliderNodes.map((node, index) => /*#__PURE__*/React__default["default"].createElement(React.Fragment, {
|
1793
1793
|
key: index
|
1794
1794
|
}, node)), childColliderProps.map((colliderProps, colliderIndex) => /*#__PURE__*/React__default["default"].createElement(AnyCollider, _extends({
|
1795
1795
|
key: colliderIndex
|
@@ -1805,7 +1805,7 @@ const useImpulseJoint = (body1, body2, params) => {
|
|
1805
1805
|
const {
|
1806
1806
|
world
|
1807
1807
|
} = useRapier();
|
1808
|
-
const jointRef = React
|
1808
|
+
const jointRef = React.useRef();
|
1809
1809
|
useImperativeInstance(() => {
|
1810
1810
|
if (body1.current && body2.current) {
|
1811
1811
|
const newJoint = world.createImpulseJoint(params, body1.current, body2.current);
|
@@ -4,7 +4,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
5
5
|
var rapier3dCompat = require('@dimforge/rapier3d-compat');
|
6
6
|
var fiber = require('@react-three/fiber');
|
7
|
-
var React
|
7
|
+
var React = require('react');
|
8
8
|
var three = require('three');
|
9
9
|
var useAsset = require('use-asset');
|
10
10
|
var threeStdlib = require('three-stdlib');
|
@@ -29,7 +29,7 @@ function _interopNamespace(e) {
|
|
29
29
|
return Object.freeze(n);
|
30
30
|
}
|
31
31
|
|
32
|
-
var React__default = /*#__PURE__*/_interopDefault(React
|
32
|
+
var React__default = /*#__PURE__*/_interopDefault(React);
|
33
33
|
|
34
34
|
function _defineProperty(obj, key, value) {
|
35
35
|
if (key in obj) {
|
@@ -167,7 +167,7 @@ const vectorToTuple = v => {
|
|
167
167
|
return [v];
|
168
168
|
};
|
169
169
|
function useConst(initialValue) {
|
170
|
-
const ref = React
|
170
|
+
const ref = React.useRef();
|
171
171
|
|
172
172
|
if (ref.current === undefined) {
|
173
173
|
ref.current = {
|
@@ -344,10 +344,10 @@ const setColliderOptions = (collider, options, states) => {
|
|
344
344
|
};
|
345
345
|
const useUpdateColliderOptions = (getCollider, props, states) => {
|
346
346
|
// TODO: Improve this, split each prop into its own effect
|
347
|
-
const mutablePropsAsFlatArray = React
|
347
|
+
const mutablePropsAsFlatArray = React.useMemo(() => mutableColliderOptionKeys.flatMap(key => {
|
348
348
|
return vectorToTuple(props[key]);
|
349
349
|
}), [props]);
|
350
|
-
React
|
350
|
+
React.useEffect(() => {
|
351
351
|
const collider = getCollider();
|
352
352
|
setColliderOptions(collider, props, states);
|
353
353
|
}, mutablePropsAsFlatArray);
|
@@ -493,7 +493,7 @@ activeEvents = {}) => {
|
|
493
493
|
onIntersectionExit,
|
494
494
|
onContactForce
|
495
495
|
} = props;
|
496
|
-
React
|
496
|
+
React.useEffect(() => {
|
497
497
|
const collider = getCollider();
|
498
498
|
|
499
499
|
if (collider) {
|
@@ -535,8 +535,8 @@ const cleanRigidBodyPropsForCollider = (props = {}) => {
|
|
535
535
|
};
|
536
536
|
|
537
537
|
const useMutableCallback = fn => {
|
538
|
-
const ref = React
|
539
|
-
React
|
538
|
+
const ref = React.useRef(fn);
|
539
|
+
React.useEffect(() => {
|
540
540
|
ref.current = fn;
|
541
541
|
}, [fn]);
|
542
542
|
return ref;
|
@@ -549,7 +549,7 @@ const useMutableCallback = fn => {
|
|
549
549
|
|
550
550
|
|
551
551
|
const useRapier = () => {
|
552
|
-
return React
|
552
|
+
return React.useContext(rapierContext);
|
553
553
|
};
|
554
554
|
/**
|
555
555
|
* Registers a callback to be called before the physics step
|
@@ -561,7 +561,7 @@ const useBeforePhysicsStep = callback => {
|
|
561
561
|
beforeStepCallbacks
|
562
562
|
} = useRapier();
|
563
563
|
const ref = useMutableCallback(callback);
|
564
|
-
React
|
564
|
+
React.useEffect(() => {
|
565
565
|
beforeStepCallbacks.add(ref);
|
566
566
|
return () => {
|
567
567
|
beforeStepCallbacks.delete(ref);
|
@@ -578,7 +578,7 @@ const useAfterPhysicsStep = callback => {
|
|
578
578
|
afterStepCallbacks
|
579
579
|
} = useRapier();
|
580
580
|
const ref = useMutableCallback(callback);
|
581
|
-
React
|
581
|
+
React.useEffect(() => {
|
582
582
|
afterStepCallbacks.add(ref);
|
583
583
|
return () => {
|
584
584
|
afterStepCallbacks.delete(ref);
|
@@ -591,8 +591,8 @@ const useAfterPhysicsStep = callback => {
|
|
591
591
|
*/
|
592
592
|
|
593
593
|
const useChildColliderProps = (ref, options, ignoreMeshColliders = true) => {
|
594
|
-
const [colliderProps, setColliderProps] = React
|
595
|
-
React
|
594
|
+
const [colliderProps, setColliderProps] = React.useState([]);
|
595
|
+
React.useEffect(() => {
|
596
596
|
const object = ref.current;
|
597
597
|
|
598
598
|
if (object && options.colliders !== false) {
|
@@ -652,7 +652,7 @@ const applyAttractorForceOnRigidBody = (rigidBody, {
|
|
652
652
|
}
|
653
653
|
}
|
654
654
|
};
|
655
|
-
const Attractor = /*#__PURE__*/React
|
655
|
+
const Attractor = /*#__PURE__*/React.memo(props => {
|
656
656
|
const {
|
657
657
|
position = [0, 0, 0],
|
658
658
|
strength = 1,
|
@@ -664,8 +664,8 @@ const Attractor = /*#__PURE__*/React$1.memo(props => {
|
|
664
664
|
const {
|
665
665
|
attractorStates
|
666
666
|
} = useRapier();
|
667
|
-
const object = React
|
668
|
-
React
|
667
|
+
const object = React.useRef(null);
|
668
|
+
React.useEffect(() => {
|
669
669
|
var _object$current;
|
670
670
|
|
671
671
|
let uuid = ((_object$current = object.current) === null || _object$current === void 0 ? void 0 : _object$current.uuid) || "_";
|
@@ -692,13 +692,13 @@ const Attractor = /*#__PURE__*/React$1.memo(props => {
|
|
692
692
|
});
|
693
693
|
|
694
694
|
const useRaf = callback => {
|
695
|
-
const cb = React
|
696
|
-
const raf = React
|
697
|
-
const lastFrame = React
|
698
|
-
React
|
695
|
+
const cb = React.useRef(callback);
|
696
|
+
const raf = React.useRef(0);
|
697
|
+
const lastFrame = React.useRef(0);
|
698
|
+
React.useEffect(() => {
|
699
699
|
cb.current = callback;
|
700
700
|
}, [callback]);
|
701
|
-
React
|
701
|
+
React.useEffect(() => {
|
702
702
|
const loop = () => {
|
703
703
|
const now = performance.now();
|
704
704
|
const delta = now - lastFrame.current;
|
@@ -736,17 +736,17 @@ const FrameStepper = ({
|
|
736
736
|
type,
|
737
737
|
updatePriority
|
738
738
|
}) => {
|
739
|
-
return type === "independent" ? /*#__PURE__*/
|
739
|
+
return type === "independent" ? /*#__PURE__*/React__default["default"].createElement(RafStepper, {
|
740
740
|
onStep: onStep
|
741
|
-
}) : /*#__PURE__*/
|
741
|
+
}) : /*#__PURE__*/React__default["default"].createElement(UseFrameStepper, {
|
742
742
|
onStep: onStep,
|
743
743
|
updatePriority: updatePriority
|
744
744
|
});
|
745
745
|
};
|
746
746
|
|
747
|
-
var FrameStepper$1 = /*#__PURE__*/React
|
747
|
+
var FrameStepper$1 = /*#__PURE__*/React.memo(FrameStepper);
|
748
748
|
|
749
|
-
const rapierContext = /*#__PURE__*/React
|
749
|
+
const rapierContext = /*#__PURE__*/React.createContext(undefined);
|
750
750
|
|
751
751
|
const getCollisionPayloadFromSource = (target, other) => {
|
752
752
|
var _target$collider$stat, _target$rigidBody$sta, _other$collider$state, _other$rigidBody$stat, _other$collider$state2, _other$rigidBody$stat2;
|
@@ -795,8 +795,8 @@ const Physics = ({
|
|
795
795
|
const {
|
796
796
|
invalidate
|
797
797
|
} = fiber.useThree();
|
798
|
-
const worldRef = React
|
799
|
-
const getWorldRef = React
|
798
|
+
const worldRef = React.useRef();
|
799
|
+
const getWorldRef = React.useRef(() => {
|
800
800
|
if (!worldRef.current) {
|
801
801
|
const world = new rapier.World(vectorArrayToVector3(_gravity));
|
802
802
|
worldRef.current = world;
|
@@ -813,7 +813,7 @@ const Physics = ({
|
|
813
813
|
const beforeStepCallbacks = useConst(() => new Set());
|
814
814
|
const afterStepCallbacks = useConst(() => new Set()); // Init world
|
815
815
|
|
816
|
-
React
|
816
|
+
React.useEffect(() => {
|
817
817
|
const world = getWorldRef.current();
|
818
818
|
return () => {
|
819
819
|
if (world) {
|
@@ -823,15 +823,15 @@ const Physics = ({
|
|
823
823
|
};
|
824
824
|
}, []); // Update gravity
|
825
825
|
|
826
|
-
React
|
826
|
+
React.useEffect(() => {
|
827
827
|
const world = worldRef.current;
|
828
828
|
|
829
829
|
if (world) {
|
830
830
|
world.gravity = vectorArrayToVector3(_gravity);
|
831
831
|
}
|
832
832
|
}, [_gravity]);
|
833
|
-
const api = React
|
834
|
-
const getSourceFromColliderHandle = React
|
833
|
+
const api = React.useMemo(() => createWorldApi(getWorldRef), []);
|
834
|
+
const getSourceFromColliderHandle = React.useCallback(handle => {
|
835
835
|
const world = worldRef.current;
|
836
836
|
|
837
837
|
if (world) {
|
@@ -859,11 +859,11 @@ const Physics = ({
|
|
859
859
|
return source;
|
860
860
|
}
|
861
861
|
}, []);
|
862
|
-
const [steppingState] = React
|
862
|
+
const [steppingState] = React.useState({
|
863
863
|
previousState: {},
|
864
864
|
accumulator: 0
|
865
865
|
});
|
866
|
-
const step = React
|
866
|
+
const step = React.useCallback(dt => {
|
867
867
|
const world = worldRef.current;
|
868
868
|
if (!world) return;
|
869
869
|
/* Check if the timestep is supposed to be variable. We'll do this here
|
@@ -1079,7 +1079,7 @@ const Physics = ({
|
|
1079
1079
|
invalidate();
|
1080
1080
|
});
|
1081
1081
|
}, [_paused, _timeStep, _interpolate]);
|
1082
|
-
const context = React
|
1082
|
+
const context = React.useMemo(() => ({
|
1083
1083
|
rapier,
|
1084
1084
|
world: api,
|
1085
1085
|
physicsOptions: {
|
@@ -1096,7 +1096,7 @@ const Physics = ({
|
|
1096
1096
|
isPaused: _paused,
|
1097
1097
|
step
|
1098
1098
|
}), [_paused, step]);
|
1099
|
-
const stepCallback = React
|
1099
|
+
const stepCallback = React.useCallback(delta => {
|
1100
1100
|
if (!_paused) {
|
1101
1101
|
step(delta);
|
1102
1102
|
}
|
@@ -1132,15 +1132,15 @@ function _extends() {
|
|
1132
1132
|
*/
|
1133
1133
|
|
1134
1134
|
const useImperativeInstance = (createFn, destroyFn) => {
|
1135
|
-
const ref = React
|
1136
|
-
const refGetter = React
|
1135
|
+
const ref = React.useRef();
|
1136
|
+
const refGetter = React.useMemo(() => () => {
|
1137
1137
|
if (!ref.current) {
|
1138
1138
|
ref.current = createFn();
|
1139
1139
|
}
|
1140
1140
|
|
1141
1141
|
return ref.current;
|
1142
1142
|
}, []);
|
1143
|
-
React
|
1143
|
+
React.useEffect(() => {
|
1144
1144
|
const instance = refGetter();
|
1145
1145
|
return () => {
|
1146
1146
|
destroyFn(instance);
|
@@ -1207,7 +1207,7 @@ const euler = ({
|
|
1207
1207
|
* A collider is a shape that can be attached to a rigid body to define its physical properties.
|
1208
1208
|
* @internal
|
1209
1209
|
*/
|
1210
|
-
const AnyCollider = /*#__PURE__*/React
|
1210
|
+
const AnyCollider = /*#__PURE__*/React.memo( /*#__PURE__*/React.forwardRef((props, forwardedRef) => {
|
1211
1211
|
const {
|
1212
1212
|
children,
|
1213
1213
|
position,
|
@@ -1222,7 +1222,7 @@ const AnyCollider = /*#__PURE__*/React$1.memo( /*#__PURE__*/React$1.forwardRef((
|
|
1222
1222
|
colliderStates
|
1223
1223
|
} = useRapier();
|
1224
1224
|
const rigidBodyContext = useRigidBodyContext();
|
1225
|
-
const ref = React
|
1225
|
+
const ref = React.useRef(null);
|
1226
1226
|
const getInstance = useImperativeInstance(() => {
|
1227
1227
|
const worldScale = ref.current.getWorldScale(vec3());
|
1228
1228
|
const collider = createColliderFromOptions(props, world, worldScale, rigidBodyContext === null || rigidBodyContext === void 0 ? void 0 : rigidBodyContext.getRigidBody);
|
@@ -1230,15 +1230,15 @@ const AnyCollider = /*#__PURE__*/React$1.memo( /*#__PURE__*/React$1.forwardRef((
|
|
1230
1230
|
}, collider => {
|
1231
1231
|
world.removeCollider(collider);
|
1232
1232
|
});
|
1233
|
-
React
|
1233
|
+
React.useEffect(() => {
|
1234
1234
|
const collider = getInstance();
|
1235
1235
|
colliderStates.set(collider.handle, createColliderState(collider, ref.current, rigidBodyContext === null || rigidBodyContext === void 0 ? void 0 : rigidBodyContext.ref.current));
|
1236
1236
|
return () => {
|
1237
1237
|
colliderStates.delete(collider.handle);
|
1238
1238
|
};
|
1239
1239
|
}, []);
|
1240
|
-
React
|
1241
|
-
const mergedProps = React
|
1240
|
+
React.useImperativeHandle(forwardedRef, () => getInstance());
|
1241
|
+
const mergedProps = React.useMemo(() => {
|
1242
1242
|
return _objectSpread2(_objectSpread2({}, cleanRigidBodyPropsForCollider(rigidBodyContext === null || rigidBodyContext === void 0 ? void 0 : rigidBodyContext.options)), props);
|
1243
1243
|
}, [props, rigidBodyContext === null || rigidBodyContext === void 0 ? void 0 : rigidBodyContext.options]);
|
1244
1244
|
useUpdateColliderOptions(getInstance, mergedProps, colliderStates);
|
@@ -1475,10 +1475,10 @@ const setRigidBodyOptions = (rigidBody, options, states, updateTranslations = tr
|
|
1475
1475
|
};
|
1476
1476
|
const useUpdateRigidBodyOptions = (getRigidBody, props, states, updateTranslations = true) => {
|
1477
1477
|
// TODO: Improve this, split each prop into its own effect
|
1478
|
-
const mutablePropsAsFlatArray = React
|
1478
|
+
const mutablePropsAsFlatArray = React.useMemo(() => mutableRigidBodyOptionKeys.flatMap(key => {
|
1479
1479
|
return vectorToTuple(props[key]);
|
1480
1480
|
}), [props]);
|
1481
|
-
React
|
1481
|
+
React.useEffect(() => {
|
1482
1482
|
const rigidBody = getRigidBody();
|
1483
1483
|
setRigidBodyOptions(rigidBody, props, states, updateTranslations);
|
1484
1484
|
}, mutablePropsAsFlatArray);
|
@@ -1502,7 +1502,7 @@ const useRigidBodyEvents = (getRigidBody, props, events) => {
|
|
1502
1502
|
onIntersectionExit,
|
1503
1503
|
onContactForce
|
1504
1504
|
};
|
1505
|
-
React
|
1505
|
+
React.useEffect(() => {
|
1506
1506
|
const rigidBody = getRigidBody();
|
1507
1507
|
events.set(rigidBody.handle, eventHandlers);
|
1508
1508
|
return () => {
|
@@ -1512,14 +1512,14 @@ const useRigidBodyEvents = (getRigidBody, props, events) => {
|
|
1512
1512
|
};
|
1513
1513
|
|
1514
1514
|
const _excluded$1 = ["children", "type", "position", "rotation", "scale", "quaternion", "transformState"];
|
1515
|
-
const RigidBodyContext = /*#__PURE__*/React
|
1516
|
-
const useRigidBodyContext = () => React
|
1515
|
+
const RigidBodyContext = /*#__PURE__*/React.createContext(undefined);
|
1516
|
+
const useRigidBodyContext = () => React.useContext(RigidBodyContext);
|
1517
1517
|
|
1518
1518
|
/**
|
1519
1519
|
* A rigid body is a physical object that can be simulated by the physics engine.
|
1520
1520
|
* @category Components
|
1521
1521
|
*/
|
1522
|
-
const RigidBody = /*#__PURE__*/React
|
1522
|
+
const RigidBody = /*#__PURE__*/React.memo( /*#__PURE__*/React.forwardRef((props, forwardedRef) => {
|
1523
1523
|
const {
|
1524
1524
|
children,
|
1525
1525
|
type,
|
@@ -1531,14 +1531,14 @@ const RigidBody = /*#__PURE__*/React$1.memo( /*#__PURE__*/React$1.forwardRef((pr
|
|
1531
1531
|
} = props,
|
1532
1532
|
objectProps = _objectWithoutProperties(props, _excluded$1);
|
1533
1533
|
|
1534
|
-
const ref = React
|
1534
|
+
const ref = React.useRef(null);
|
1535
1535
|
const {
|
1536
1536
|
world,
|
1537
1537
|
rigidBodyStates,
|
1538
1538
|
physicsOptions,
|
1539
1539
|
rigidBodyEvents
|
1540
1540
|
} = useRapier();
|
1541
|
-
const mergedOptions = React
|
1541
|
+
const mergedOptions = React.useMemo(() => {
|
1542
1542
|
return _objectSpread2(_objectSpread2(_objectSpread2({}, physicsOptions), props), {}, {
|
1543
1543
|
children: undefined
|
1544
1544
|
});
|
@@ -1553,7 +1553,7 @@ const RigidBody = /*#__PURE__*/React$1.memo( /*#__PURE__*/React$1.forwardRef((pr
|
|
1553
1553
|
world.removeRigidBody(rigidBody);
|
1554
1554
|
}); // Only provide a object state after the ref has been set
|
1555
1555
|
|
1556
|
-
React
|
1556
|
+
React.useEffect(() => {
|
1557
1557
|
const rigidBody = getInstance();
|
1558
1558
|
const state = createRigidBodyState({
|
1559
1559
|
rigidBody,
|
@@ -1566,8 +1566,8 @@ const RigidBody = /*#__PURE__*/React$1.memo( /*#__PURE__*/React$1.forwardRef((pr
|
|
1566
1566
|
}, []);
|
1567
1567
|
useUpdateRigidBodyOptions(getInstance, mergedOptions, rigidBodyStates);
|
1568
1568
|
useRigidBodyEvents(getInstance, mergedOptions, rigidBodyEvents);
|
1569
|
-
React
|
1570
|
-
const contextValue = React
|
1569
|
+
React.useImperativeHandle(forwardedRef, () => getInstance());
|
1570
|
+
const contextValue = React.useMemo(() => {
|
1571
1571
|
return {
|
1572
1572
|
ref,
|
1573
1573
|
getRigidBody: getInstance,
|
@@ -1593,7 +1593,7 @@ RigidBody.displayName = "RigidBody";
|
|
1593
1593
|
* A mesh collider is a collider that is automatically generated from the geometry of the children.
|
1594
1594
|
* @category Colliders
|
1595
1595
|
*/
|
1596
|
-
const MeshCollider = /*#__PURE__*/React
|
1596
|
+
const MeshCollider = /*#__PURE__*/React.memo(props => {
|
1597
1597
|
const {
|
1598
1598
|
children,
|
1599
1599
|
type
|
@@ -1601,11 +1601,11 @@ const MeshCollider = /*#__PURE__*/React$1.memo(props => {
|
|
1601
1601
|
const {
|
1602
1602
|
physicsOptions
|
1603
1603
|
} = useRapier();
|
1604
|
-
const object = React
|
1604
|
+
const object = React.useRef(null);
|
1605
1605
|
const {
|
1606
1606
|
options
|
1607
1607
|
} = useRigidBodyContext();
|
1608
|
-
const mergedOptions = React
|
1608
|
+
const mergedOptions = React.useMemo(() => {
|
1609
1609
|
return _objectSpread2(_objectSpread2(_objectSpread2({}, physicsOptions), options), {}, {
|
1610
1610
|
children: undefined,
|
1611
1611
|
colliders: type
|
@@ -1645,10 +1645,10 @@ const AttractorHelper = props => {
|
|
1645
1645
|
const {
|
1646
1646
|
scene
|
1647
1647
|
} = fiber.useThree();
|
1648
|
-
const ref = React
|
1649
|
-
const normalsHelper = React
|
1648
|
+
const ref = React.useRef(null);
|
1649
|
+
const normalsHelper = React.useRef();
|
1650
1650
|
const color = props.strength > 0 ? 0x0000ff : 0xff0000;
|
1651
|
-
React
|
1651
|
+
React.useEffect(() => {
|
1652
1652
|
if (ref.current) {
|
1653
1653
|
normalsHelper.current = new threeStdlib.VertexNormalsHelper(ref.current, props.range, color);
|
1654
1654
|
normalsHelper.current.frustumCulled = false;
|
@@ -1682,14 +1682,14 @@ const AttractorHelper = props => {
|
|
1682
1682
|
}));
|
1683
1683
|
};
|
1684
1684
|
|
1685
|
-
const Debug = /*#__PURE__*/React
|
1685
|
+
const Debug = /*#__PURE__*/React.memo(() => {
|
1686
1686
|
const {
|
1687
1687
|
world,
|
1688
1688
|
attractorStates
|
1689
1689
|
} = useRapier();
|
1690
|
-
const ref = React
|
1691
|
-
const [attractors, setAttractors] = React
|
1692
|
-
const currMap = React
|
1690
|
+
const ref = React.useRef(null);
|
1691
|
+
const [attractors, setAttractors] = React.useState([]);
|
1692
|
+
const currMap = React.useRef(new Map());
|
1693
1693
|
fiber.useFrame(() => {
|
1694
1694
|
const mesh = ref.current;
|
1695
1695
|
if (!mesh) return;
|
@@ -1714,9 +1714,9 @@ const Debug = /*#__PURE__*/React$1.memo(() => {
|
|
1714
1714
|
});
|
1715
1715
|
|
1716
1716
|
const _excluded = ["children", "instances", "colliderNodes", "position", "rotation", "quaternion", "scale"];
|
1717
|
-
const InstancedRigidBodies = /*#__PURE__*/React
|
1718
|
-
const object = React
|
1719
|
-
const instancedWrapper = React
|
1717
|
+
const InstancedRigidBodies = /*#__PURE__*/React.memo( /*#__PURE__*/React.forwardRef((props, ref) => {
|
1718
|
+
const object = React.useRef(null);
|
1719
|
+
const instancedWrapper = React.useRef(null);
|
1720
1720
|
|
1721
1721
|
const {
|
1722
1722
|
// instanced props
|
@@ -1731,8 +1731,8 @@ const InstancedRigidBodies = /*#__PURE__*/React$1.memo( /*#__PURE__*/React$1.for
|
|
1731
1731
|
} = props,
|
1732
1732
|
rigidBodyProps = _objectWithoutProperties(props, _excluded);
|
1733
1733
|
|
1734
|
-
const rigidBodyApis = React
|
1735
|
-
React
|
1734
|
+
const rigidBodyApis = React.useRef([]);
|
1735
|
+
React.useImperativeHandle(ref, () => rigidBodyApis.current, [instances]);
|
1736
1736
|
const childColliderProps = useChildColliderProps(object, _objectSpread2(_objectSpread2({}, props), {}, {
|
1737
1737
|
children: undefined
|
1738
1738
|
}));
|
@@ -1747,7 +1747,7 @@ const InstancedRigidBodies = /*#__PURE__*/React$1.memo( /*#__PURE__*/React$1.for
|
|
1747
1747
|
return undefined;
|
1748
1748
|
};
|
1749
1749
|
|
1750
|
-
React
|
1750
|
+
React.useEffect(() => {
|
1751
1751
|
const instancedMesh = getInstancedMesh();
|
1752
1752
|
|
1753
1753
|
if (instancedMesh) {
|
@@ -1789,7 +1789,7 @@ const InstancedRigidBodies = /*#__PURE__*/React$1.memo( /*#__PURE__*/React$1.for
|
|
1789
1789
|
}, children), instances === null || instances === void 0 ? void 0 : instances.map((instance, index) => /*#__PURE__*/React__default["default"].createElement(RigidBody, _extends({}, rigidBodyProps, instance, {
|
1790
1790
|
ref: body => rigidBodyApis.current[index] = body,
|
1791
1791
|
transformState: state => applyInstancedState(state, index)
|
1792
|
-
}), /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, colliderNodes.map((node, index) => /*#__PURE__*/React__default["default"].createElement(React
|
1792
|
+
}), /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, colliderNodes.map((node, index) => /*#__PURE__*/React__default["default"].createElement(React.Fragment, {
|
1793
1793
|
key: index
|
1794
1794
|
}, node)), childColliderProps.map((colliderProps, colliderIndex) => /*#__PURE__*/React__default["default"].createElement(AnyCollider, _extends({
|
1795
1795
|
key: colliderIndex
|
@@ -1805,7 +1805,7 @@ const useImpulseJoint = (body1, body2, params) => {
|
|
1805
1805
|
const {
|
1806
1806
|
world
|
1807
1807
|
} = useRapier();
|
1808
|
-
const jointRef = React
|
1808
|
+
const jointRef = React.useRef();
|
1809
1809
|
useImperativeInstance(() => {
|
1810
1810
|
if (body1.current && body2.current) {
|
1811
1811
|
const newJoint = world.createImpulseJoint(params, body1.current, body2.current);
|
@@ -1,7 +1,7 @@
|
|
1
1
|
import { ActiveEvents, ColliderDesc, EventQueue, RigidBodyDesc } from '@dimforge/rapier3d-compat';
|
2
2
|
export { CoefficientCombineRule, Collider as RapierCollider, RigidBody as RapierRigidBody } from '@dimforge/rapier3d-compat';
|
3
3
|
import { useFrame, useThree } from '@react-three/fiber';
|
4
|
-
import React
|
4
|
+
import React, { useRef, useMemo, useEffect, useContext, useState, memo, createContext, useCallback, forwardRef, useImperativeHandle, Fragment } from 'react';
|
5
5
|
import { Quaternion, Euler, Vector3, Object3D, Matrix4, MathUtils, BufferAttribute, DynamicDrawUsage } from 'three';
|
6
6
|
import { useAsset } from 'use-asset';
|
7
7
|
import { mergeVertices, VertexNormalsHelper } from 'three-stdlib';
|
@@ -660,7 +660,7 @@ const Attractor = /*#__PURE__*/memo(props => {
|
|
660
660
|
attractorStates.delete(uuid);
|
661
661
|
};
|
662
662
|
}, [props]);
|
663
|
-
return /*#__PURE__*/React
|
663
|
+
return /*#__PURE__*/React.createElement("object3D", {
|
664
664
|
ref: object,
|
665
665
|
position: position
|
666
666
|
});
|
@@ -1076,9 +1076,9 @@ const Physics = ({
|
|
1076
1076
|
step(delta);
|
1077
1077
|
}
|
1078
1078
|
}, [_paused, step]);
|
1079
|
-
return /*#__PURE__*/React
|
1079
|
+
return /*#__PURE__*/React.createElement(rapierContext.Provider, {
|
1080
1080
|
value: context
|
1081
|
-
}, /*#__PURE__*/React
|
1081
|
+
}, /*#__PURE__*/React.createElement(FrameStepper$1, {
|
1082
1082
|
onStep: stepCallback,
|
1083
1083
|
type: _updateLoop,
|
1084
1084
|
updatePriority: updatePriority
|
@@ -1218,7 +1218,7 @@ const AnyCollider = /*#__PURE__*/memo( /*#__PURE__*/forwardRef((props, forwarded
|
|
1218
1218
|
}, [props, rigidBodyContext === null || rigidBodyContext === void 0 ? void 0 : rigidBodyContext.options]);
|
1219
1219
|
useUpdateColliderOptions(getInstance, mergedProps, colliderStates);
|
1220
1220
|
useColliderEvents(getInstance, mergedProps, colliderEvents, getActiveCollisionEventsFromProps(rigidBodyContext === null || rigidBodyContext === void 0 ? void 0 : rigidBodyContext.options));
|
1221
|
-
return /*#__PURE__*/React
|
1221
|
+
return /*#__PURE__*/React.createElement("object3D", {
|
1222
1222
|
position: position,
|
1223
1223
|
rotation: rotation,
|
1224
1224
|
quaternion: quaternion,
|
@@ -1232,8 +1232,8 @@ const AnyCollider = /*#__PURE__*/memo( /*#__PURE__*/forwardRef((props, forwarded
|
|
1232
1232
|
* A cuboid collider shape
|
1233
1233
|
* @category Colliders
|
1234
1234
|
*/
|
1235
|
-
const CuboidCollider = /*#__PURE__*/React
|
1236
|
-
return /*#__PURE__*/React
|
1235
|
+
const CuboidCollider = /*#__PURE__*/React.forwardRef((props, ref) => {
|
1236
|
+
return /*#__PURE__*/React.createElement(AnyCollider, _extends({}, props, {
|
1237
1237
|
shape: "cuboid",
|
1238
1238
|
ref: ref
|
1239
1239
|
}));
|
@@ -1243,8 +1243,8 @@ const CuboidCollider = /*#__PURE__*/React$1.forwardRef((props, ref) => {
|
|
1243
1243
|
* @category Colliders
|
1244
1244
|
*/
|
1245
1245
|
|
1246
|
-
const RoundCuboidCollider = /*#__PURE__*/React
|
1247
|
-
return /*#__PURE__*/React
|
1246
|
+
const RoundCuboidCollider = /*#__PURE__*/React.forwardRef((props, ref) => {
|
1247
|
+
return /*#__PURE__*/React.createElement(AnyCollider, _extends({}, props, {
|
1248
1248
|
shape: "roundCuboid",
|
1249
1249
|
ref: ref
|
1250
1250
|
}));
|
@@ -1254,8 +1254,8 @@ const RoundCuboidCollider = /*#__PURE__*/React$1.forwardRef((props, ref) => {
|
|
1254
1254
|
* @category Colliders
|
1255
1255
|
*/
|
1256
1256
|
|
1257
|
-
const BallCollider = /*#__PURE__*/React
|
1258
|
-
return /*#__PURE__*/React
|
1257
|
+
const BallCollider = /*#__PURE__*/React.forwardRef((props, ref) => {
|
1258
|
+
return /*#__PURE__*/React.createElement(AnyCollider, _extends({}, props, {
|
1259
1259
|
shape: "ball",
|
1260
1260
|
ref: ref
|
1261
1261
|
}));
|
@@ -1265,8 +1265,8 @@ const BallCollider = /*#__PURE__*/React$1.forwardRef((props, ref) => {
|
|
1265
1265
|
* @category Colliders
|
1266
1266
|
*/
|
1267
1267
|
|
1268
|
-
const CapsuleCollider = /*#__PURE__*/React
|
1269
|
-
return /*#__PURE__*/React
|
1268
|
+
const CapsuleCollider = /*#__PURE__*/React.forwardRef((props, ref) => {
|
1269
|
+
return /*#__PURE__*/React.createElement(AnyCollider, _extends({}, props, {
|
1270
1270
|
shape: "capsule",
|
1271
1271
|
ref: ref
|
1272
1272
|
}));
|
@@ -1276,8 +1276,8 @@ const CapsuleCollider = /*#__PURE__*/React$1.forwardRef((props, ref) => {
|
|
1276
1276
|
* @category Colliders
|
1277
1277
|
*/
|
1278
1278
|
|
1279
|
-
const HeightfieldCollider = /*#__PURE__*/React
|
1280
|
-
return /*#__PURE__*/React
|
1279
|
+
const HeightfieldCollider = /*#__PURE__*/React.forwardRef((props, ref) => {
|
1280
|
+
return /*#__PURE__*/React.createElement(AnyCollider, _extends({}, props, {
|
1281
1281
|
shape: "heightfield",
|
1282
1282
|
ref: ref
|
1283
1283
|
}));
|
@@ -1287,8 +1287,8 @@ const HeightfieldCollider = /*#__PURE__*/React$1.forwardRef((props, ref) => {
|
|
1287
1287
|
* @category Colliders
|
1288
1288
|
*/
|
1289
1289
|
|
1290
|
-
const TrimeshCollider = /*#__PURE__*/React
|
1291
|
-
return /*#__PURE__*/React
|
1290
|
+
const TrimeshCollider = /*#__PURE__*/React.forwardRef((props, ref) => {
|
1291
|
+
return /*#__PURE__*/React.createElement(AnyCollider, _extends({}, props, {
|
1292
1292
|
shape: "trimesh",
|
1293
1293
|
ref: ref
|
1294
1294
|
}));
|
@@ -1298,8 +1298,8 @@ const TrimeshCollider = /*#__PURE__*/React$1.forwardRef((props, ref) => {
|
|
1298
1298
|
* @category Colliders
|
1299
1299
|
*/
|
1300
1300
|
|
1301
|
-
const ConeCollider = /*#__PURE__*/React
|
1302
|
-
return /*#__PURE__*/React
|
1301
|
+
const ConeCollider = /*#__PURE__*/React.forwardRef((props, ref) => {
|
1302
|
+
return /*#__PURE__*/React.createElement(AnyCollider, _extends({}, props, {
|
1303
1303
|
shape: "cone",
|
1304
1304
|
ref: ref
|
1305
1305
|
}));
|
@@ -1309,8 +1309,8 @@ const ConeCollider = /*#__PURE__*/React$1.forwardRef((props, ref) => {
|
|
1309
1309
|
* @category Colliders
|
1310
1310
|
*/
|
1311
1311
|
|
1312
|
-
const CylinderCollider = /*#__PURE__*/React
|
1313
|
-
return /*#__PURE__*/React
|
1312
|
+
const CylinderCollider = /*#__PURE__*/React.forwardRef((props, ref) => {
|
1313
|
+
return /*#__PURE__*/React.createElement(AnyCollider, _extends({}, props, {
|
1314
1314
|
shape: "cylinder",
|
1315
1315
|
ref: ref
|
1316
1316
|
}));
|
@@ -1320,8 +1320,8 @@ const CylinderCollider = /*#__PURE__*/React$1.forwardRef((props, ref) => {
|
|
1320
1320
|
* @category Colliders
|
1321
1321
|
*/
|
1322
1322
|
|
1323
|
-
const ConvexHullCollider = /*#__PURE__*/React
|
1324
|
-
return /*#__PURE__*/React
|
1323
|
+
const ConvexHullCollider = /*#__PURE__*/React.forwardRef((props, ref) => {
|
1324
|
+
return /*#__PURE__*/React.createElement(AnyCollider, _extends({}, props, {
|
1325
1325
|
shape: "convexHull",
|
1326
1326
|
ref: ref
|
1327
1327
|
}));
|
@@ -1549,16 +1549,16 @@ const RigidBody = /*#__PURE__*/memo( /*#__PURE__*/forwardRef((props, forwardedRe
|
|
1549
1549
|
options: mergedOptions
|
1550
1550
|
};
|
1551
1551
|
}, [mergedOptions]);
|
1552
|
-
return /*#__PURE__*/React
|
1552
|
+
return /*#__PURE__*/React.createElement(RigidBodyContext.Provider, {
|
1553
1553
|
value: contextValue
|
1554
|
-
}, /*#__PURE__*/React
|
1554
|
+
}, /*#__PURE__*/React.createElement("object3D", _extends({
|
1555
1555
|
ref: ref
|
1556
1556
|
}, objectProps, {
|
1557
1557
|
position: position,
|
1558
1558
|
rotation: rotation,
|
1559
1559
|
quaternion: quaternion,
|
1560
1560
|
scale: scale
|
1561
|
-
}), children, childColliderProps.map((colliderProps, index) => /*#__PURE__*/React
|
1561
|
+
}), children, childColliderProps.map((colliderProps, index) => /*#__PURE__*/React.createElement(AnyCollider, _extends({
|
1562
1562
|
key: index
|
1563
1563
|
}, colliderProps)))));
|
1564
1564
|
}));
|
@@ -1587,12 +1587,12 @@ const MeshCollider = /*#__PURE__*/memo(props => {
|
|
1587
1587
|
});
|
1588
1588
|
}, [physicsOptions, options]);
|
1589
1589
|
const childColliderProps = useChildColliderProps(object, mergedOptions, false);
|
1590
|
-
return /*#__PURE__*/React
|
1590
|
+
return /*#__PURE__*/React.createElement("object3D", {
|
1591
1591
|
ref: object,
|
1592
1592
|
userData: {
|
1593
1593
|
r3RapierType: "MeshCollider"
|
1594
1594
|
}
|
1595
|
-
}, children, childColliderProps.map((colliderProps, index) => /*#__PURE__*/React
|
1595
|
+
}, children, childColliderProps.map((colliderProps, index) => /*#__PURE__*/React.createElement(AnyCollider, _extends({
|
1596
1596
|
key: index
|
1597
1597
|
}, colliderProps))));
|
1598
1598
|
});
|
@@ -1645,13 +1645,13 @@ const AttractorHelper = props => {
|
|
1645
1645
|
(_normalsHelper$curren = normalsHelper.current) === null || _normalsHelper$curren === void 0 ? void 0 : _normalsHelper$curren.update();
|
1646
1646
|
}
|
1647
1647
|
});
|
1648
|
-
return /*#__PURE__*/React
|
1648
|
+
return /*#__PURE__*/React.createElement("mesh", {
|
1649
1649
|
ref: ref,
|
1650
1650
|
position: props.object.position,
|
1651
1651
|
frustumCulled: false
|
1652
|
-
}, /*#__PURE__*/React
|
1652
|
+
}, /*#__PURE__*/React.createElement("sphereGeometry", {
|
1653
1653
|
args: [0.2, 6, 6]
|
1654
|
-
}), /*#__PURE__*/React
|
1654
|
+
}), /*#__PURE__*/React.createElement("meshBasicMaterial", {
|
1655
1655
|
color: color,
|
1656
1656
|
wireframe: true
|
1657
1657
|
}));
|
@@ -1677,13 +1677,13 @@ const Debug = /*#__PURE__*/memo(() => {
|
|
1677
1677
|
currMap.current = new Map(attractorStates);
|
1678
1678
|
}
|
1679
1679
|
});
|
1680
|
-
return /*#__PURE__*/React
|
1680
|
+
return /*#__PURE__*/React.createElement("group", null, /*#__PURE__*/React.createElement("lineSegments", {
|
1681
1681
|
ref: ref,
|
1682
1682
|
frustumCulled: false
|
1683
|
-
}, /*#__PURE__*/React
|
1683
|
+
}, /*#__PURE__*/React.createElement("lineBasicMaterial", {
|
1684
1684
|
color: 0xffffff,
|
1685
1685
|
vertexColors: true
|
1686
|
-
}), /*#__PURE__*/React
|
1686
|
+
}), /*#__PURE__*/React.createElement("bufferGeometry", null)), attractors.map((attractor, i) => /*#__PURE__*/React.createElement(AttractorHelper, _extends({
|
1687
1687
|
key: attractor.object.uuid
|
1688
1688
|
}, attractor))));
|
1689
1689
|
});
|
@@ -1752,21 +1752,21 @@ const InstancedRigidBodies = /*#__PURE__*/memo( /*#__PURE__*/forwardRef((props,
|
|
1752
1752
|
return state;
|
1753
1753
|
};
|
1754
1754
|
|
1755
|
-
return /*#__PURE__*/React
|
1755
|
+
return /*#__PURE__*/React.createElement("object3D", _extends({
|
1756
1756
|
ref: object
|
1757
1757
|
}, rigidBodyProps, {
|
1758
1758
|
position: position,
|
1759
1759
|
rotation: rotation,
|
1760
1760
|
quaternion: quaternion,
|
1761
1761
|
scale: scale
|
1762
|
-
}), /*#__PURE__*/React
|
1762
|
+
}), /*#__PURE__*/React.createElement("object3D", {
|
1763
1763
|
ref: instancedWrapper
|
1764
|
-
}, children), instances === null || instances === void 0 ? void 0 : instances.map((instance, index) => /*#__PURE__*/React
|
1764
|
+
}, children), instances === null || instances === void 0 ? void 0 : instances.map((instance, index) => /*#__PURE__*/React.createElement(RigidBody, _extends({}, rigidBodyProps, instance, {
|
1765
1765
|
ref: body => rigidBodyApis.current[index] = body,
|
1766
1766
|
transformState: state => applyInstancedState(state, index)
|
1767
|
-
}), /*#__PURE__*/React
|
1767
|
+
}), /*#__PURE__*/React.createElement(React.Fragment, null, colliderNodes.map((node, index) => /*#__PURE__*/React.createElement(Fragment, {
|
1768
1768
|
key: index
|
1769
|
-
}, node)), childColliderProps.map((colliderProps, colliderIndex) => /*#__PURE__*/React
|
1769
|
+
}, node)), childColliderProps.map((colliderProps, colliderIndex) => /*#__PURE__*/React.createElement(AnyCollider, _extends({
|
1770
1770
|
key: colliderIndex
|
1771
1771
|
}, colliderProps)))))));
|
1772
1772
|
}));
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@react-three/rapier",
|
3
|
-
"version": "0.14.0-rc.
|
3
|
+
"version": "0.14.0-rc.4",
|
4
4
|
"source": "src/index.ts",
|
5
5
|
"main": "dist/react-three-rapier.cjs.js",
|
6
6
|
"module": "dist/react-three-rapier.esm.js",
|
@@ -31,7 +31,7 @@
|
|
31
31
|
"three": ">=0.139.2"
|
32
32
|
},
|
33
33
|
"dependencies": {
|
34
|
-
"@dimforge/rapier3d-compat": "0.11.
|
34
|
+
"@dimforge/rapier3d-compat": "0.11.2",
|
35
35
|
"three-stdlib": "2.21.6",
|
36
36
|
"use-asset": "1.0.4"
|
37
37
|
},
|