@react-three/rapier 0.6.0 → 0.6.1
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,4 +1,4 @@
|
|
1
|
-
|
1
|
+
import React from "react";
|
2
2
|
import { InstancedRigidBodyApi } from "./api";
|
3
3
|
import { RigidBodyProps } from "./RigidBody";
|
4
4
|
import { Vector3Array } from "./types";
|
@@ -6,5 +6,5 @@ interface InstancedRigidBodiesProps extends Omit<RigidBodyProps, "position" | "r
|
|
6
6
|
positions?: Vector3Array[];
|
7
7
|
rotations?: Vector3Array[];
|
8
8
|
}
|
9
|
-
export declare const InstancedRigidBodies:
|
9
|
+
export declare const InstancedRigidBodies: React.ForwardRefExoticComponent<InstancedRigidBodiesProps & React.RefAttributes<InstancedRigidBodyApi>>;
|
10
10
|
export {};
|
@@ -3,7 +3,7 @@
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
4
4
|
|
5
5
|
var rapier3dCompat = require('@dimforge/rapier3d-compat');
|
6
|
-
var React
|
6
|
+
var React = require('react');
|
7
7
|
var useAsset = require('use-asset');
|
8
8
|
var fiber = require('@react-three/fiber');
|
9
9
|
var three = require('three');
|
@@ -28,7 +28,7 @@ function _interopNamespace(e) {
|
|
28
28
|
return Object.freeze(n);
|
29
29
|
}
|
30
30
|
|
31
|
-
var React__default = /*#__PURE__*/_interopDefault(React
|
31
|
+
var React__default = /*#__PURE__*/_interopDefault(React);
|
32
32
|
|
33
33
|
const _quaternion = new three.Quaternion();
|
34
34
|
const _euler = new three.Euler();
|
@@ -441,7 +441,7 @@ const createJointApi = ref => {
|
|
441
441
|
};
|
442
442
|
};
|
443
443
|
|
444
|
-
const RapierContext = /*#__PURE__*/React
|
444
|
+
const RapierContext = /*#__PURE__*/React.createContext(undefined);
|
445
445
|
|
446
446
|
const importRapier = async () => {
|
447
447
|
let r = await Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('@dimforge/rapier3d-compat')); });
|
@@ -456,8 +456,8 @@ const Physics = ({
|
|
456
456
|
timeStep: _timeStep = "vary"
|
457
457
|
}) => {
|
458
458
|
const rapier = useAsset.useAsset(importRapier);
|
459
|
-
const worldRef = React
|
460
|
-
const getWorldRef = React
|
459
|
+
const worldRef = React.useRef();
|
460
|
+
const getWorldRef = React.useRef(() => {
|
461
461
|
if (!worldRef.current) {
|
462
462
|
const world = new rapier.World(vectorArrayToObject(_gravity));
|
463
463
|
worldRef.current = world;
|
@@ -465,12 +465,12 @@ const Physics = ({
|
|
465
465
|
|
466
466
|
return worldRef.current;
|
467
467
|
});
|
468
|
-
const [colliderMeshes] = React
|
469
|
-
const [rigidBodyStates] = React
|
470
|
-
const [rigidBodyEvents] = React
|
471
|
-
const [eventQueue] = React
|
468
|
+
const [colliderMeshes] = React.useState(() => new Map());
|
469
|
+
const [rigidBodyStates] = React.useState(() => new Map());
|
470
|
+
const [rigidBodyEvents] = React.useState(() => new Map());
|
471
|
+
const [eventQueue] = React.useState(() => new rapier3dCompat.EventQueue(false)); // Init world
|
472
472
|
|
473
|
-
React
|
473
|
+
React.useEffect(() => {
|
474
474
|
const world = getWorldRef.current();
|
475
475
|
return () => {
|
476
476
|
if (world) {
|
@@ -480,14 +480,14 @@ const Physics = ({
|
|
480
480
|
};
|
481
481
|
}, []); // Update gravity
|
482
482
|
|
483
|
-
React
|
483
|
+
React.useEffect(() => {
|
484
484
|
const world = worldRef.current;
|
485
485
|
|
486
486
|
if (world) {
|
487
487
|
world.gravity = vectorArrayToObject(_gravity);
|
488
488
|
}
|
489
489
|
}, [_gravity]);
|
490
|
-
const time = React
|
490
|
+
const time = React.useRef(performance.now());
|
491
491
|
fiber.useFrame(context => {
|
492
492
|
const world = worldRef.current;
|
493
493
|
if (!world) return; // Set timestep to current delta, to allow for variable frame rates
|
@@ -580,8 +580,8 @@ const Physics = ({
|
|
580
580
|
});
|
581
581
|
time.current = now;
|
582
582
|
});
|
583
|
-
const api = React
|
584
|
-
const context = React
|
583
|
+
const api = React.useMemo(() => createWorldApi(getWorldRef), []);
|
584
|
+
const context = React.useMemo(() => ({
|
585
585
|
rapier,
|
586
586
|
world: api,
|
587
587
|
physicsOptions: {
|
@@ -673,7 +673,7 @@ function _objectSpread2(target) {
|
|
673
673
|
}
|
674
674
|
|
675
675
|
const useRapier = () => {
|
676
|
-
return React
|
676
|
+
return React.useContext(RapierContext);
|
677
677
|
};
|
678
678
|
const useRigidBody = (options = {}) => {
|
679
679
|
const {
|
@@ -682,10 +682,10 @@ const useRigidBody = (options = {}) => {
|
|
682
682
|
physicsOptions,
|
683
683
|
rigidBodyEvents
|
684
684
|
} = useRapier();
|
685
|
-
const ref = React
|
685
|
+
const ref = React.useRef(); // Create rigidbody
|
686
686
|
|
687
|
-
const rigidBodyRef = React
|
688
|
-
const getRigidBodyRef = React
|
687
|
+
const rigidBodyRef = React.useRef();
|
688
|
+
const getRigidBodyRef = React.useRef(() => {
|
689
689
|
if (!rigidBodyRef.current) {
|
690
690
|
const desc = rigidBodyDescFromOptions(options);
|
691
691
|
const rigidBody = world.createRigidBody(desc);
|
@@ -695,7 +695,7 @@ const useRigidBody = (options = {}) => {
|
|
695
695
|
return rigidBodyRef.current;
|
696
696
|
}); // Setup
|
697
697
|
|
698
|
-
React
|
698
|
+
React.useEffect(() => {
|
699
699
|
var _ref$current$parent, _ref, _options$colliders;
|
700
700
|
|
701
701
|
const rigidBody = getRigidBodyRef.current();
|
@@ -753,7 +753,7 @@ const useRigidBody = (options = {}) => {
|
|
753
753
|
};
|
754
754
|
}, []); // Events
|
755
755
|
|
756
|
-
React
|
756
|
+
React.useEffect(() => {
|
757
757
|
const rigidBody = getRigidBodyRef.current();
|
758
758
|
rigidBodyEvents.set(rigidBody.handle, {
|
759
759
|
onCollisionEnter: options === null || options === void 0 ? void 0 : options.onCollisionEnter,
|
@@ -765,7 +765,7 @@ const useRigidBody = (options = {}) => {
|
|
765
765
|
rigidBodyEvents.delete(rigidBody.handle);
|
766
766
|
};
|
767
767
|
}, [options.onCollisionEnter, options.onCollisionExit]);
|
768
|
-
const api = React
|
768
|
+
const api = React.useMemo(() => createRigidBodyApi(getRigidBodyRef), []);
|
769
769
|
return [ref, api];
|
770
770
|
}; // Joints
|
771
771
|
|
@@ -773,8 +773,8 @@ const useImpulseJoint = (body1, body2, params) => {
|
|
773
773
|
const {
|
774
774
|
world
|
775
775
|
} = useRapier();
|
776
|
-
const jointRef = React
|
777
|
-
const getJointRef = React
|
776
|
+
const jointRef = React.useRef();
|
777
|
+
const getJointRef = React.useRef(() => {
|
778
778
|
if (!jointRef.current) {
|
779
779
|
let rb1;
|
780
780
|
let rb2;
|
@@ -789,7 +789,7 @@ const useImpulseJoint = (body1, body2, params) => {
|
|
789
789
|
|
790
790
|
return jointRef.current;
|
791
791
|
});
|
792
|
-
React
|
792
|
+
React.useEffect(() => {
|
793
793
|
const joint = getJointRef.current();
|
794
794
|
return () => {
|
795
795
|
if (joint) {
|
@@ -798,7 +798,7 @@ const useImpulseJoint = (body1, body2, params) => {
|
|
798
798
|
}
|
799
799
|
};
|
800
800
|
}, []);
|
801
|
-
const api = React
|
801
|
+
const api = React.useMemo(() => createJointApi(getJointRef), []);
|
802
802
|
return api;
|
803
803
|
};
|
804
804
|
/**
|
@@ -857,17 +857,17 @@ const usePrismaticJoint = (body1, body2, [body1Anchor, body2Anchor, axis]) => {
|
|
857
857
|
};
|
858
858
|
|
859
859
|
const _excluded$1 = ["children"];
|
860
|
-
const RigidBodyContext = /*#__PURE__*/React
|
861
|
-
const useRigidBodyContext = () => React
|
860
|
+
const RigidBodyContext = /*#__PURE__*/React.createContext(undefined);
|
861
|
+
const useRigidBodyContext = () => React.useContext(RigidBodyContext); // RigidBody
|
862
862
|
|
863
|
-
const RigidBody = /*#__PURE__*/React
|
863
|
+
const RigidBody = /*#__PURE__*/React.forwardRef((_ref, ref) => {
|
864
864
|
let {
|
865
865
|
children
|
866
866
|
} = _ref,
|
867
867
|
props = _objectWithoutProperties(_ref, _excluded$1);
|
868
868
|
|
869
869
|
const [object, api] = useRigidBody(props);
|
870
|
-
React
|
870
|
+
React.useImperativeHandle(ref, () => api);
|
871
871
|
return /*#__PURE__*/React__default["default"].createElement(RigidBodyContext.Provider, {
|
872
872
|
value: {
|
873
873
|
ref: object,
|
@@ -888,12 +888,12 @@ const MeshCollider = ({
|
|
888
888
|
physicsOptions,
|
889
889
|
world
|
890
890
|
} = useRapier();
|
891
|
-
const object = React
|
891
|
+
const object = React.useRef(null);
|
892
892
|
const {
|
893
893
|
api,
|
894
894
|
options
|
895
895
|
} = useRigidBodyContext();
|
896
|
-
React
|
896
|
+
React.useEffect(() => {
|
897
897
|
let autoColliders = [];
|
898
898
|
|
899
899
|
if (object.current) {
|
@@ -911,7 +911,7 @@ const MeshCollider = ({
|
|
911
911
|
});
|
912
912
|
};
|
913
913
|
}, []);
|
914
|
-
return /*#__PURE__*/
|
914
|
+
return /*#__PURE__*/React__default["default"].createElement("object3D", {
|
915
915
|
ref: object,
|
916
916
|
userData: {
|
917
917
|
r3RapierType: "MeshCollider"
|
@@ -974,13 +974,13 @@ const geometryFromCollider = collider => {
|
|
974
974
|
return new three.BoxBufferGeometry(1, 1, 1);
|
975
975
|
};
|
976
976
|
|
977
|
-
const DebugShape = /*#__PURE__*/React
|
977
|
+
const DebugShape = /*#__PURE__*/React.memo(({
|
978
978
|
colliderHandle
|
979
979
|
}) => {
|
980
980
|
const {
|
981
981
|
world
|
982
982
|
} = useRapier();
|
983
|
-
const ref = React
|
983
|
+
const ref = React.useRef(null);
|
984
984
|
fiber.useFrame(() => {
|
985
985
|
const collider = world.getCollider(colliderHandle);
|
986
986
|
|
@@ -1000,7 +1000,7 @@ const DebugShape = /*#__PURE__*/React$1.memo(({
|
|
1000
1000
|
ref.current.rotation.setFromQuaternion(new three.Quaternion(rx, ry, rz, rw));
|
1001
1001
|
}
|
1002
1002
|
});
|
1003
|
-
const geometry = React
|
1003
|
+
const geometry = React.useMemo(() => {
|
1004
1004
|
const collider = world.getCollider(colliderHandle);
|
1005
1005
|
return geometryFromCollider(collider);
|
1006
1006
|
}, [colliderHandle]);
|
@@ -1018,8 +1018,8 @@ const Debug = () => {
|
|
1018
1018
|
const {
|
1019
1019
|
world
|
1020
1020
|
} = useRapier();
|
1021
|
-
const [colliders, setColliders] = React
|
1022
|
-
React
|
1021
|
+
const [colliders, setColliders] = React.useState([]);
|
1022
|
+
React.useRef({});
|
1023
1023
|
|
1024
1024
|
fiber.useFrame(() => {
|
1025
1025
|
const newColliders = [];
|
@@ -1034,22 +1034,22 @@ const Debug = () => {
|
|
1034
1034
|
})));
|
1035
1035
|
};
|
1036
1036
|
|
1037
|
-
const InstancedRigidBodies = /*#__PURE__*/React
|
1037
|
+
const InstancedRigidBodies = /*#__PURE__*/React.forwardRef((props, ref) => {
|
1038
1038
|
const {
|
1039
1039
|
world,
|
1040
1040
|
rigidBodyStates,
|
1041
1041
|
physicsOptions
|
1042
1042
|
} = useRapier();
|
1043
|
-
const object = React
|
1044
|
-
const instancesRef = React
|
1045
|
-
const instancesRefGetter = React
|
1043
|
+
const object = React.useRef(null);
|
1044
|
+
const instancesRef = React.useRef();
|
1045
|
+
const instancesRefGetter = React.useRef(() => {
|
1046
1046
|
if (!instancesRef.current) {
|
1047
1047
|
instancesRef.current = [];
|
1048
1048
|
}
|
1049
1049
|
|
1050
1050
|
return instancesRef.current;
|
1051
1051
|
});
|
1052
|
-
React
|
1052
|
+
React.useEffect(() => {
|
1053
1053
|
const colliders = [];
|
1054
1054
|
const rigidBodies = instancesRefGetter.current();
|
1055
1055
|
|
@@ -1125,8 +1125,8 @@ const InstancedRigidBodies = /*#__PURE__*/React$1.forwardRef((props, ref) => {
|
|
1125
1125
|
};
|
1126
1126
|
}
|
1127
1127
|
}, []);
|
1128
|
-
React
|
1129
|
-
return /*#__PURE__*/
|
1128
|
+
React.useImperativeHandle(ref, () => createInstancedRigidBodiesApi(instancesRefGetter));
|
1129
|
+
return /*#__PURE__*/React__default["default"].createElement("object3D", {
|
1130
1130
|
ref: object
|
1131
1131
|
}, props.children);
|
1132
1132
|
});
|
@@ -1161,8 +1161,8 @@ const AnyCollider = _ref => {
|
|
1161
1161
|
world
|
1162
1162
|
} = useRapier();
|
1163
1163
|
const rigidBodyContext = useRigidBodyContext();
|
1164
|
-
const ref = React
|
1165
|
-
React
|
1164
|
+
const ref = React.useRef(null);
|
1165
|
+
React.useEffect(() => {
|
1166
1166
|
var _rigidBodyContext$api;
|
1167
1167
|
|
1168
1168
|
const scale = ref.current.getWorldScale(new three.Vector3());
|
@@ -1177,53 +1177,53 @@ const AnyCollider = _ref => {
|
|
1177
1177
|
world.removeCollider(collider);
|
1178
1178
|
};
|
1179
1179
|
}, []);
|
1180
|
-
return /*#__PURE__*/
|
1180
|
+
return /*#__PURE__*/React__default["default"].createElement("object3D", {
|
1181
1181
|
ref: ref
|
1182
1182
|
}, children);
|
1183
1183
|
};
|
1184
1184
|
|
1185
1185
|
const CuboidCollider = props => {
|
1186
|
-
return /*#__PURE__*/
|
1186
|
+
return /*#__PURE__*/React__default["default"].createElement(AnyCollider, _extends({}, props, {
|
1187
1187
|
shape: "cuboid"
|
1188
1188
|
}));
|
1189
1189
|
};
|
1190
1190
|
const RoundCuboidCollider = props => {
|
1191
|
-
return /*#__PURE__*/
|
1191
|
+
return /*#__PURE__*/React__default["default"].createElement(AnyCollider, _extends({}, props, {
|
1192
1192
|
shape: "roundCuboid"
|
1193
1193
|
}));
|
1194
1194
|
};
|
1195
1195
|
const BallCollider = props => {
|
1196
|
-
return /*#__PURE__*/
|
1196
|
+
return /*#__PURE__*/React__default["default"].createElement(AnyCollider, _extends({}, props, {
|
1197
1197
|
shape: "ball"
|
1198
1198
|
}));
|
1199
1199
|
};
|
1200
1200
|
const CapsuleCollider = props => {
|
1201
|
-
return /*#__PURE__*/
|
1201
|
+
return /*#__PURE__*/React__default["default"].createElement(AnyCollider, _extends({}, props, {
|
1202
1202
|
shape: "capsule"
|
1203
1203
|
}));
|
1204
1204
|
};
|
1205
1205
|
const HeightfieldCollider = props => {
|
1206
|
-
return /*#__PURE__*/
|
1206
|
+
return /*#__PURE__*/React__default["default"].createElement(AnyCollider, _extends({}, props, {
|
1207
1207
|
shape: "heightfield"
|
1208
1208
|
}));
|
1209
1209
|
};
|
1210
1210
|
const TrimeshCollider = props => {
|
1211
|
-
return /*#__PURE__*/
|
1211
|
+
return /*#__PURE__*/React__default["default"].createElement(AnyCollider, _extends({}, props, {
|
1212
1212
|
shape: "trimesh"
|
1213
1213
|
}));
|
1214
1214
|
};
|
1215
1215
|
const ConeCollider = props => {
|
1216
|
-
return /*#__PURE__*/
|
1216
|
+
return /*#__PURE__*/React__default["default"].createElement(AnyCollider, _extends({}, props, {
|
1217
1217
|
shape: "cone"
|
1218
1218
|
}));
|
1219
1219
|
};
|
1220
1220
|
const CylinderCollider = props => {
|
1221
|
-
return /*#__PURE__*/
|
1221
|
+
return /*#__PURE__*/React__default["default"].createElement(AnyCollider, _extends({}, props, {
|
1222
1222
|
shape: "cylinder"
|
1223
1223
|
}));
|
1224
1224
|
};
|
1225
1225
|
const ConvexHullCollider = props => {
|
1226
|
-
return /*#__PURE__*/
|
1226
|
+
return /*#__PURE__*/React__default["default"].createElement(AnyCollider, _extends({}, props, {
|
1227
1227
|
shape: "convexHull"
|
1228
1228
|
}));
|
1229
1229
|
};
|
@@ -3,7 +3,7 @@
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
4
4
|
|
5
5
|
var rapier3dCompat = require('@dimforge/rapier3d-compat');
|
6
|
-
var React
|
6
|
+
var React = require('react');
|
7
7
|
var useAsset = require('use-asset');
|
8
8
|
var fiber = require('@react-three/fiber');
|
9
9
|
var three = require('three');
|
@@ -28,7 +28,7 @@ function _interopNamespace(e) {
|
|
28
28
|
return Object.freeze(n);
|
29
29
|
}
|
30
30
|
|
31
|
-
var React__default = /*#__PURE__*/_interopDefault(React
|
31
|
+
var React__default = /*#__PURE__*/_interopDefault(React);
|
32
32
|
|
33
33
|
const _quaternion = new three.Quaternion();
|
34
34
|
const _euler = new three.Euler();
|
@@ -441,7 +441,7 @@ const createJointApi = ref => {
|
|
441
441
|
};
|
442
442
|
};
|
443
443
|
|
444
|
-
const RapierContext = /*#__PURE__*/React
|
444
|
+
const RapierContext = /*#__PURE__*/React.createContext(undefined);
|
445
445
|
|
446
446
|
const importRapier = async () => {
|
447
447
|
let r = await Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('@dimforge/rapier3d-compat')); });
|
@@ -456,8 +456,8 @@ const Physics = ({
|
|
456
456
|
timeStep: _timeStep = "vary"
|
457
457
|
}) => {
|
458
458
|
const rapier = useAsset.useAsset(importRapier);
|
459
|
-
const worldRef = React
|
460
|
-
const getWorldRef = React
|
459
|
+
const worldRef = React.useRef();
|
460
|
+
const getWorldRef = React.useRef(() => {
|
461
461
|
if (!worldRef.current) {
|
462
462
|
const world = new rapier.World(vectorArrayToObject(_gravity));
|
463
463
|
worldRef.current = world;
|
@@ -465,12 +465,12 @@ const Physics = ({
|
|
465
465
|
|
466
466
|
return worldRef.current;
|
467
467
|
});
|
468
|
-
const [colliderMeshes] = React
|
469
|
-
const [rigidBodyStates] = React
|
470
|
-
const [rigidBodyEvents] = React
|
471
|
-
const [eventQueue] = React
|
468
|
+
const [colliderMeshes] = React.useState(() => new Map());
|
469
|
+
const [rigidBodyStates] = React.useState(() => new Map());
|
470
|
+
const [rigidBodyEvents] = React.useState(() => new Map());
|
471
|
+
const [eventQueue] = React.useState(() => new rapier3dCompat.EventQueue(false)); // Init world
|
472
472
|
|
473
|
-
React
|
473
|
+
React.useEffect(() => {
|
474
474
|
const world = getWorldRef.current();
|
475
475
|
return () => {
|
476
476
|
if (world) {
|
@@ -480,14 +480,14 @@ const Physics = ({
|
|
480
480
|
};
|
481
481
|
}, []); // Update gravity
|
482
482
|
|
483
|
-
React
|
483
|
+
React.useEffect(() => {
|
484
484
|
const world = worldRef.current;
|
485
485
|
|
486
486
|
if (world) {
|
487
487
|
world.gravity = vectorArrayToObject(_gravity);
|
488
488
|
}
|
489
489
|
}, [_gravity]);
|
490
|
-
const time = React
|
490
|
+
const time = React.useRef(performance.now());
|
491
491
|
fiber.useFrame(context => {
|
492
492
|
const world = worldRef.current;
|
493
493
|
if (!world) return; // Set timestep to current delta, to allow for variable frame rates
|
@@ -580,8 +580,8 @@ const Physics = ({
|
|
580
580
|
});
|
581
581
|
time.current = now;
|
582
582
|
});
|
583
|
-
const api = React
|
584
|
-
const context = React
|
583
|
+
const api = React.useMemo(() => createWorldApi(getWorldRef), []);
|
584
|
+
const context = React.useMemo(() => ({
|
585
585
|
rapier,
|
586
586
|
world: api,
|
587
587
|
physicsOptions: {
|
@@ -673,7 +673,7 @@ function _objectSpread2(target) {
|
|
673
673
|
}
|
674
674
|
|
675
675
|
const useRapier = () => {
|
676
|
-
return React
|
676
|
+
return React.useContext(RapierContext);
|
677
677
|
};
|
678
678
|
const useRigidBody = (options = {}) => {
|
679
679
|
const {
|
@@ -682,10 +682,10 @@ const useRigidBody = (options = {}) => {
|
|
682
682
|
physicsOptions,
|
683
683
|
rigidBodyEvents
|
684
684
|
} = useRapier();
|
685
|
-
const ref = React
|
685
|
+
const ref = React.useRef(); // Create rigidbody
|
686
686
|
|
687
|
-
const rigidBodyRef = React
|
688
|
-
const getRigidBodyRef = React
|
687
|
+
const rigidBodyRef = React.useRef();
|
688
|
+
const getRigidBodyRef = React.useRef(() => {
|
689
689
|
if (!rigidBodyRef.current) {
|
690
690
|
const desc = rigidBodyDescFromOptions(options);
|
691
691
|
const rigidBody = world.createRigidBody(desc);
|
@@ -695,7 +695,7 @@ const useRigidBody = (options = {}) => {
|
|
695
695
|
return rigidBodyRef.current;
|
696
696
|
}); // Setup
|
697
697
|
|
698
|
-
React
|
698
|
+
React.useEffect(() => {
|
699
699
|
var _ref$current$parent, _ref, _options$colliders;
|
700
700
|
|
701
701
|
const rigidBody = getRigidBodyRef.current();
|
@@ -753,7 +753,7 @@ const useRigidBody = (options = {}) => {
|
|
753
753
|
};
|
754
754
|
}, []); // Events
|
755
755
|
|
756
|
-
React
|
756
|
+
React.useEffect(() => {
|
757
757
|
const rigidBody = getRigidBodyRef.current();
|
758
758
|
rigidBodyEvents.set(rigidBody.handle, {
|
759
759
|
onCollisionEnter: options === null || options === void 0 ? void 0 : options.onCollisionEnter,
|
@@ -765,7 +765,7 @@ const useRigidBody = (options = {}) => {
|
|
765
765
|
rigidBodyEvents.delete(rigidBody.handle);
|
766
766
|
};
|
767
767
|
}, [options.onCollisionEnter, options.onCollisionExit]);
|
768
|
-
const api = React
|
768
|
+
const api = React.useMemo(() => createRigidBodyApi(getRigidBodyRef), []);
|
769
769
|
return [ref, api];
|
770
770
|
}; // Joints
|
771
771
|
|
@@ -773,8 +773,8 @@ const useImpulseJoint = (body1, body2, params) => {
|
|
773
773
|
const {
|
774
774
|
world
|
775
775
|
} = useRapier();
|
776
|
-
const jointRef = React
|
777
|
-
const getJointRef = React
|
776
|
+
const jointRef = React.useRef();
|
777
|
+
const getJointRef = React.useRef(() => {
|
778
778
|
if (!jointRef.current) {
|
779
779
|
let rb1;
|
780
780
|
let rb2;
|
@@ -789,7 +789,7 @@ const useImpulseJoint = (body1, body2, params) => {
|
|
789
789
|
|
790
790
|
return jointRef.current;
|
791
791
|
});
|
792
|
-
React
|
792
|
+
React.useEffect(() => {
|
793
793
|
const joint = getJointRef.current();
|
794
794
|
return () => {
|
795
795
|
if (joint) {
|
@@ -798,7 +798,7 @@ const useImpulseJoint = (body1, body2, params) => {
|
|
798
798
|
}
|
799
799
|
};
|
800
800
|
}, []);
|
801
|
-
const api = React
|
801
|
+
const api = React.useMemo(() => createJointApi(getJointRef), []);
|
802
802
|
return api;
|
803
803
|
};
|
804
804
|
/**
|
@@ -857,17 +857,17 @@ const usePrismaticJoint = (body1, body2, [body1Anchor, body2Anchor, axis]) => {
|
|
857
857
|
};
|
858
858
|
|
859
859
|
const _excluded$1 = ["children"];
|
860
|
-
const RigidBodyContext = /*#__PURE__*/React
|
861
|
-
const useRigidBodyContext = () => React
|
860
|
+
const RigidBodyContext = /*#__PURE__*/React.createContext(undefined);
|
861
|
+
const useRigidBodyContext = () => React.useContext(RigidBodyContext); // RigidBody
|
862
862
|
|
863
|
-
const RigidBody = /*#__PURE__*/React
|
863
|
+
const RigidBody = /*#__PURE__*/React.forwardRef((_ref, ref) => {
|
864
864
|
let {
|
865
865
|
children
|
866
866
|
} = _ref,
|
867
867
|
props = _objectWithoutProperties(_ref, _excluded$1);
|
868
868
|
|
869
869
|
const [object, api] = useRigidBody(props);
|
870
|
-
React
|
870
|
+
React.useImperativeHandle(ref, () => api);
|
871
871
|
return /*#__PURE__*/React__default["default"].createElement(RigidBodyContext.Provider, {
|
872
872
|
value: {
|
873
873
|
ref: object,
|
@@ -888,12 +888,12 @@ const MeshCollider = ({
|
|
888
888
|
physicsOptions,
|
889
889
|
world
|
890
890
|
} = useRapier();
|
891
|
-
const object = React
|
891
|
+
const object = React.useRef(null);
|
892
892
|
const {
|
893
893
|
api,
|
894
894
|
options
|
895
895
|
} = useRigidBodyContext();
|
896
|
-
React
|
896
|
+
React.useEffect(() => {
|
897
897
|
let autoColliders = [];
|
898
898
|
|
899
899
|
if (object.current) {
|
@@ -911,7 +911,7 @@ const MeshCollider = ({
|
|
911
911
|
});
|
912
912
|
};
|
913
913
|
}, []);
|
914
|
-
return /*#__PURE__*/
|
914
|
+
return /*#__PURE__*/React__default["default"].createElement("object3D", {
|
915
915
|
ref: object,
|
916
916
|
userData: {
|
917
917
|
r3RapierType: "MeshCollider"
|
@@ -974,13 +974,13 @@ const geometryFromCollider = collider => {
|
|
974
974
|
return new three.BoxBufferGeometry(1, 1, 1);
|
975
975
|
};
|
976
976
|
|
977
|
-
const DebugShape = /*#__PURE__*/React
|
977
|
+
const DebugShape = /*#__PURE__*/React.memo(({
|
978
978
|
colliderHandle
|
979
979
|
}) => {
|
980
980
|
const {
|
981
981
|
world
|
982
982
|
} = useRapier();
|
983
|
-
const ref = React
|
983
|
+
const ref = React.useRef(null);
|
984
984
|
fiber.useFrame(() => {
|
985
985
|
const collider = world.getCollider(colliderHandle);
|
986
986
|
|
@@ -1000,7 +1000,7 @@ const DebugShape = /*#__PURE__*/React$1.memo(({
|
|
1000
1000
|
ref.current.rotation.setFromQuaternion(new three.Quaternion(rx, ry, rz, rw));
|
1001
1001
|
}
|
1002
1002
|
});
|
1003
|
-
const geometry = React
|
1003
|
+
const geometry = React.useMemo(() => {
|
1004
1004
|
const collider = world.getCollider(colliderHandle);
|
1005
1005
|
return geometryFromCollider(collider);
|
1006
1006
|
}, [colliderHandle]);
|
@@ -1018,8 +1018,8 @@ const Debug = () => {
|
|
1018
1018
|
const {
|
1019
1019
|
world
|
1020
1020
|
} = useRapier();
|
1021
|
-
const [colliders, setColliders] = React
|
1022
|
-
React
|
1021
|
+
const [colliders, setColliders] = React.useState([]);
|
1022
|
+
React.useRef({});
|
1023
1023
|
|
1024
1024
|
fiber.useFrame(() => {
|
1025
1025
|
const newColliders = [];
|
@@ -1034,22 +1034,22 @@ const Debug = () => {
|
|
1034
1034
|
})));
|
1035
1035
|
};
|
1036
1036
|
|
1037
|
-
const InstancedRigidBodies = /*#__PURE__*/React
|
1037
|
+
const InstancedRigidBodies = /*#__PURE__*/React.forwardRef((props, ref) => {
|
1038
1038
|
const {
|
1039
1039
|
world,
|
1040
1040
|
rigidBodyStates,
|
1041
1041
|
physicsOptions
|
1042
1042
|
} = useRapier();
|
1043
|
-
const object = React
|
1044
|
-
const instancesRef = React
|
1045
|
-
const instancesRefGetter = React
|
1043
|
+
const object = React.useRef(null);
|
1044
|
+
const instancesRef = React.useRef();
|
1045
|
+
const instancesRefGetter = React.useRef(() => {
|
1046
1046
|
if (!instancesRef.current) {
|
1047
1047
|
instancesRef.current = [];
|
1048
1048
|
}
|
1049
1049
|
|
1050
1050
|
return instancesRef.current;
|
1051
1051
|
});
|
1052
|
-
React
|
1052
|
+
React.useEffect(() => {
|
1053
1053
|
const colliders = [];
|
1054
1054
|
const rigidBodies = instancesRefGetter.current();
|
1055
1055
|
|
@@ -1125,8 +1125,8 @@ const InstancedRigidBodies = /*#__PURE__*/React$1.forwardRef((props, ref) => {
|
|
1125
1125
|
};
|
1126
1126
|
}
|
1127
1127
|
}, []);
|
1128
|
-
React
|
1129
|
-
return /*#__PURE__*/
|
1128
|
+
React.useImperativeHandle(ref, () => createInstancedRigidBodiesApi(instancesRefGetter));
|
1129
|
+
return /*#__PURE__*/React__default["default"].createElement("object3D", {
|
1130
1130
|
ref: object
|
1131
1131
|
}, props.children);
|
1132
1132
|
});
|
@@ -1161,8 +1161,8 @@ const AnyCollider = _ref => {
|
|
1161
1161
|
world
|
1162
1162
|
} = useRapier();
|
1163
1163
|
const rigidBodyContext = useRigidBodyContext();
|
1164
|
-
const ref = React
|
1165
|
-
React
|
1164
|
+
const ref = React.useRef(null);
|
1165
|
+
React.useEffect(() => {
|
1166
1166
|
var _rigidBodyContext$api;
|
1167
1167
|
|
1168
1168
|
const scale = ref.current.getWorldScale(new three.Vector3());
|
@@ -1177,53 +1177,53 @@ const AnyCollider = _ref => {
|
|
1177
1177
|
world.removeCollider(collider);
|
1178
1178
|
};
|
1179
1179
|
}, []);
|
1180
|
-
return /*#__PURE__*/
|
1180
|
+
return /*#__PURE__*/React__default["default"].createElement("object3D", {
|
1181
1181
|
ref: ref
|
1182
1182
|
}, children);
|
1183
1183
|
};
|
1184
1184
|
|
1185
1185
|
const CuboidCollider = props => {
|
1186
|
-
return /*#__PURE__*/
|
1186
|
+
return /*#__PURE__*/React__default["default"].createElement(AnyCollider, _extends({}, props, {
|
1187
1187
|
shape: "cuboid"
|
1188
1188
|
}));
|
1189
1189
|
};
|
1190
1190
|
const RoundCuboidCollider = props => {
|
1191
|
-
return /*#__PURE__*/
|
1191
|
+
return /*#__PURE__*/React__default["default"].createElement(AnyCollider, _extends({}, props, {
|
1192
1192
|
shape: "roundCuboid"
|
1193
1193
|
}));
|
1194
1194
|
};
|
1195
1195
|
const BallCollider = props => {
|
1196
|
-
return /*#__PURE__*/
|
1196
|
+
return /*#__PURE__*/React__default["default"].createElement(AnyCollider, _extends({}, props, {
|
1197
1197
|
shape: "ball"
|
1198
1198
|
}));
|
1199
1199
|
};
|
1200
1200
|
const CapsuleCollider = props => {
|
1201
|
-
return /*#__PURE__*/
|
1201
|
+
return /*#__PURE__*/React__default["default"].createElement(AnyCollider, _extends({}, props, {
|
1202
1202
|
shape: "capsule"
|
1203
1203
|
}));
|
1204
1204
|
};
|
1205
1205
|
const HeightfieldCollider = props => {
|
1206
|
-
return /*#__PURE__*/
|
1206
|
+
return /*#__PURE__*/React__default["default"].createElement(AnyCollider, _extends({}, props, {
|
1207
1207
|
shape: "heightfield"
|
1208
1208
|
}));
|
1209
1209
|
};
|
1210
1210
|
const TrimeshCollider = props => {
|
1211
|
-
return /*#__PURE__*/
|
1211
|
+
return /*#__PURE__*/React__default["default"].createElement(AnyCollider, _extends({}, props, {
|
1212
1212
|
shape: "trimesh"
|
1213
1213
|
}));
|
1214
1214
|
};
|
1215
1215
|
const ConeCollider = props => {
|
1216
|
-
return /*#__PURE__*/
|
1216
|
+
return /*#__PURE__*/React__default["default"].createElement(AnyCollider, _extends({}, props, {
|
1217
1217
|
shape: "cone"
|
1218
1218
|
}));
|
1219
1219
|
};
|
1220
1220
|
const CylinderCollider = props => {
|
1221
|
-
return /*#__PURE__*/
|
1221
|
+
return /*#__PURE__*/React__default["default"].createElement(AnyCollider, _extends({}, props, {
|
1222
1222
|
shape: "cylinder"
|
1223
1223
|
}));
|
1224
1224
|
};
|
1225
1225
|
const ConvexHullCollider = props => {
|
1226
|
-
return /*#__PURE__*/
|
1226
|
+
return /*#__PURE__*/React__default["default"].createElement(AnyCollider, _extends({}, props, {
|
1227
1227
|
shape: "convexHull"
|
1228
1228
|
}));
|
1229
1229
|
};
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import { ColliderDesc, ActiveEvents, RigidBodyDesc, CoefficientCombineRule, EventQueue, ShapeType } from '@dimforge/rapier3d-compat';
|
2
2
|
export { CoefficientCombineRule, Collider as RapierCollider, RigidBody as RapierRigidBody } from '@dimforge/rapier3d-compat';
|
3
|
-
import React
|
3
|
+
import React, { useRef, useState, useEffect, useMemo, createContext, useContext, forwardRef, useImperativeHandle, memo } from 'react';
|
4
4
|
import { useAsset } from 'use-asset';
|
5
5
|
import { useFrame } from '@react-three/fiber';
|
6
6
|
import { Quaternion, Euler, Vector3, Object3D, Matrix4, InstancedMesh, CylinderBufferGeometry, BufferGeometry, BufferAttribute, SphereBufferGeometry, BoxBufferGeometry, DynamicDrawUsage } from 'three';
|
@@ -567,7 +567,7 @@ const Physics = ({
|
|
567
567
|
rigidBodyStates,
|
568
568
|
rigidBodyEvents
|
569
569
|
}), []);
|
570
|
-
return /*#__PURE__*/React
|
570
|
+
return /*#__PURE__*/React.createElement(RapierContext.Provider, {
|
571
571
|
value: context
|
572
572
|
}, children);
|
573
573
|
};
|
@@ -843,14 +843,14 @@ const RigidBody = /*#__PURE__*/forwardRef((_ref, ref) => {
|
|
843
843
|
|
844
844
|
const [object, api] = useRigidBody(props);
|
845
845
|
useImperativeHandle(ref, () => api);
|
846
|
-
return /*#__PURE__*/React
|
846
|
+
return /*#__PURE__*/React.createElement(RigidBodyContext.Provider, {
|
847
847
|
value: {
|
848
848
|
ref: object,
|
849
849
|
api,
|
850
850
|
hasCollisionEvents: !!(props.onCollisionEnter || props.onCollisionExit),
|
851
851
|
options: props
|
852
852
|
}
|
853
|
-
}, /*#__PURE__*/React
|
853
|
+
}, /*#__PURE__*/React.createElement("object3D", {
|
854
854
|
ref: object
|
855
855
|
}, children));
|
856
856
|
});
|
@@ -979,12 +979,12 @@ const DebugShape = /*#__PURE__*/memo(({
|
|
979
979
|
const collider = world.getCollider(colliderHandle);
|
980
980
|
return geometryFromCollider(collider);
|
981
981
|
}, [colliderHandle]);
|
982
|
-
return /*#__PURE__*/React
|
982
|
+
return /*#__PURE__*/React.createElement("mesh", {
|
983
983
|
ref: ref
|
984
|
-
}, /*#__PURE__*/React
|
984
|
+
}, /*#__PURE__*/React.createElement("primitive", {
|
985
985
|
object: geometry,
|
986
986
|
attach: "geometry"
|
987
|
-
}), /*#__PURE__*/React
|
987
|
+
}), /*#__PURE__*/React.createElement("meshBasicMaterial", {
|
988
988
|
color: "red",
|
989
989
|
wireframe: true
|
990
990
|
}));
|
@@ -1003,7 +1003,7 @@ const Debug = () => {
|
|
1003
1003
|
});
|
1004
1004
|
setColliders(newColliders);
|
1005
1005
|
});
|
1006
|
-
return /*#__PURE__*/React
|
1006
|
+
return /*#__PURE__*/React.createElement("group", null, colliders.map(handle => /*#__PURE__*/React.createElement(DebugShape, {
|
1007
1007
|
key: handle,
|
1008
1008
|
colliderHandle: handle
|
1009
1009
|
})));
|