@gg-web-engine/rapier2d 0.0.28 → 0.0.30
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/dist/components/rapier-2d-rigid-body.component.d.ts +11 -5
- package/dist/components/rapier-2d-rigid-body.component.js +47 -2
- package/dist/components/rapier-2d-trigger.component.d.ts +4 -3
- package/dist/components/rapier-2d-world.component.d.ts +6 -2
- package/dist/components/rapier-2d-world.component.js +15 -2
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/rapier-2d-factory.d.ts +2 -1
- package/dist/rapier-2d-factory.js +1 -1
- package/dist/types.d.ts +8 -0
- package/dist/types.js +1 -0
- package/package.json +3 -3
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { Body2DOptions, Entity2d, Gg2dWorld, IRigidBody2dComponent,
|
|
2
|
-
import { Collider, ColliderDesc, RigidBody, RigidBodyDesc } from '@dimforge/rapier2d-compat';
|
|
1
|
+
import { Body2DOptions, CollisionGroup, Entity2d, Gg2dWorld, IRigidBody2dComponent, Point2, VisualTypeDocRepo2D } from '@gg-web-engine/core';
|
|
2
|
+
import { Collider, ColliderDesc, InteractionGroups, RigidBody, RigidBodyDesc } from '@dimforge/rapier2d-compat';
|
|
3
3
|
import { Rapier2dWorldComponent } from './rapier-2d-world.component';
|
|
4
|
-
|
|
4
|
+
import { Rapier2dPhysicsTypeDocRepo } from '../types';
|
|
5
|
+
export declare class Rapier2dRigidBodyComponent implements IRigidBody2dComponent<Rapier2dPhysicsTypeDocRepo> {
|
|
5
6
|
protected readonly world: Rapier2dWorldComponent;
|
|
6
7
|
protected _colliderDescr: ColliderDesc[];
|
|
7
8
|
protected _bodyDescr: RigidBodyDesc;
|
|
@@ -22,9 +23,14 @@ export declare class Rapier2dRigidBodyComponent implements IRigidBody2dComponent
|
|
|
22
23
|
name: string;
|
|
23
24
|
get factoryProps(): [ColliderDesc[], RigidBodyDesc, Omit<Omit<Body2DOptions, 'dynamic'>, 'mass'>];
|
|
24
25
|
constructor(world: Rapier2dWorldComponent, _colliderDescr: ColliderDesc[], _bodyDescr: RigidBodyDesc, _colliderOptions: Omit<Omit<Body2DOptions, 'dynamic'>, 'mass'>);
|
|
26
|
+
protected collisionGroups: InteractionGroups;
|
|
27
|
+
get interactWithCollisionGroups(): CollisionGroup[];
|
|
28
|
+
set interactWithCollisionGroups(value: CollisionGroup[] | 'all');
|
|
29
|
+
get ownCollisionGroups(): CollisionGroup[];
|
|
30
|
+
set ownCollisionGroups(value: CollisionGroup[] | 'all');
|
|
25
31
|
clone(): Rapier2dRigidBodyComponent;
|
|
26
|
-
addToWorld(world: Gg2dWorld<
|
|
27
|
-
removeFromWorld(world: Gg2dWorld<
|
|
32
|
+
addToWorld(world: Gg2dWorld<VisualTypeDocRepo2D, Rapier2dPhysicsTypeDocRepo>): void;
|
|
33
|
+
removeFromWorld(world: Gg2dWorld<VisualTypeDocRepo2D, Rapier2dPhysicsTypeDocRepo>): void;
|
|
28
34
|
resetMotion(): void;
|
|
29
35
|
dispose(): void;
|
|
30
36
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Pnt2, } from '@gg-web-engine/core';
|
|
2
|
-
import { Vector2 } from '@dimforge/rapier2d-compat';
|
|
1
|
+
import { BitMask, Pnt2, } from '@gg-web-engine/core';
|
|
2
|
+
import { Vector2, } from '@dimforge/rapier2d-compat';
|
|
3
3
|
export class Rapier2dRigidBodyComponent {
|
|
4
4
|
constructor(world, _colliderDescr, _bodyDescr, _colliderOptions) {
|
|
5
5
|
this.world = world;
|
|
@@ -10,6 +10,7 @@ export class Rapier2dRigidBodyComponent {
|
|
|
10
10
|
this._nativeBody = null;
|
|
11
11
|
this._nativeBodyColliders = null;
|
|
12
12
|
this.name = '';
|
|
13
|
+
this.collisionGroups = BitMask.full(32);
|
|
13
14
|
}
|
|
14
15
|
get position() {
|
|
15
16
|
return Pnt2.clone(this.nativeBody ? this.nativeBody.translation() : this._bodyDescr.translation);
|
|
@@ -63,6 +64,50 @@ export class Rapier2dRigidBodyComponent {
|
|
|
63
64
|
get factoryProps() {
|
|
64
65
|
return [this._colliderDescr, this._bodyDescr, this._colliderOptions];
|
|
65
66
|
}
|
|
67
|
+
get interactWithCollisionGroups() {
|
|
68
|
+
return BitMask.unpack(this.collisionGroups, 16);
|
|
69
|
+
}
|
|
70
|
+
set interactWithCollisionGroups(value) {
|
|
71
|
+
let mask;
|
|
72
|
+
if (value === 'all') {
|
|
73
|
+
mask = BitMask.full(16);
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
mask = BitMask.pack(value, 16);
|
|
77
|
+
}
|
|
78
|
+
mask = mask | (this.collisionGroups & (BitMask.full(16) << 16));
|
|
79
|
+
if (mask === this.collisionGroups) {
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
this.collisionGroups = mask;
|
|
83
|
+
if (this.nativeBody) {
|
|
84
|
+
for (let i = 0; i < this.nativeBody.numColliders(); i++) {
|
|
85
|
+
this.nativeBody.collider(i).setCollisionGroups(this.collisionGroups);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
get ownCollisionGroups() {
|
|
90
|
+
return BitMask.unpack(this.collisionGroups >> 16, 16);
|
|
91
|
+
}
|
|
92
|
+
set ownCollisionGroups(value) {
|
|
93
|
+
let mask;
|
|
94
|
+
if (value === 'all') {
|
|
95
|
+
mask = BitMask.full(16);
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
mask = BitMask.pack(value, 16);
|
|
99
|
+
}
|
|
100
|
+
mask = (mask << 16) | (this.collisionGroups & BitMask.full(16));
|
|
101
|
+
if (mask === this.collisionGroups) {
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
this.collisionGroups = mask;
|
|
105
|
+
if (this.nativeBody) {
|
|
106
|
+
for (let i = 0; i < this.nativeBody.numColliders(); i++) {
|
|
107
|
+
this.nativeBody.collider(i).setCollisionGroups(this.collisionGroups);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
66
111
|
clone() {
|
|
67
112
|
// TODO probably need to clone factory props to not share the same reference?
|
|
68
113
|
return new Rapier2dRigidBodyComponent(this.world, ...this.factoryProps);
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { Observable, Subject } from 'rxjs';
|
|
2
2
|
import { ColliderDesc, RigidBodyDesc } from '@dimforge/rapier2d-compat';
|
|
3
3
|
import { Rapier2dRigidBodyComponent } from './rapier-2d-rigid-body.component';
|
|
4
|
-
import { Gg2dWorld, ITrigger2dComponent,
|
|
4
|
+
import { Gg2dWorld, ITrigger2dComponent, VisualTypeDocRepo2D } from '@gg-web-engine/core';
|
|
5
5
|
import { Rapier2dWorldComponent } from './rapier-2d-world.component';
|
|
6
|
-
|
|
6
|
+
import { Rapier2dPhysicsTypeDocRepo } from '../types';
|
|
7
|
+
export declare class Rapier2dTriggerComponent extends Rapier2dRigidBodyComponent implements ITrigger2dComponent<Rapier2dPhysicsTypeDocRepo> {
|
|
7
8
|
protected readonly world: Rapier2dWorldComponent;
|
|
8
9
|
protected _colliderDescr: ColliderDesc[];
|
|
9
10
|
protected _bodyDescr: RigidBodyDesc;
|
|
@@ -12,7 +13,7 @@ export declare class Rapier2dTriggerComponent extends Rapier2dRigidBodyComponent
|
|
|
12
13
|
protected readonly onEnter$: Subject<Rapier2dRigidBodyComponent>;
|
|
13
14
|
protected readonly onLeft$: Subject<Rapier2dRigidBodyComponent>;
|
|
14
15
|
constructor(world: Rapier2dWorldComponent, _colliderDescr: ColliderDesc[], _bodyDescr: RigidBodyDesc);
|
|
15
|
-
addToWorld(world: Gg2dWorld<
|
|
16
|
+
addToWorld(world: Gg2dWorld<VisualTypeDocRepo2D, Rapier2dPhysicsTypeDocRepo>): void;
|
|
16
17
|
checkOverlaps(): void;
|
|
17
18
|
clone(): Rapier2dTriggerComponent;
|
|
18
19
|
}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { Gg2dWorld, IDebugPhysicsDrawer, IPhysicsWorld2dComponent, Point2 } from '@gg-web-engine/core';
|
|
1
|
+
import { CollisionGroup, Gg2dWorld, IDebugPhysicsDrawer, IPhysicsWorld2dComponent, Point2 } from '@gg-web-engine/core';
|
|
2
2
|
import { EventQueue, World } from '@dimforge/rapier2d-compat';
|
|
3
3
|
import { Rapier2dRigidBodyComponent } from './rapier-2d-rigid-body.component';
|
|
4
4
|
import { Rapier2dFactory } from '../rapier-2d-factory';
|
|
5
|
-
|
|
5
|
+
import { Rapier2dPhysicsTypeDocRepo } from '../types';
|
|
6
|
+
export declare class Rapier2dWorldComponent implements IPhysicsWorld2dComponent<Rapier2dPhysicsTypeDocRepo> {
|
|
6
7
|
private _factory;
|
|
7
8
|
get factory(): Rapier2dFactory;
|
|
8
9
|
private readonly unitScale;
|
|
@@ -20,6 +21,9 @@ export declare class Rapier2dWorldComponent implements IPhysicsWorld2dComponent
|
|
|
20
21
|
readonly handleIdEntityMap: Map<number, Rapier2dRigidBodyComponent>;
|
|
21
22
|
init(): Promise<void>;
|
|
22
23
|
simulate(delta: number): void;
|
|
24
|
+
protected lockedCollisionGroups: number[];
|
|
25
|
+
registerCollisionGroup(): CollisionGroup;
|
|
26
|
+
deregisterCollisionGroup(group: CollisionGroup): void;
|
|
23
27
|
startDebugger(world: Gg2dWorld, drawer: IDebugPhysicsDrawer<Point2, number>): void;
|
|
24
28
|
stopDebugger(): void;
|
|
25
29
|
dispose(): void;
|
|
@@ -7,8 +7,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
7
7
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
8
|
});
|
|
9
9
|
};
|
|
10
|
-
import { Pnt2 } from '@gg-web-engine/core';
|
|
11
|
-
import {
|
|
10
|
+
import { Pnt2, } from '@gg-web-engine/core';
|
|
11
|
+
import { EventQueue, init, Vector2, World } from '@dimforge/rapier2d-compat';
|
|
12
12
|
import { Rapier2dFactory } from '../rapier-2d-factory';
|
|
13
13
|
export class Rapier2dWorldComponent {
|
|
14
14
|
constructor() {
|
|
@@ -19,6 +19,7 @@ export class Rapier2dWorldComponent {
|
|
|
19
19
|
this._nativeWorld = null;
|
|
20
20
|
this._eventQueue = null;
|
|
21
21
|
this.handleIdEntityMap = new Map();
|
|
22
|
+
this.lockedCollisionGroups = [];
|
|
22
23
|
}
|
|
23
24
|
get factory() {
|
|
24
25
|
if (!this._factory) {
|
|
@@ -70,6 +71,18 @@ export class Rapier2dWorldComponent {
|
|
|
70
71
|
this._nativeWorld.timestep = (this.timeScale * delta) / 1000;
|
|
71
72
|
(_a = this._nativeWorld) === null || _a === void 0 ? void 0 : _a.step(this.eventQueue);
|
|
72
73
|
}
|
|
74
|
+
registerCollisionGroup() {
|
|
75
|
+
for (let i = 0; i < 16; i++) {
|
|
76
|
+
if (!this.lockedCollisionGroups.includes(i)) {
|
|
77
|
+
this.lockedCollisionGroups.push(i);
|
|
78
|
+
return i;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
throw new Error('App tries to register 17th collision group, but rapier 2D supports only 16');
|
|
82
|
+
}
|
|
83
|
+
deregisterCollisionGroup(group) {
|
|
84
|
+
this.lockedCollisionGroups = this.lockedCollisionGroups.filter(x => x !== group);
|
|
85
|
+
}
|
|
73
86
|
startDebugger(world, drawer) {
|
|
74
87
|
// TODO
|
|
75
88
|
throw new Error('rapier-2d DebugDrawer not implemented');
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -3,7 +3,8 @@ import { ColliderDesc, RigidBodyDesc } from '@dimforge/rapier2d-compat';
|
|
|
3
3
|
import { Rapier2dRigidBodyComponent } from './components/rapier-2d-rigid-body.component';
|
|
4
4
|
import { Rapier2dTriggerComponent } from './components/rapier-2d-trigger.component';
|
|
5
5
|
import { Rapier2dWorldComponent } from './components/rapier-2d-world.component';
|
|
6
|
-
|
|
6
|
+
import { Rapier2dPhysicsTypeDocRepo } from './types';
|
|
7
|
+
export declare class Rapier2dFactory implements IPhysicsBody2dComponentFactory<Rapier2dPhysicsTypeDocRepo> {
|
|
7
8
|
protected readonly world: Rapier2dWorldComponent;
|
|
8
9
|
constructor(world: Rapier2dWorldComponent);
|
|
9
10
|
createRigidBody(descriptor: BodyShape2DDescriptor, transform?: {
|
|
@@ -7,7 +7,7 @@ export class Rapier2dFactory {
|
|
|
7
7
|
this.world = world;
|
|
8
8
|
}
|
|
9
9
|
createRigidBody(descriptor, transform) {
|
|
10
|
-
return new Rapier2dRigidBodyComponent(this.world, this.createColliderDescr(descriptor.shape), this.createRigidBodyDescr(descriptor.body, transform), Object.assign({ friction: 0.5, restitution: 0.1 }, descriptor.body));
|
|
10
|
+
return new Rapier2dRigidBodyComponent(this.world, this.createColliderDescr(descriptor.shape), this.createRigidBodyDescr(descriptor.body, transform), Object.assign({ friction: 0.5, restitution: 0.1, ownCollisionGroups: 'all', interactWithCollisionGroups: 'all' }, descriptor.body));
|
|
11
11
|
}
|
|
12
12
|
createTrigger(descriptor, transform) {
|
|
13
13
|
const colliderDescr = this.createColliderDescr(descriptor);
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Rapier2dFactory } from './rapier-2d-factory';
|
|
2
|
+
import { Rapier2dRigidBodyComponent } from './components/rapier-2d-rigid-body.component';
|
|
3
|
+
import { Rapier2dTriggerComponent } from './components/rapier-2d-trigger.component';
|
|
4
|
+
export declare type Rapier2dPhysicsTypeDocRepo = {
|
|
5
|
+
factory: Rapier2dFactory;
|
|
6
|
+
rigidBody: Rapier2dRigidBodyComponent;
|
|
7
|
+
trigger: Rapier2dTriggerComponent;
|
|
8
|
+
};
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gg-web-engine/rapier2d",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.30",
|
|
4
4
|
"description": "An attempt to create open source game engine for browser",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -28,14 +28,14 @@
|
|
|
28
28
|
"homepage": "https://github.com/AndyGura/gg-web-engine#readme",
|
|
29
29
|
"devDependencies": {
|
|
30
30
|
"@dimforge/rapier2d-compat": "0.0.0-c23a138-20231001",
|
|
31
|
-
"@gg-web-engine/core": "0.0.
|
|
31
|
+
"@gg-web-engine/core": "0.0.30",
|
|
32
32
|
"prettier": "^2.8.6",
|
|
33
33
|
"rxjs": "7.8.0",
|
|
34
34
|
"typescript": "~4.7.2"
|
|
35
35
|
},
|
|
36
36
|
"peerDependencies": {
|
|
37
37
|
"@dimforge/rapier2d-compat": "0.0.0-c23a138-20231001",
|
|
38
|
-
"@gg-web-engine/core": "0.0.
|
|
38
|
+
"@gg-web-engine/core": "0.0.30",
|
|
39
39
|
"rxjs": "7.8.0"
|
|
40
40
|
}
|
|
41
41
|
}
|