@plasius/gpu-physics 0.1.0 → 0.1.2
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.
- package/CHANGELOG.md +59 -0
- package/README.md +19 -1
- package/dist/index.cjs +35 -20
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +35 -23
- package/dist/index.js.map +1 -1
- package/package.json +17 -6
- package/src/index.js +37 -23
package/CHANGELOG.md
CHANGED
|
@@ -5,3 +5,62 @@
|
|
|
5
5
|
- Initial public release of `@plasius/gpu-physics`.
|
|
6
6
|
- Added `PhysicsRoot`, `StaticRigidBody`, `DynamicRigidBody`, and `KinematicRigidBody` bridge components.
|
|
7
7
|
- Added baseline tests and migration documentation.
|
|
8
|
+
|
|
9
|
+
## [Unreleased]
|
|
10
|
+
|
|
11
|
+
- **Added**
|
|
12
|
+
- (placeholder)
|
|
13
|
+
|
|
14
|
+
- **Changed**
|
|
15
|
+
- (placeholder)
|
|
16
|
+
|
|
17
|
+
- **Fixed**
|
|
18
|
+
- (placeholder)
|
|
19
|
+
|
|
20
|
+
- **Security**
|
|
21
|
+
- (placeholder)
|
|
22
|
+
|
|
23
|
+
## [0.1.2] - 2026-03-01
|
|
24
|
+
|
|
25
|
+
- **Added**
|
|
26
|
+
- `lint`, `typecheck`, and security audit scripts for local and CI enforcement.
|
|
27
|
+
|
|
28
|
+
- **Changed**
|
|
29
|
+
- CI now fails early on lint/typecheck/runtime dependency audit before build/test.
|
|
30
|
+
|
|
31
|
+
- **Fixed**
|
|
32
|
+
- Pack-check regex cleanup to remove an unnecessary path escape.
|
|
33
|
+
|
|
34
|
+
- **Security**
|
|
35
|
+
- Runtime dependency vulnerability checks are now enforced in CI.
|
|
36
|
+
|
|
37
|
+
## [0.1.1] - 2026-02-28
|
|
38
|
+
|
|
39
|
+
- **Added**
|
|
40
|
+
- (placeholder)
|
|
41
|
+
|
|
42
|
+
- **Changed**
|
|
43
|
+
- Removed direct `@react-three/rapier` bridge dependency and switched to framework-neutral physics boundary components.
|
|
44
|
+
- Removed legacy Three.js stack dev dependencies from the package.
|
|
45
|
+
|
|
46
|
+
- **Fixed**
|
|
47
|
+
- (placeholder)
|
|
48
|
+
|
|
49
|
+
- **Security**
|
|
50
|
+
- (placeholder)
|
|
51
|
+
|
|
52
|
+
## [0.1.0] - 2026-02-11
|
|
53
|
+
|
|
54
|
+
- **Added**
|
|
55
|
+
- Initial release.
|
|
56
|
+
|
|
57
|
+
- **Changed**
|
|
58
|
+
- (placeholder)
|
|
59
|
+
|
|
60
|
+
- **Fixed**
|
|
61
|
+
- (placeholder)
|
|
62
|
+
|
|
63
|
+
- **Security**
|
|
64
|
+
- (placeholder)
|
|
65
|
+
[0.1.1]: https://github.com/Plasius-LTD/gpu-physics/releases/tag/v0.1.1
|
|
66
|
+
[0.1.2]: https://github.com/Plasius-LTD/gpu-physics/releases/tag/v0.1.2
|
package/README.md
CHANGED
|
@@ -1,10 +1,18 @@
|
|
|
1
1
|
# @plasius/gpu-physics
|
|
2
2
|
|
|
3
|
+
[](https://www.npmjs.com/package/@plasius/gpu-physics)
|
|
4
|
+
[](https://github.com/Plasius-LTD/gpu-physics/actions/workflows/ci.yml)
|
|
5
|
+
[](https://codecov.io/gh/Plasius-LTD/gpu-physics)
|
|
6
|
+
[](./LICENSE)
|
|
7
|
+
[](./CODE_OF_CONDUCT.md)
|
|
8
|
+
[](./SECURITY.md)
|
|
9
|
+
[](./CHANGELOG.md)
|
|
10
|
+
|
|
3
11
|
Framework-ready physics bridge package for Plasius GPU migration paths.
|
|
4
12
|
|
|
5
13
|
## Why
|
|
6
14
|
|
|
7
|
-
`@plasius/gpu-physics` provides a stable physics API surface while renderer code migrates away from direct legacy integration points. It
|
|
15
|
+
`@plasius/gpu-physics` provides a stable physics API surface while renderer code migrates away from direct legacy integration points. It is framework-neutral and keeps call sites isolated from any specific scene runtime.
|
|
8
16
|
|
|
9
17
|
## Install
|
|
10
18
|
|
|
@@ -32,6 +40,16 @@ import { PhysicsRoot, StaticRigidBody } from "@plasius/gpu-physics";
|
|
|
32
40
|
- `DynamicRigidBody`
|
|
33
41
|
- `KinematicRigidBody`
|
|
34
42
|
|
|
43
|
+
## Development Checks
|
|
44
|
+
|
|
45
|
+
```sh
|
|
46
|
+
npm run lint
|
|
47
|
+
npm run typecheck
|
|
48
|
+
npm run test:coverage
|
|
49
|
+
npm run build
|
|
50
|
+
npm run pack:check
|
|
51
|
+
```
|
|
52
|
+
|
|
35
53
|
## License
|
|
36
54
|
|
|
37
55
|
Apache-2.0
|
package/dist/index.cjs
CHANGED
|
@@ -37,51 +37,66 @@ __export(index_exports, {
|
|
|
37
37
|
});
|
|
38
38
|
module.exports = __toCommonJS(index_exports);
|
|
39
39
|
var import_react = __toESM(require("react"), 1);
|
|
40
|
-
var import_rapier = require("@react-three/rapier");
|
|
41
40
|
var DEFAULT_GRAVITY = Object.freeze([0, -9.81, 0]);
|
|
41
|
+
var PhysicsContext = import_react.default.createContext({
|
|
42
|
+
gravity: DEFAULT_GRAVITY,
|
|
43
|
+
options: {}
|
|
44
|
+
});
|
|
45
|
+
var RigidBodyContext = import_react.default.createContext({
|
|
46
|
+
type: "fixed",
|
|
47
|
+
colliders: "trimesh",
|
|
48
|
+
options: {}
|
|
49
|
+
});
|
|
42
50
|
function PhysicsRoot({ gravity = DEFAULT_GRAVITY, children, ...props }) {
|
|
43
|
-
|
|
51
|
+
const value = import_react.default.useMemo(
|
|
52
|
+
() => ({
|
|
53
|
+
gravity,
|
|
54
|
+
options: props
|
|
55
|
+
}),
|
|
56
|
+
[gravity, props]
|
|
57
|
+
);
|
|
58
|
+
return import_react.default.createElement(PhysicsContext.Provider, { value }, children);
|
|
44
59
|
}
|
|
45
60
|
function StaticRigidBody({
|
|
46
61
|
colliders = "trimesh",
|
|
47
62
|
children,
|
|
48
63
|
...props
|
|
49
64
|
}) {
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
{
|
|
65
|
+
const value = import_react.default.useMemo(
|
|
66
|
+
() => ({
|
|
53
67
|
type: "fixed",
|
|
54
68
|
colliders,
|
|
55
|
-
|
|
56
|
-
},
|
|
57
|
-
|
|
69
|
+
options: props
|
|
70
|
+
}),
|
|
71
|
+
[colliders, props]
|
|
58
72
|
);
|
|
73
|
+
return import_react.default.createElement(RigidBodyContext.Provider, { value }, children);
|
|
59
74
|
}
|
|
60
75
|
function DynamicRigidBody({ colliders = "hull", children, ...props }) {
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
{
|
|
76
|
+
const value = import_react.default.useMemo(
|
|
77
|
+
() => ({
|
|
64
78
|
type: "dynamic",
|
|
65
79
|
colliders,
|
|
66
|
-
|
|
67
|
-
},
|
|
68
|
-
|
|
80
|
+
options: props
|
|
81
|
+
}),
|
|
82
|
+
[colliders, props]
|
|
69
83
|
);
|
|
84
|
+
return import_react.default.createElement(RigidBodyContext.Provider, { value }, children);
|
|
70
85
|
}
|
|
71
86
|
function KinematicRigidBody({
|
|
72
87
|
colliders = "hull",
|
|
73
88
|
children,
|
|
74
89
|
...props
|
|
75
90
|
}) {
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
{
|
|
91
|
+
const value = import_react.default.useMemo(
|
|
92
|
+
() => ({
|
|
79
93
|
type: "kinematicPosition",
|
|
80
94
|
colliders,
|
|
81
|
-
|
|
82
|
-
},
|
|
83
|
-
|
|
95
|
+
options: props
|
|
96
|
+
}),
|
|
97
|
+
[colliders, props]
|
|
84
98
|
);
|
|
99
|
+
return import_react.default.createElement(RigidBodyContext.Provider, { value }, children);
|
|
85
100
|
}
|
|
86
101
|
// Annotate the CommonJS export names for ESM import in node:
|
|
87
102
|
0 && (module.exports = {
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.js"],"sourcesContent":["import React from \"react\";\
|
|
1
|
+
{"version":3,"sources":["../src/index.js"],"sourcesContent":["import React from \"react\";\n\nexport const DEFAULT_GRAVITY = Object.freeze([0, -9.81, 0]);\n\nconst PhysicsContext = React.createContext({\n gravity: DEFAULT_GRAVITY,\n options: {},\n});\n\nconst RigidBodyContext = React.createContext({\n type: \"fixed\",\n colliders: \"trimesh\",\n options: {},\n});\n\nexport function PhysicsRoot({ gravity = DEFAULT_GRAVITY, children, ...props }) {\n const value = React.useMemo(\n () => ({\n gravity,\n options: props,\n }),\n [gravity, props]\n );\n return React.createElement(PhysicsContext.Provider, { value }, children);\n}\n\nexport function StaticRigidBody({\n colliders = \"trimesh\",\n children,\n ...props\n}) {\n const value = React.useMemo(\n () => ({\n type: \"fixed\",\n colliders,\n options: props,\n }),\n [colliders, props]\n );\n return React.createElement(RigidBodyContext.Provider, { value }, children);\n}\n\nexport function DynamicRigidBody({ colliders = \"hull\", children, ...props }) {\n const value = React.useMemo(\n () => ({\n type: \"dynamic\",\n colliders,\n options: props,\n }),\n [colliders, props]\n );\n return React.createElement(RigidBodyContext.Provider, { value }, children);\n}\n\nexport function KinematicRigidBody({\n colliders = \"hull\",\n children,\n ...props\n}) {\n const value = React.useMemo(\n () => ({\n type: \"kinematicPosition\",\n colliders,\n options: props,\n }),\n [colliders, props]\n );\n return React.createElement(RigidBodyContext.Provider, { value }, children);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAkB;AAEX,IAAM,kBAAkB,OAAO,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC;AAE1D,IAAM,iBAAiB,aAAAA,QAAM,cAAc;AAAA,EACzC,SAAS;AAAA,EACT,SAAS,CAAC;AACZ,CAAC;AAED,IAAM,mBAAmB,aAAAA,QAAM,cAAc;AAAA,EAC3C,MAAM;AAAA,EACN,WAAW;AAAA,EACX,SAAS,CAAC;AACZ,CAAC;AAEM,SAAS,YAAY,EAAE,UAAU,iBAAiB,UAAU,GAAG,MAAM,GAAG;AAC7E,QAAM,QAAQ,aAAAA,QAAM;AAAA,IAClB,OAAO;AAAA,MACL;AAAA,MACA,SAAS;AAAA,IACX;AAAA,IACA,CAAC,SAAS,KAAK;AAAA,EACjB;AACA,SAAO,aAAAA,QAAM,cAAc,eAAe,UAAU,EAAE,MAAM,GAAG,QAAQ;AACzE;AAEO,SAAS,gBAAgB;AAAA,EAC9B,YAAY;AAAA,EACZ;AAAA,EACA,GAAG;AACL,GAAG;AACD,QAAM,QAAQ,aAAAA,QAAM;AAAA,IAClB,OAAO;AAAA,MACL,MAAM;AAAA,MACN;AAAA,MACA,SAAS;AAAA,IACX;AAAA,IACA,CAAC,WAAW,KAAK;AAAA,EACnB;AACA,SAAO,aAAAA,QAAM,cAAc,iBAAiB,UAAU,EAAE,MAAM,GAAG,QAAQ;AAC3E;AAEO,SAAS,iBAAiB,EAAE,YAAY,QAAQ,UAAU,GAAG,MAAM,GAAG;AAC3E,QAAM,QAAQ,aAAAA,QAAM;AAAA,IAClB,OAAO;AAAA,MACL,MAAM;AAAA,MACN;AAAA,MACA,SAAS;AAAA,IACX;AAAA,IACA,CAAC,WAAW,KAAK;AAAA,EACnB;AACA,SAAO,aAAAA,QAAM,cAAc,iBAAiB,UAAU,EAAE,MAAM,GAAG,QAAQ;AAC3E;AAEO,SAAS,mBAAmB;AAAA,EACjC,YAAY;AAAA,EACZ;AAAA,EACA,GAAG;AACL,GAAG;AACD,QAAM,QAAQ,aAAAA,QAAM;AAAA,IAClB,OAAO;AAAA,MACL,MAAM;AAAA,MACN;AAAA,MACA,SAAS;AAAA,IACX;AAAA,IACA,CAAC,WAAW,KAAK;AAAA,EACnB;AACA,SAAO,aAAAA,QAAM,cAAc,iBAAiB,UAAU,EAAE,MAAM,GAAG,QAAQ;AAC3E;","names":["React"]}
|
package/dist/index.js
CHANGED
|
@@ -1,53 +1,65 @@
|
|
|
1
1
|
// src/index.js
|
|
2
2
|
import React from "react";
|
|
3
|
-
import {
|
|
4
|
-
Physics as RapierPhysics,
|
|
5
|
-
RigidBody as RapierRigidBody
|
|
6
|
-
} from "@react-three/rapier";
|
|
7
3
|
var DEFAULT_GRAVITY = Object.freeze([0, -9.81, 0]);
|
|
4
|
+
var PhysicsContext = React.createContext({
|
|
5
|
+
gravity: DEFAULT_GRAVITY,
|
|
6
|
+
options: {}
|
|
7
|
+
});
|
|
8
|
+
var RigidBodyContext = React.createContext({
|
|
9
|
+
type: "fixed",
|
|
10
|
+
colliders: "trimesh",
|
|
11
|
+
options: {}
|
|
12
|
+
});
|
|
8
13
|
function PhysicsRoot({ gravity = DEFAULT_GRAVITY, children, ...props }) {
|
|
9
|
-
|
|
14
|
+
const value = React.useMemo(
|
|
15
|
+
() => ({
|
|
16
|
+
gravity,
|
|
17
|
+
options: props
|
|
18
|
+
}),
|
|
19
|
+
[gravity, props]
|
|
20
|
+
);
|
|
21
|
+
return React.createElement(PhysicsContext.Provider, { value }, children);
|
|
10
22
|
}
|
|
11
23
|
function StaticRigidBody({
|
|
12
24
|
colliders = "trimesh",
|
|
13
25
|
children,
|
|
14
26
|
...props
|
|
15
27
|
}) {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
{
|
|
28
|
+
const value = React.useMemo(
|
|
29
|
+
() => ({
|
|
19
30
|
type: "fixed",
|
|
20
31
|
colliders,
|
|
21
|
-
|
|
22
|
-
},
|
|
23
|
-
|
|
32
|
+
options: props
|
|
33
|
+
}),
|
|
34
|
+
[colliders, props]
|
|
24
35
|
);
|
|
36
|
+
return React.createElement(RigidBodyContext.Provider, { value }, children);
|
|
25
37
|
}
|
|
26
38
|
function DynamicRigidBody({ colliders = "hull", children, ...props }) {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
{
|
|
39
|
+
const value = React.useMemo(
|
|
40
|
+
() => ({
|
|
30
41
|
type: "dynamic",
|
|
31
42
|
colliders,
|
|
32
|
-
|
|
33
|
-
},
|
|
34
|
-
|
|
43
|
+
options: props
|
|
44
|
+
}),
|
|
45
|
+
[colliders, props]
|
|
35
46
|
);
|
|
47
|
+
return React.createElement(RigidBodyContext.Provider, { value }, children);
|
|
36
48
|
}
|
|
37
49
|
function KinematicRigidBody({
|
|
38
50
|
colliders = "hull",
|
|
39
51
|
children,
|
|
40
52
|
...props
|
|
41
53
|
}) {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
{
|
|
54
|
+
const value = React.useMemo(
|
|
55
|
+
() => ({
|
|
45
56
|
type: "kinematicPosition",
|
|
46
57
|
colliders,
|
|
47
|
-
|
|
48
|
-
},
|
|
49
|
-
|
|
58
|
+
options: props
|
|
59
|
+
}),
|
|
60
|
+
[colliders, props]
|
|
50
61
|
);
|
|
62
|
+
return React.createElement(RigidBodyContext.Provider, { value }, children);
|
|
51
63
|
}
|
|
52
64
|
export {
|
|
53
65
|
DEFAULT_GRAVITY,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.js"],"sourcesContent":["import React from \"react\";\
|
|
1
|
+
{"version":3,"sources":["../src/index.js"],"sourcesContent":["import React from \"react\";\n\nexport const DEFAULT_GRAVITY = Object.freeze([0, -9.81, 0]);\n\nconst PhysicsContext = React.createContext({\n gravity: DEFAULT_GRAVITY,\n options: {},\n});\n\nconst RigidBodyContext = React.createContext({\n type: \"fixed\",\n colliders: \"trimesh\",\n options: {},\n});\n\nexport function PhysicsRoot({ gravity = DEFAULT_GRAVITY, children, ...props }) {\n const value = React.useMemo(\n () => ({\n gravity,\n options: props,\n }),\n [gravity, props]\n );\n return React.createElement(PhysicsContext.Provider, { value }, children);\n}\n\nexport function StaticRigidBody({\n colliders = \"trimesh\",\n children,\n ...props\n}) {\n const value = React.useMemo(\n () => ({\n type: \"fixed\",\n colliders,\n options: props,\n }),\n [colliders, props]\n );\n return React.createElement(RigidBodyContext.Provider, { value }, children);\n}\n\nexport function DynamicRigidBody({ colliders = \"hull\", children, ...props }) {\n const value = React.useMemo(\n () => ({\n type: \"dynamic\",\n colliders,\n options: props,\n }),\n [colliders, props]\n );\n return React.createElement(RigidBodyContext.Provider, { value }, children);\n}\n\nexport function KinematicRigidBody({\n colliders = \"hull\",\n children,\n ...props\n}) {\n const value = React.useMemo(\n () => ({\n type: \"kinematicPosition\",\n colliders,\n options: props,\n }),\n [colliders, props]\n );\n return React.createElement(RigidBodyContext.Provider, { value }, children);\n}\n"],"mappings":";AAAA,OAAO,WAAW;AAEX,IAAM,kBAAkB,OAAO,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC;AAE1D,IAAM,iBAAiB,MAAM,cAAc;AAAA,EACzC,SAAS;AAAA,EACT,SAAS,CAAC;AACZ,CAAC;AAED,IAAM,mBAAmB,MAAM,cAAc;AAAA,EAC3C,MAAM;AAAA,EACN,WAAW;AAAA,EACX,SAAS,CAAC;AACZ,CAAC;AAEM,SAAS,YAAY,EAAE,UAAU,iBAAiB,UAAU,GAAG,MAAM,GAAG;AAC7E,QAAM,QAAQ,MAAM;AAAA,IAClB,OAAO;AAAA,MACL;AAAA,MACA,SAAS;AAAA,IACX;AAAA,IACA,CAAC,SAAS,KAAK;AAAA,EACjB;AACA,SAAO,MAAM,cAAc,eAAe,UAAU,EAAE,MAAM,GAAG,QAAQ;AACzE;AAEO,SAAS,gBAAgB;AAAA,EAC9B,YAAY;AAAA,EACZ;AAAA,EACA,GAAG;AACL,GAAG;AACD,QAAM,QAAQ,MAAM;AAAA,IAClB,OAAO;AAAA,MACL,MAAM;AAAA,MACN;AAAA,MACA,SAAS;AAAA,IACX;AAAA,IACA,CAAC,WAAW,KAAK;AAAA,EACnB;AACA,SAAO,MAAM,cAAc,iBAAiB,UAAU,EAAE,MAAM,GAAG,QAAQ;AAC3E;AAEO,SAAS,iBAAiB,EAAE,YAAY,QAAQ,UAAU,GAAG,MAAM,GAAG;AAC3E,QAAM,QAAQ,MAAM;AAAA,IAClB,OAAO;AAAA,MACL,MAAM;AAAA,MACN;AAAA,MACA,SAAS;AAAA,IACX;AAAA,IACA,CAAC,WAAW,KAAK;AAAA,EACnB;AACA,SAAO,MAAM,cAAc,iBAAiB,UAAU,EAAE,MAAM,GAAG,QAAQ;AAC3E;AAEO,SAAS,mBAAmB;AAAA,EACjC,YAAY;AAAA,EACZ;AAAA,EACA,GAAG;AACL,GAAG;AACD,QAAM,QAAQ,MAAM;AAAA,IAClB,OAAO;AAAA,MACL,MAAM;AAAA,MACN;AAAA,MACA,SAAS;AAAA,IACX;AAAA,IACA,CAAC,WAAW,KAAK;AAAA,EACnB;AACA,SAAO,MAAM,cAAc,iBAAiB,UAAU,EAAE,MAAM,GAAG,QAAQ;AAC3E;","names":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@plasius/gpu-physics",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"description": "Physics integration bridge package for Plasius GPU renderer migration.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"sideEffects": false,
|
|
@@ -27,9 +27,17 @@
|
|
|
27
27
|
"scripts": {
|
|
28
28
|
"build": "tsup",
|
|
29
29
|
"demo": "python3 -m http.server --directory ..",
|
|
30
|
+
"typecheck": "node --check src/index.js",
|
|
31
|
+
"audit:eslint": "eslint . --max-warnings=0",
|
|
32
|
+
"audit:deps": "npm ls --all --omit=optional --omit=peer > /dev/null 2>&1 || true",
|
|
33
|
+
"audit:npm": "npm audit --audit-level=high --omit=dev",
|
|
34
|
+
"audit:test": "npm run test:coverage",
|
|
35
|
+
"lint": "eslint . --max-warnings=0",
|
|
30
36
|
"test": "npm run test:unit",
|
|
31
37
|
"test:unit": "node --test",
|
|
32
|
-
"test:coverage": "c8 --reporter=lcov --reporter=text node --test"
|
|
38
|
+
"test:coverage": "c8 --reporter=lcov --reporter=text node --test",
|
|
39
|
+
"pack:check": "node scripts/verify-public-package.cjs",
|
|
40
|
+
"prepublishOnly": "npm run build && npm run pack:check"
|
|
33
41
|
},
|
|
34
42
|
"keywords": [
|
|
35
43
|
"physics",
|
|
@@ -43,11 +51,11 @@
|
|
|
43
51
|
"peerDependencies": {
|
|
44
52
|
"react": "^19.1.0"
|
|
45
53
|
},
|
|
46
|
-
"dependencies": {
|
|
47
|
-
"@react-three/rapier": "^2.1.0"
|
|
48
|
-
},
|
|
49
54
|
"devDependencies": {
|
|
55
|
+
"@eslint/js": "^9.39.1",
|
|
50
56
|
"c8": "^10.1.3",
|
|
57
|
+
"eslint": "^9.39.1",
|
|
58
|
+
"globals": "^17.3.0",
|
|
51
59
|
"react": "^19.1.0",
|
|
52
60
|
"tsup": "^8.5.0",
|
|
53
61
|
"typescript": "^5.9.3"
|
|
@@ -72,5 +80,8 @@
|
|
|
72
80
|
"type": "github",
|
|
73
81
|
"url": "https://github.com/sponsors/Plasius-LTD"
|
|
74
82
|
}
|
|
75
|
-
]
|
|
83
|
+
],
|
|
84
|
+
"overrides": {
|
|
85
|
+
"minimatch": "^10.2.1"
|
|
86
|
+
}
|
|
76
87
|
}
|
package/src/index.js
CHANGED
|
@@ -1,13 +1,27 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
import {
|
|
3
|
-
Physics as RapierPhysics,
|
|
4
|
-
RigidBody as RapierRigidBody,
|
|
5
|
-
} from "@react-three/rapier";
|
|
6
2
|
|
|
7
3
|
export const DEFAULT_GRAVITY = Object.freeze([0, -9.81, 0]);
|
|
8
4
|
|
|
5
|
+
const PhysicsContext = React.createContext({
|
|
6
|
+
gravity: DEFAULT_GRAVITY,
|
|
7
|
+
options: {},
|
|
8
|
+
});
|
|
9
|
+
|
|
10
|
+
const RigidBodyContext = React.createContext({
|
|
11
|
+
type: "fixed",
|
|
12
|
+
colliders: "trimesh",
|
|
13
|
+
options: {},
|
|
14
|
+
});
|
|
15
|
+
|
|
9
16
|
export function PhysicsRoot({ gravity = DEFAULT_GRAVITY, children, ...props }) {
|
|
10
|
-
|
|
17
|
+
const value = React.useMemo(
|
|
18
|
+
() => ({
|
|
19
|
+
gravity,
|
|
20
|
+
options: props,
|
|
21
|
+
}),
|
|
22
|
+
[gravity, props]
|
|
23
|
+
);
|
|
24
|
+
return React.createElement(PhysicsContext.Provider, { value }, children);
|
|
11
25
|
}
|
|
12
26
|
|
|
13
27
|
export function StaticRigidBody({
|
|
@@ -15,27 +29,27 @@ export function StaticRigidBody({
|
|
|
15
29
|
children,
|
|
16
30
|
...props
|
|
17
31
|
}) {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
{
|
|
32
|
+
const value = React.useMemo(
|
|
33
|
+
() => ({
|
|
21
34
|
type: "fixed",
|
|
22
35
|
colliders,
|
|
23
|
-
|
|
24
|
-
},
|
|
25
|
-
|
|
36
|
+
options: props,
|
|
37
|
+
}),
|
|
38
|
+
[colliders, props]
|
|
26
39
|
);
|
|
40
|
+
return React.createElement(RigidBodyContext.Provider, { value }, children);
|
|
27
41
|
}
|
|
28
42
|
|
|
29
43
|
export function DynamicRigidBody({ colliders = "hull", children, ...props }) {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
{
|
|
44
|
+
const value = React.useMemo(
|
|
45
|
+
() => ({
|
|
33
46
|
type: "dynamic",
|
|
34
47
|
colliders,
|
|
35
|
-
|
|
36
|
-
},
|
|
37
|
-
|
|
48
|
+
options: props,
|
|
49
|
+
}),
|
|
50
|
+
[colliders, props]
|
|
38
51
|
);
|
|
52
|
+
return React.createElement(RigidBodyContext.Provider, { value }, children);
|
|
39
53
|
}
|
|
40
54
|
|
|
41
55
|
export function KinematicRigidBody({
|
|
@@ -43,13 +57,13 @@ export function KinematicRigidBody({
|
|
|
43
57
|
children,
|
|
44
58
|
...props
|
|
45
59
|
}) {
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
{
|
|
60
|
+
const value = React.useMemo(
|
|
61
|
+
() => ({
|
|
49
62
|
type: "kinematicPosition",
|
|
50
63
|
colliders,
|
|
51
|
-
|
|
52
|
-
},
|
|
53
|
-
|
|
64
|
+
options: props,
|
|
65
|
+
}),
|
|
66
|
+
[colliders, props]
|
|
54
67
|
);
|
|
68
|
+
return React.createElement(RigidBodyContext.Provider, { value }, children);
|
|
55
69
|
}
|