@plasius/gpu-physics 0.1.0 → 0.1.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.
package/CHANGELOG.md CHANGED
@@ -5,3 +5,47 @@
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.1] - 2026-02-28
24
+
25
+ - **Added**
26
+ - (placeholder)
27
+
28
+ - **Changed**
29
+ - Removed direct `@react-three/rapier` bridge dependency and switched to framework-neutral physics boundary components.
30
+ - Removed legacy Three.js stack dev dependencies from the package.
31
+
32
+ - **Fixed**
33
+ - (placeholder)
34
+
35
+ - **Security**
36
+ - (placeholder)
37
+
38
+ ## [0.1.0] - 2026-02-11
39
+
40
+ - **Added**
41
+ - Initial release.
42
+
43
+ - **Changed**
44
+ - (placeholder)
45
+
46
+ - **Fixed**
47
+ - (placeholder)
48
+
49
+ - **Security**
50
+ - (placeholder)
51
+ [0.1.1]: https://github.com/Plasius-LTD/gpu-physics/releases/tag/v0.1.1
package/README.md CHANGED
@@ -1,10 +1,18 @@
1
1
  # @plasius/gpu-physics
2
2
 
3
+ [![npm version](https://img.shields.io/npm/v/@plasius/gpu-physics.svg)](https://www.npmjs.com/package/@plasius/gpu-physics)
4
+ [![Build Status](https://img.shields.io/github/actions/workflow/status/Plasius-LTD/gpu-physics/ci.yml?branch=main&label=build&style=flat)](https://github.com/Plasius-LTD/gpu-physics/actions/workflows/ci.yml)
5
+ [![coverage](https://img.shields.io/codecov/c/github/Plasius-LTD/gpu-physics)](https://codecov.io/gh/Plasius-LTD/gpu-physics)
6
+ [![License](https://img.shields.io/github/license/Plasius-LTD/gpu-physics)](./LICENSE)
7
+ [![Code of Conduct](https://img.shields.io/badge/code%20of%20conduct-yes-blue.svg)](./CODE_OF_CONDUCT.md)
8
+ [![Security Policy](https://img.shields.io/badge/security%20policy-yes-orange.svg)](./SECURITY.md)
9
+ [![Changelog](https://img.shields.io/badge/changelog-md-blue.svg)](./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 currently wraps proven runtime primitives and keeps call sites isolated.
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
 
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
- return import_react.default.createElement(import_rapier.Physics, { gravity, ...props }, children);
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
- return import_react.default.createElement(
51
- import_rapier.RigidBody,
52
- {
65
+ const value = import_react.default.useMemo(
66
+ () => ({
53
67
  type: "fixed",
54
68
  colliders,
55
- ...props
56
- },
57
- children
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
- return import_react.default.createElement(
62
- import_rapier.RigidBody,
63
- {
76
+ const value = import_react.default.useMemo(
77
+ () => ({
64
78
  type: "dynamic",
65
79
  colliders,
66
- ...props
67
- },
68
- children
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
- return import_react.default.createElement(
77
- import_rapier.RigidBody,
78
- {
91
+ const value = import_react.default.useMemo(
92
+ () => ({
79
93
  type: "kinematicPosition",
80
94
  colliders,
81
- ...props
82
- },
83
- children
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 = {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.js"],"sourcesContent":["import React from \"react\";\nimport {\n Physics as RapierPhysics,\n RigidBody as RapierRigidBody,\n} from \"@react-three/rapier\";\n\nexport const DEFAULT_GRAVITY = Object.freeze([0, -9.81, 0]);\n\nexport function PhysicsRoot({ gravity = DEFAULT_GRAVITY, children, ...props }) {\n return React.createElement(RapierPhysics, { gravity, ...props }, children);\n}\n\nexport function StaticRigidBody({\n colliders = \"trimesh\",\n children,\n ...props\n}) {\n return React.createElement(\n RapierRigidBody,\n {\n type: \"fixed\",\n colliders,\n ...props,\n },\n children\n );\n}\n\nexport function DynamicRigidBody({ colliders = \"hull\", children, ...props }) {\n return React.createElement(\n RapierRigidBody,\n {\n type: \"dynamic\",\n colliders,\n ...props,\n },\n children\n );\n}\n\nexport function KinematicRigidBody({\n colliders = \"hull\",\n children,\n ...props\n}) {\n return React.createElement(\n RapierRigidBody,\n {\n type: \"kinematicPosition\",\n colliders,\n ...props,\n },\n children\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAkB;AAClB,oBAGO;AAEA,IAAM,kBAAkB,OAAO,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC;AAEnD,SAAS,YAAY,EAAE,UAAU,iBAAiB,UAAU,GAAG,MAAM,GAAG;AAC7E,SAAO,aAAAA,QAAM,cAAc,cAAAC,SAAe,EAAE,SAAS,GAAG,MAAM,GAAG,QAAQ;AAC3E;AAEO,SAAS,gBAAgB;AAAA,EAC9B,YAAY;AAAA,EACZ;AAAA,EACA,GAAG;AACL,GAAG;AACD,SAAO,aAAAD,QAAM;AAAA,IACX,cAAAE;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN;AAAA,MACA,GAAG;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;AAEO,SAAS,iBAAiB,EAAE,YAAY,QAAQ,UAAU,GAAG,MAAM,GAAG;AAC3E,SAAO,aAAAF,QAAM;AAAA,IACX,cAAAE;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN;AAAA,MACA,GAAG;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;AAEO,SAAS,mBAAmB;AAAA,EACjC,YAAY;AAAA,EACZ;AAAA,EACA,GAAG;AACL,GAAG;AACD,SAAO,aAAAF,QAAM;AAAA,IACX,cAAAE;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN;AAAA,MACA,GAAG;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;","names":["React","RapierPhysics","RapierRigidBody"]}
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
- return React.createElement(RapierPhysics, { gravity, ...props }, children);
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
- return React.createElement(
17
- RapierRigidBody,
18
- {
28
+ const value = React.useMemo(
29
+ () => ({
19
30
  type: "fixed",
20
31
  colliders,
21
- ...props
22
- },
23
- children
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
- return React.createElement(
28
- RapierRigidBody,
29
- {
39
+ const value = React.useMemo(
40
+ () => ({
30
41
  type: "dynamic",
31
42
  colliders,
32
- ...props
33
- },
34
- children
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
- return React.createElement(
43
- RapierRigidBody,
44
- {
54
+ const value = React.useMemo(
55
+ () => ({
45
56
  type: "kinematicPosition",
46
57
  colliders,
47
- ...props
48
- },
49
- children
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\";\nimport {\n Physics as RapierPhysics,\n RigidBody as RapierRigidBody,\n} from \"@react-three/rapier\";\n\nexport const DEFAULT_GRAVITY = Object.freeze([0, -9.81, 0]);\n\nexport function PhysicsRoot({ gravity = DEFAULT_GRAVITY, children, ...props }) {\n return React.createElement(RapierPhysics, { gravity, ...props }, children);\n}\n\nexport function StaticRigidBody({\n colliders = \"trimesh\",\n children,\n ...props\n}) {\n return React.createElement(\n RapierRigidBody,\n {\n type: \"fixed\",\n colliders,\n ...props,\n },\n children\n );\n}\n\nexport function DynamicRigidBody({ colliders = \"hull\", children, ...props }) {\n return React.createElement(\n RapierRigidBody,\n {\n type: \"dynamic\",\n colliders,\n ...props,\n },\n children\n );\n}\n\nexport function KinematicRigidBody({\n colliders = \"hull\",\n children,\n ...props\n}) {\n return React.createElement(\n RapierRigidBody,\n {\n type: \"kinematicPosition\",\n colliders,\n ...props,\n },\n children\n );\n}\n"],"mappings":";AAAA,OAAO,WAAW;AAClB;AAAA,EACE,WAAW;AAAA,EACX,aAAa;AAAA,OACR;AAEA,IAAM,kBAAkB,OAAO,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC;AAEnD,SAAS,YAAY,EAAE,UAAU,iBAAiB,UAAU,GAAG,MAAM,GAAG;AAC7E,SAAO,MAAM,cAAc,eAAe,EAAE,SAAS,GAAG,MAAM,GAAG,QAAQ;AAC3E;AAEO,SAAS,gBAAgB;AAAA,EAC9B,YAAY;AAAA,EACZ;AAAA,EACA,GAAG;AACL,GAAG;AACD,SAAO,MAAM;AAAA,IACX;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN;AAAA,MACA,GAAG;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;AAEO,SAAS,iBAAiB,EAAE,YAAY,QAAQ,UAAU,GAAG,MAAM,GAAG;AAC3E,SAAO,MAAM;AAAA,IACX;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN;AAAA,MACA,GAAG;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;AAEO,SAAS,mBAAmB;AAAA,EACjC,YAAY;AAAA,EACZ;AAAA,EACA,GAAG;AACL,GAAG;AACD,SAAO,MAAM;AAAA,IACX;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN;AAAA,MACA,GAAG;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;","names":[]}
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.0",
3
+ "version": "0.1.1",
4
4
  "description": "Physics integration bridge package for Plasius GPU renderer migration.",
5
5
  "type": "module",
6
6
  "sideEffects": false,
@@ -29,7 +29,9 @@
29
29
  "demo": "python3 -m http.server --directory ..",
30
30
  "test": "npm run test:unit",
31
31
  "test:unit": "node --test",
32
- "test:coverage": "c8 --reporter=lcov --reporter=text node --test"
32
+ "test:coverage": "c8 --reporter=lcov --reporter=text node --test",
33
+ "pack:check": "node scripts/verify-public-package.cjs",
34
+ "prepublishOnly": "npm run build && npm run pack:check"
33
35
  },
34
36
  "keywords": [
35
37
  "physics",
@@ -43,9 +45,6 @@
43
45
  "peerDependencies": {
44
46
  "react": "^19.1.0"
45
47
  },
46
- "dependencies": {
47
- "@react-three/rapier": "^2.1.0"
48
- },
49
48
  "devDependencies": {
50
49
  "c8": "^10.1.3",
51
50
  "react": "^19.1.0",
@@ -72,5 +71,8 @@
72
71
  "type": "github",
73
72
  "url": "https://github.com/sponsors/Plasius-LTD"
74
73
  }
75
- ]
74
+ ],
75
+ "overrides": {
76
+ "minimatch": "^10.2.1"
77
+ }
76
78
  }
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
- return React.createElement(RapierPhysics, { gravity, ...props }, children);
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
- return React.createElement(
19
- RapierRigidBody,
20
- {
32
+ const value = React.useMemo(
33
+ () => ({
21
34
  type: "fixed",
22
35
  colliders,
23
- ...props,
24
- },
25
- children
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
- return React.createElement(
31
- RapierRigidBody,
32
- {
44
+ const value = React.useMemo(
45
+ () => ({
33
46
  type: "dynamic",
34
47
  colliders,
35
- ...props,
36
- },
37
- children
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
- return React.createElement(
47
- RapierRigidBody,
48
- {
60
+ const value = React.useMemo(
61
+ () => ({
49
62
  type: "kinematicPosition",
50
63
  colliders,
51
- ...props,
52
- },
53
- children
64
+ options: props,
65
+ }),
66
+ [colliders, props]
54
67
  );
68
+ return React.createElement(RigidBodyContext.Provider, { value }, children);
55
69
  }