bard-legends-framework 0.0.5 → 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/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/physics/entitity-types/immovable-physics-entity.d.ts +15 -0
- package/dist/physics/entitity-types/immovable-physics-entity.js +28 -0
- package/dist/physics/entitity-types/immovable-physics-entity.js.map +1 -0
- package/dist/physics/entitity-types/movable-entity.d.ts +10 -0
- package/dist/physics/entitity-types/movable-entity.js +19 -0
- package/dist/physics/entitity-types/movable-entity.js.map +1 -0
- package/dist/physics/entitity-types/movable-physics-entity.d.ts +22 -0
- package/dist/physics/entitity-types/movable-physics-entity.js +88 -0
- package/dist/physics/entitity-types/movable-physics-entity.js.map +1 -0
- package/dist/physics/entitity-types/physics-entity.d.ts +18 -0
- package/dist/physics/entitity-types/physics-entity.js +54 -0
- package/dist/physics/entitity-types/physics-entity.js.map +1 -0
- package/dist/physics/helpers/closest-available-space.helper.d.ts +19 -0
- package/dist/physics/helpers/closest-available-space.helper.js +103 -0
- package/dist/physics/helpers/closest-available-space.helper.js.map +1 -0
- package/dist/physics/helpers/closest-available-space.helper.spec.js.map +1 -0
- package/dist/physics/helpers/p2js.helper.d.ts +8 -0
- package/dist/physics/helpers/p2js.helper.js +27 -0
- package/dist/physics/helpers/p2js.helper.js.map +1 -0
- package/dist/physics/helpers/shape-factory.d.ts +8 -0
- package/dist/physics/helpers/shape-factory.js +76 -0
- package/dist/physics/helpers/shape-factory.js.map +1 -0
- package/dist/physics/index.d.ts +9 -0
- package/dist/physics/index.js +10 -0
- package/dist/physics/index.js.map +1 -0
- package/dist/physics/interfaces.d.ts +75 -0
- package/dist/physics/interfaces.js +8 -0
- package/dist/physics/interfaces.js.map +1 -0
- package/dist/physics/physics-world.d.ts +34 -0
- package/dist/physics/physics-world.js +96 -0
- package/dist/physics/physics-world.js.map +1 -0
- package/dist/physics/sub-elements/physics-body-groups.d.ts +10 -0
- package/dist/physics/sub-elements/physics-body-groups.js +43 -0
- package/dist/physics/sub-elements/physics-body-groups.js.map +1 -0
- package/dist/physics/sub-elements/physics-collision.d.ts +22 -0
- package/dist/physics/sub-elements/physics-collision.js +130 -0
- package/dist/physics/sub-elements/physics-collision.js.map +1 -0
- package/dist/physics/sub-elements/physics-materials.d.ts +14 -0
- package/dist/physics/sub-elements/physics-materials.js +100 -0
- package/dist/physics/sub-elements/physics-materials.js.map +1 -0
- package/package.json +6 -3
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,8CAA8C,CAAC;AACvF,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,8CAA8C,CAAC;AACvF,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Action } from 'actions-lib';
|
|
2
|
+
import { Vec2 } from 'helpers-lib';
|
|
3
|
+
import { PhysicsWorld } from '../physics-world';
|
|
4
|
+
import { PhysicsBodyDTO, PhysicsEntityDefinition, CollisionReport } from '../interfaces';
|
|
5
|
+
import { PhysicsEntity } from './physics-entity';
|
|
6
|
+
export declare abstract class ImmovablePhysicsEntity extends PhysicsEntity {
|
|
7
|
+
readonly position: Vec2;
|
|
8
|
+
readonly rotation: number;
|
|
9
|
+
readonly onCollision: Action<CollisionReport>;
|
|
10
|
+
protected readonly type = "static";
|
|
11
|
+
constructor(physicsWorld: PhysicsWorld, physicsEntityDefinition: PhysicsEntityDefinition);
|
|
12
|
+
destroy(): void;
|
|
13
|
+
convertToDTO(): PhysicsBodyDTO;
|
|
14
|
+
private localToPhsicsSync;
|
|
15
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { Action } from 'actions-lib';
|
|
2
|
+
import { PhysicsEntity } from './physics-entity';
|
|
3
|
+
export class ImmovablePhysicsEntity extends PhysicsEntity {
|
|
4
|
+
constructor(physicsWorld, physicsEntityDefinition) {
|
|
5
|
+
super(physicsWorld, physicsEntityDefinition);
|
|
6
|
+
this.onCollision = new Action();
|
|
7
|
+
this.type = 'static';
|
|
8
|
+
this.position = physicsEntityDefinition.position;
|
|
9
|
+
this.rotation = physicsEntityDefinition.rotation;
|
|
10
|
+
this.localToPhsicsSync();
|
|
11
|
+
}
|
|
12
|
+
destroy() { }
|
|
13
|
+
convertToDTO() {
|
|
14
|
+
return {
|
|
15
|
+
entityId: this.id,
|
|
16
|
+
entityClassName: this.constructor.name,
|
|
17
|
+
position: this.position,
|
|
18
|
+
rotation: this.rotation,
|
|
19
|
+
velocity: { x: 0, y: 0 },
|
|
20
|
+
angularVelocity: 0
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
localToPhsicsSync() {
|
|
24
|
+
this.body.position = [this.position.x, this.position.y];
|
|
25
|
+
this.body.angle = this.rotation;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=immovable-physics-entity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"immovable-physics-entity.js","sourceRoot":"","sources":["../../../src/physics/entitity-types/immovable-physics-entity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAKrC,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,MAAM,OAAgB,sBAAuB,SAAQ,aAAa;IAQhE,YAAY,YAA0B,EAAE,uBAAgD;QACtF,KAAK,CAAC,YAAY,EAAE,uBAAuB,CAAC,CAAC;QALtC,gBAAW,GAAG,IAAI,MAAM,EAAmB,CAAC;QAElC,SAAI,GAAG,QAAQ,CAAC;QAKjC,IAAI,CAAC,QAAQ,GAAG,uBAAuB,CAAC,QAAQ,CAAC;QACjD,IAAI,CAAC,QAAQ,GAAG,uBAAuB,CAAC,QAAQ,CAAC;QACjD,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC3B,CAAC;IAED,OAAO,KAAU,CAAC;IAElB,YAAY;QACV,OAAO;YACL,QAAQ,EAAE,IAAI,CAAC,EAAE;YACjB,eAAe,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI;YACtC,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;YACxB,eAAe,EAAE,CAAC;SACnB,CAAC;IACJ,CAAC;IAEO,iBAAiB;QACvB,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACxD,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC;IAClC,CAAC;CACF"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Variable } from 'actions-lib';
|
|
2
|
+
import { Vec2 } from 'helpers-lib';
|
|
3
|
+
import { Entity } from '../../game-entities';
|
|
4
|
+
export declare abstract class MovableEntity extends Entity {
|
|
5
|
+
readonly position: Variable<Vec2>;
|
|
6
|
+
readonly rotation: Variable<number>;
|
|
7
|
+
readonly velocity: Variable<Vec2>;
|
|
8
|
+
readonly angularVelocity: Variable<number>;
|
|
9
|
+
update(time: number, delta: number): void;
|
|
10
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Variable } from 'actions-lib';
|
|
2
|
+
import { Entity } from '../../game-entities';
|
|
3
|
+
export class MovableEntity extends Entity {
|
|
4
|
+
constructor() {
|
|
5
|
+
super(...arguments);
|
|
6
|
+
this.position = new Variable().set({ x: 0, y: 0 });
|
|
7
|
+
this.rotation = new Variable().set(0);
|
|
8
|
+
this.velocity = new Variable().set({ x: 0, y: 0 });
|
|
9
|
+
this.angularVelocity = new Variable().set(0);
|
|
10
|
+
}
|
|
11
|
+
update(time, delta) {
|
|
12
|
+
this.position.value = {
|
|
13
|
+
x: this.position.value.x + this.velocity.value.x * delta,
|
|
14
|
+
y: this.position.value.y + this.velocity.value.y * delta
|
|
15
|
+
};
|
|
16
|
+
this.rotation.value = this.rotation.value + this.angularVelocity.value * delta;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=movable-entity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"movable-entity.js","sourceRoot":"","sources":["../../../src/physics/entitity-types/movable-entity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAGvC,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAE7C,MAAM,OAAgB,aAAc,SAAQ,MAAM;IAAlD;;QACW,aAAQ,GAAG,IAAI,QAAQ,EAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACpD,aAAQ,GAAG,IAAI,QAAQ,EAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACzC,aAAQ,GAAG,IAAI,QAAQ,EAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACpD,oBAAe,GAAG,IAAI,QAAQ,EAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAS3D,CAAC;IAPC,MAAM,CAAC,IAAY,EAAE,KAAa;QAChC,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG;YACpB,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK;YACxD,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK;SACzD,CAAC;QACF,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,GAAG,KAAK,CAAC;IACjF,CAAC;CACF"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Action, Variable } from 'actions-lib';
|
|
2
|
+
import { Vec2 } from 'helpers-lib';
|
|
3
|
+
import { PhysicsWorld } from '../physics-world';
|
|
4
|
+
import { PhysicsBodyDTO, PhysicsEntityDefinition, CollisionReport } from '../interfaces';
|
|
5
|
+
import { PhysicsEntity } from './physics-entity';
|
|
6
|
+
export declare abstract class MovablePhysicsEntity extends PhysicsEntity {
|
|
7
|
+
readonly position: Variable<Vec2>;
|
|
8
|
+
readonly rotation: Variable<number>;
|
|
9
|
+
readonly velocity: Variable<Vec2>;
|
|
10
|
+
readonly angularVelocity: Variable<number>;
|
|
11
|
+
readonly onCollision: Action<CollisionReport>;
|
|
12
|
+
protected readonly type = "dynamic";
|
|
13
|
+
private ignorePositionUpdate;
|
|
14
|
+
private ignoreRotationUpdate;
|
|
15
|
+
private ignoreVelocityUpdate;
|
|
16
|
+
private ignoreAngularVelocityUpdate;
|
|
17
|
+
constructor(physicsWorld: PhysicsWorld, physicsEntityDefinition: PhysicsEntityDefinition);
|
|
18
|
+
convertToDTO(): PhysicsBodyDTO;
|
|
19
|
+
private step;
|
|
20
|
+
private phsicsToLocalSync;
|
|
21
|
+
private localToPhsicsSync;
|
|
22
|
+
}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { Action, Variable } from 'actions-lib';
|
|
2
|
+
import { P2JSHelper } from '../helpers/p2js.helper';
|
|
3
|
+
import { PhysicsEntity } from './physics-entity';
|
|
4
|
+
export class MovablePhysicsEntity extends PhysicsEntity {
|
|
5
|
+
constructor(physicsWorld, physicsEntityDefinition) {
|
|
6
|
+
super(physicsWorld, physicsEntityDefinition);
|
|
7
|
+
this.position = new Variable().set({ x: 0, y: 0 });
|
|
8
|
+
this.rotation = new Variable().set(0);
|
|
9
|
+
this.velocity = new Variable().set({ x: 0, y: 0 });
|
|
10
|
+
this.angularVelocity = new Variable().set(0);
|
|
11
|
+
this.onCollision = new Action();
|
|
12
|
+
this.type = 'dynamic';
|
|
13
|
+
this.ignorePositionUpdate = false;
|
|
14
|
+
this.ignoreRotationUpdate = false;
|
|
15
|
+
this.ignoreVelocityUpdate = false;
|
|
16
|
+
this.ignoreAngularVelocityUpdate = false;
|
|
17
|
+
this.phsicsToLocalSync();
|
|
18
|
+
this.localToPhsicsSync();
|
|
19
|
+
this.physicsWorld.onPhysicsStep.subscribe(({ time, delta }) => this.step(time, delta)).attach(this);
|
|
20
|
+
}
|
|
21
|
+
convertToDTO() {
|
|
22
|
+
return {
|
|
23
|
+
entityId: this.id,
|
|
24
|
+
entityClassName: this.constructor.name,
|
|
25
|
+
position: this.position.value,
|
|
26
|
+
rotation: this.rotation.value,
|
|
27
|
+
velocity: this.velocity.value,
|
|
28
|
+
angularVelocity: this.angularVelocity.value
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
step(time, delta) {
|
|
32
|
+
this.ignorePositionUpdate = true;
|
|
33
|
+
this.ignoreRotationUpdate = true;
|
|
34
|
+
this.ignoreVelocityUpdate = true;
|
|
35
|
+
this.ignoreAngularVelocityUpdate = true;
|
|
36
|
+
this.phsicsToLocalSync();
|
|
37
|
+
}
|
|
38
|
+
phsicsToLocalSync() {
|
|
39
|
+
this.position.value = P2JSHelper.arrayToVec2(this.body.position);
|
|
40
|
+
this.rotation.value = this.body.angle;
|
|
41
|
+
this.velocity.value = P2JSHelper.arrayToVec2(this.body.velocity);
|
|
42
|
+
this.angularVelocity.value = this.body.angularVelocity;
|
|
43
|
+
}
|
|
44
|
+
localToPhsicsSync() {
|
|
45
|
+
this.position
|
|
46
|
+
.subscribe(position => {
|
|
47
|
+
if (this.ignorePositionUpdate) {
|
|
48
|
+
this.ignorePositionUpdate = false;
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
this.body.position = [position.x, position.y];
|
|
52
|
+
}
|
|
53
|
+
})
|
|
54
|
+
.attach(this);
|
|
55
|
+
this.rotation
|
|
56
|
+
.subscribe(rotation => {
|
|
57
|
+
if (this.ignoreRotationUpdate) {
|
|
58
|
+
this.ignoreRotationUpdate = false;
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
this.body.angle = rotation;
|
|
62
|
+
}
|
|
63
|
+
})
|
|
64
|
+
.attach(this);
|
|
65
|
+
this.velocity
|
|
66
|
+
.subscribe(velocity => {
|
|
67
|
+
if (this.ignoreVelocityUpdate) {
|
|
68
|
+
this.ignoreVelocityUpdate = false;
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
this.body.velocity = [velocity.x, velocity.y];
|
|
72
|
+
}
|
|
73
|
+
})
|
|
74
|
+
.attach(this);
|
|
75
|
+
this.angularVelocity
|
|
76
|
+
.subscribe(angularVelocity => {
|
|
77
|
+
if (this.ignoreAngularVelocityUpdate) {
|
|
78
|
+
this.ignoreAngularVelocityUpdate = false;
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
let torque = (angularVelocity - this.body.angularVelocity) / this.body.invInertia;
|
|
82
|
+
this.body.angularForce = torque;
|
|
83
|
+
}
|
|
84
|
+
})
|
|
85
|
+
.attach(this);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=movable-physics-entity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"movable-physics-entity.js","sourceRoot":"","sources":["../../../src/physics/entitity-types/movable-physics-entity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAI/C,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,MAAM,OAAgB,oBAAqB,SAAQ,aAAa;IAe9D,YAAY,YAA0B,EAAE,uBAAgD;QACtF,KAAK,CAAC,YAAY,EAAE,uBAAuB,CAAC,CAAC;QAftC,aAAQ,GAAG,IAAI,QAAQ,EAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACpD,aAAQ,GAAG,IAAI,QAAQ,EAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACzC,aAAQ,GAAG,IAAI,QAAQ,EAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACpD,oBAAe,GAAG,IAAI,QAAQ,EAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAEhD,gBAAW,GAAG,IAAI,MAAM,EAAmB,CAAC;QAElC,SAAI,GAAG,SAAS,CAAC;QAE5B,yBAAoB,GAAG,KAAK,CAAC;QAC7B,yBAAoB,GAAG,KAAK,CAAC;QAC7B,yBAAoB,GAAG,KAAK,CAAC;QAC7B,gCAA2B,GAAG,KAAK,CAAC;QAK1C,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACtG,CAAC;IAED,YAAY;QACV,OAAO;YACL,QAAQ,EAAE,IAAI,CAAC,EAAE;YACjB,eAAe,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI;YACtC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK;YAC7B,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK;YAC7B,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK;YAC7B,eAAe,EAAE,IAAI,CAAC,eAAe,CAAC,KAAK;SAC5C,CAAC;IACJ,CAAC;IAEO,IAAI,CAAC,IAAY,EAAE,KAAa;QACtC,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;QACjC,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;QACjC,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;QACjC,IAAI,CAAC,2BAA2B,GAAG,IAAI,CAAC;QAExC,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC3B,CAAC;IAEO,iBAAiB;QACvB,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACjE,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;QACtC,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACjE,IAAI,CAAC,eAAe,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC;IACzD,CAAC;IAEO,iBAAiB;QACvB,IAAI,CAAC,QAAQ;aACV,SAAS,CAAC,QAAQ,CAAC,EAAE;YACpB,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;gBAC9B,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC;YACpC,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;YAChD,CAAC;QACH,CAAC,CAAC;aACD,MAAM,CAAC,IAAI,CAAC,CAAC;QAEhB,IAAI,CAAC,QAAQ;aACV,SAAS,CAAC,QAAQ,CAAC,EAAE;YACpB,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;gBAC9B,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC;YACpC,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC;YAC7B,CAAC;QACH,CAAC,CAAC;aACD,MAAM,CAAC,IAAI,CAAC,CAAC;QAEhB,IAAI,CAAC,QAAQ;aACV,SAAS,CAAC,QAAQ,CAAC,EAAE;YACpB,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;gBAC9B,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC;YACpC,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;YAChD,CAAC;QACH,CAAC,CAAC;aACD,MAAM,CAAC,IAAI,CAAC,CAAC;QAEhB,IAAI,CAAC,eAAe;aACjB,SAAS,CAAC,eAAe,CAAC,EAAE;YAC3B,IAAI,IAAI,CAAC,2BAA2B,EAAE,CAAC;gBACrC,IAAI,CAAC,2BAA2B,GAAG,KAAK,CAAC;YAC3C,CAAC;iBAAM,CAAC;gBACN,IAAI,MAAM,GAAG,CAAC,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;gBAClF,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC;YAClC,CAAC;QACH,CAAC,CAAC;aACD,MAAM,CAAC,IAAI,CAAC,CAAC;IAClB,CAAC;CACF"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Action } from 'actions-lib';
|
|
2
|
+
import p2 from 'p2';
|
|
3
|
+
import { PhysicsWorld } from '../physics-world';
|
|
4
|
+
import { PhysicsBodyDTO, PhysicsEntityDefinition, CollisionReport } from '../interfaces';
|
|
5
|
+
import { Entity } from '../../game-entities';
|
|
6
|
+
export declare abstract class PhysicsEntity extends Entity {
|
|
7
|
+
private static p2BodyIdToPhysicsBody;
|
|
8
|
+
static getFromP2BodyId(p2BodyId: number): PhysicsEntity | undefined;
|
|
9
|
+
static getFromP2BodyIdOrFail(p2BodyId: number): PhysicsEntity;
|
|
10
|
+
readonly onCollision: Action<CollisionReport>;
|
|
11
|
+
protected readonly physicsWorld: PhysicsWorld;
|
|
12
|
+
protected readonly body: p2.Body;
|
|
13
|
+
protected readonly type: 'dynamic' | 'static';
|
|
14
|
+
protected physicsDestroy: () => void;
|
|
15
|
+
constructor(physicsWorld: PhysicsWorld, physicsEntityDefinition: PhysicsEntityDefinition);
|
|
16
|
+
destroy(): void;
|
|
17
|
+
abstract convertToDTO(): PhysicsBodyDTO;
|
|
18
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { Action } from 'actions-lib';
|
|
2
|
+
import { P2JSHelper } from '../helpers/p2js.helper';
|
|
3
|
+
import { ShapeFactory } from '../helpers/shape-factory';
|
|
4
|
+
import { Entity } from '../../game-entities';
|
|
5
|
+
import { UpdateCycle } from '../../lib/update-loop';
|
|
6
|
+
export class PhysicsEntity extends Entity {
|
|
7
|
+
static { this.p2BodyIdToPhysicsBody = new Map(); }
|
|
8
|
+
static getFromP2BodyId(p2BodyId) {
|
|
9
|
+
return PhysicsEntity.p2BodyIdToPhysicsBody.get(p2BodyId);
|
|
10
|
+
}
|
|
11
|
+
static getFromP2BodyIdOrFail(p2BodyId) {
|
|
12
|
+
let physicsBody = PhysicsEntity.p2BodyIdToPhysicsBody.get(p2BodyId);
|
|
13
|
+
if (!physicsBody) {
|
|
14
|
+
throw new Error(`PhysicsEntity with p2BodyId ${p2BodyId} not found`);
|
|
15
|
+
}
|
|
16
|
+
return physicsBody;
|
|
17
|
+
}
|
|
18
|
+
constructor(physicsWorld, physicsEntityDefinition) {
|
|
19
|
+
super();
|
|
20
|
+
this.onCollision = new Action();
|
|
21
|
+
this.type = 'dynamic';
|
|
22
|
+
this.physicsDestroy = () => {
|
|
23
|
+
this.physicsWorld.removeBody(this.body);
|
|
24
|
+
PhysicsEntity.p2BodyIdToPhysicsBody.delete(this.body.id);
|
|
25
|
+
};
|
|
26
|
+
this.physicsWorld = physicsWorld;
|
|
27
|
+
let material = physicsWorld.physicsMaterials.getMaterial(physicsEntityDefinition.shapeDefinition.materialName);
|
|
28
|
+
let materialDefinition = physicsWorld.physicsMaterials.getMaterialDefinition(physicsEntityDefinition.shapeDefinition.materialName);
|
|
29
|
+
this.body = ShapeFactory.createBody(physicsEntityDefinition, material, materialDefinition, this.type);
|
|
30
|
+
this.body.position = P2JSHelper.vec2ToArray(physicsEntityDefinition.position);
|
|
31
|
+
this.body.angle = physicsEntityDefinition.rotation;
|
|
32
|
+
if (physicsEntityDefinition.addInEmptySpace) {
|
|
33
|
+
let addedToTheWorld = physicsWorld.addBodyInEmptySpace(this.body, details => this.onCollision.trigger(details));
|
|
34
|
+
if (!addedToTheWorld) {
|
|
35
|
+
throw new Error('PhysicsEntity was not able to be added to the world!');
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
physicsWorld.addBody(this.body, details => this.onCollision.trigger(details));
|
|
40
|
+
}
|
|
41
|
+
PhysicsEntity.p2BodyIdToPhysicsBody.set(this.body.id, this);
|
|
42
|
+
this.destroy = function () {
|
|
43
|
+
UpdateCycle.waitUntilDestroyPhase(() => {
|
|
44
|
+
this.destroyed = true;
|
|
45
|
+
this.attachableDestroy();
|
|
46
|
+
this.entityDestroy();
|
|
47
|
+
this.physicsDestroy();
|
|
48
|
+
this.childDestroy();
|
|
49
|
+
});
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
destroy() { }
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=physics-entity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"physics-entity.js","sourceRoot":"","sources":["../../../src/physics/entitity-types/physics-entity.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Rectangle, Vec2 } from 'helpers-lib';
|
|
2
|
+
export declare class ClosestAvailableSpaceHelper {
|
|
3
|
+
private grid;
|
|
4
|
+
private worldWidth;
|
|
5
|
+
private worldHeight;
|
|
6
|
+
private cellSize;
|
|
7
|
+
constructor(worldWidth: number, worldHeight: number, cellSize: number);
|
|
8
|
+
markObjectOnGrid(object: Rectangle): void;
|
|
9
|
+
/**
|
|
10
|
+
* @param newObject The object to find a closest available position for
|
|
11
|
+
* @returns the needed position change vector to the closest available position,
|
|
12
|
+
* zero vector if the location is available by itself,
|
|
13
|
+
* or undefined if no available space found
|
|
14
|
+
*/
|
|
15
|
+
findClosestAvailableSpace(newObject: Rectangle): Vec2 | undefined;
|
|
16
|
+
private canPlaceObject;
|
|
17
|
+
private isWithinBounds;
|
|
18
|
+
private fitInsideWorld;
|
|
19
|
+
}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { P2JSHelper } from './p2js.helper';
|
|
2
|
+
export class ClosestAvailableSpaceHelper {
|
|
3
|
+
constructor(worldWidth, worldHeight, cellSize) {
|
|
4
|
+
this.worldWidth = worldWidth;
|
|
5
|
+
this.worldHeight = worldHeight;
|
|
6
|
+
this.cellSize = cellSize;
|
|
7
|
+
this.grid = Array(Math.floor(worldHeight / cellSize))
|
|
8
|
+
.fill(undefined)
|
|
9
|
+
.map(() => Array(Math.floor(worldWidth / cellSize)).fill(false));
|
|
10
|
+
}
|
|
11
|
+
markObjectOnGrid(object) {
|
|
12
|
+
object = this.fitInsideWorld(object);
|
|
13
|
+
let startX = Math.floor(object.topLeft.x / this.cellSize);
|
|
14
|
+
let startY = Math.floor(object.topLeft.y / this.cellSize);
|
|
15
|
+
let endX = Math.ceil(object.bottomRight.x / this.cellSize);
|
|
16
|
+
let endY = Math.ceil(object.bottomRight.y / this.cellSize);
|
|
17
|
+
for (let y = startY; y < endY && y < this.grid.length; y++) {
|
|
18
|
+
for (let x = startX; x < endX && x < this.grid[y].length; x++) {
|
|
19
|
+
this.grid[y][x] = true;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* @param newObject The object to find a closest available position for
|
|
25
|
+
* @returns the needed position change vector to the closest available position,
|
|
26
|
+
* zero vector if the location is available by itself,
|
|
27
|
+
* or undefined if no available space found
|
|
28
|
+
*/
|
|
29
|
+
findClosestAvailableSpace(newObject) {
|
|
30
|
+
let newObjectWidth = newObject.bottomRight.x - newObject.topLeft.x;
|
|
31
|
+
let newObjectHeight = newObject.bottomRight.y - newObject.topLeft.y;
|
|
32
|
+
let visited = new Set();
|
|
33
|
+
let targetWidthCells = Math.ceil(newObjectWidth / this.cellSize);
|
|
34
|
+
let targetHeightCells = Math.ceil(newObjectHeight / this.cellSize);
|
|
35
|
+
let newObjectInsideWorld = this.fitInsideWorld(newObject);
|
|
36
|
+
let firstQueueItem = {
|
|
37
|
+
x: Math.floor(newObjectInsideWorld.topLeft.x / this.cellSize),
|
|
38
|
+
y: Math.floor(newObjectInsideWorld.topLeft.y / this.cellSize)
|
|
39
|
+
};
|
|
40
|
+
let queue = [firstQueueItem];
|
|
41
|
+
if (P2JSHelper.isEqualBoundingBox(newObject, newObjectInsideWorld)) {
|
|
42
|
+
let startingColumn = Math.floor(newObjectInsideWorld.topLeft.x / this.cellSize);
|
|
43
|
+
let endingColumn = Math.floor(newObjectInsideWorld.bottomRight.x / this.cellSize);
|
|
44
|
+
let startingRow = Math.floor(newObjectInsideWorld.topLeft.y / this.cellSize);
|
|
45
|
+
let endingRow = Math.floor(newObjectInsideWorld.bottomRight.y / this.cellSize);
|
|
46
|
+
if (this.canPlaceObject(firstQueueItem, endingColumn - startingColumn + 1, endingRow - startingRow + 1)) {
|
|
47
|
+
return { x: 0, y: 0 };
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
while (queue.length > 0) {
|
|
51
|
+
let shiftedPoint = queue.shift();
|
|
52
|
+
if (shiftedPoint) {
|
|
53
|
+
let currentPoint = shiftedPoint;
|
|
54
|
+
let key = `${currentPoint.x},${currentPoint.y}`;
|
|
55
|
+
if (visited.has(key)) {
|
|
56
|
+
continue;
|
|
57
|
+
}
|
|
58
|
+
visited.add(key);
|
|
59
|
+
if (this.canPlaceObject(currentPoint, targetWidthCells, targetHeightCells)) {
|
|
60
|
+
return {
|
|
61
|
+
x: currentPoint.x * this.cellSize + (targetWidthCells * this.cellSize - newObjectWidth) / 2 - newObject.topLeft.x,
|
|
62
|
+
y: currentPoint.y * this.cellSize + (targetHeightCells * this.cellSize - newObjectHeight) / 2 - newObject.topLeft.y
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
// Add neighboring cells to the queue
|
|
66
|
+
[
|
|
67
|
+
[1, 0],
|
|
68
|
+
[0, 1],
|
|
69
|
+
[-1, 0],
|
|
70
|
+
[0, -1]
|
|
71
|
+
].forEach(([dx, dy]) => {
|
|
72
|
+
let nextPoint = { x: currentPoint.x + dx, y: currentPoint.y + dy };
|
|
73
|
+
if (this.isWithinBounds(nextPoint) && !visited.has(`${nextPoint.x},${nextPoint.y}`)) {
|
|
74
|
+
queue.push(nextPoint);
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return undefined; // No available space found
|
|
80
|
+
}
|
|
81
|
+
canPlaceObject(point, widthCells, heightCells) {
|
|
82
|
+
for (let y = point.y; y < point.y + heightCells; y++) {
|
|
83
|
+
for (let x = point.x; x < point.x + widthCells; x++) {
|
|
84
|
+
if (!this.isWithinBounds({ x, y }) || this.grid[y][x]) {
|
|
85
|
+
return false;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return true;
|
|
90
|
+
}
|
|
91
|
+
isWithinBounds(point) {
|
|
92
|
+
return point.x >= 0 && point.y >= 0 && point.x < this.grid[0]?.length && point.y < this.grid.length;
|
|
93
|
+
}
|
|
94
|
+
fitInsideWorld(object) {
|
|
95
|
+
let topLeft = { x: Math.max(0, object.topLeft.x), y: Math.max(0, object.topLeft.y) };
|
|
96
|
+
let bottomRight = {
|
|
97
|
+
x: Math.min(this.worldWidth, object.bottomRight.x),
|
|
98
|
+
y: Math.min(this.worldHeight, object.bottomRight.y)
|
|
99
|
+
};
|
|
100
|
+
return { topLeft, bottomRight };
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=closest-available-space.helper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"closest-available-space.helper.js","sourceRoot":"","sources":["../../../src/physics/helpers/closest-available-space.helper.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"closest-available-space.helper.spec.js","sourceRoot":"","sources":["../../../src/physics/helpers/closest-available-space.helper.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/// <reference types="p2" />
|
|
2
|
+
import { Rectangle, Vec2 } from 'helpers-lib';
|
|
3
|
+
export declare class P2JSHelper {
|
|
4
|
+
static aabbToBoundingBox(aabb: p2.AABB): Rectangle;
|
|
5
|
+
static isEqualBoundingBox(a: Rectangle, b: Rectangle): boolean;
|
|
6
|
+
static arrayToVec2(array: [number, number]): Vec2;
|
|
7
|
+
static vec2ToArray(vec2: Vec2): [number, number];
|
|
8
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export class P2JSHelper {
|
|
2
|
+
static aabbToBoundingBox(aabb) {
|
|
3
|
+
return {
|
|
4
|
+
topLeft: {
|
|
5
|
+
x: aabb.lowerBound[0],
|
|
6
|
+
y: aabb.lowerBound[1]
|
|
7
|
+
},
|
|
8
|
+
bottomRight: {
|
|
9
|
+
x: aabb.upperBound[0],
|
|
10
|
+
y: aabb.upperBound[1]
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
static isEqualBoundingBox(a, b) {
|
|
15
|
+
return (a.topLeft.x === b.topLeft.x &&
|
|
16
|
+
a.topLeft.y === b.topLeft.y &&
|
|
17
|
+
a.bottomRight.x === b.bottomRight.x &&
|
|
18
|
+
a.bottomRight.y === b.bottomRight.y);
|
|
19
|
+
}
|
|
20
|
+
static arrayToVec2(array) {
|
|
21
|
+
return { x: array[0], y: array[1] };
|
|
22
|
+
}
|
|
23
|
+
static vec2ToArray(vec2) {
|
|
24
|
+
return [vec2.x, vec2.y];
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=p2js.helper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"p2js.helper.js","sourceRoot":"","sources":["../../../src/physics/helpers/p2js.helper.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,UAAU;IACrB,MAAM,CAAC,iBAAiB,CAAC,IAAa;QACpC,OAAO;YACL,OAAO,EAAE;gBACP,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;gBACrB,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;aACtB;YACD,WAAW,EAAE;gBACX,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;gBACrB,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;aACtB;SACF,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,kBAAkB,CAAC,CAAY,EAAE,CAAY;QAClD,OAAO,CACL,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC;YAC3B,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC;YAC3B,CAAC,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,CAAC;YACnC,CAAC,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,CAAC,CACpC,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,KAAuB;QACxC,OAAO,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IACtC,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,IAAU;QAC3B,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IAC1B,CAAC;CACF"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import p2 from 'p2';
|
|
2
|
+
import { MaterialDefinition, PhysicsEntityDefinition } from '../interfaces';
|
|
3
|
+
export declare class ShapeFactory {
|
|
4
|
+
static createBody(physicsEntityDefinition: PhysicsEntityDefinition, material: p2.Material, materialDefinition: MaterialDefinition, type: 'dynamic' | 'static'): p2.Body;
|
|
5
|
+
private static createPointBody;
|
|
6
|
+
private static createPolygonBody;
|
|
7
|
+
private static createRectangleBody;
|
|
8
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import p2 from 'p2';
|
|
2
|
+
import { PhysicsShapeType } from '../interfaces';
|
|
3
|
+
import { PhysicsBodyGroups } from '../sub-elements/physics-body-groups';
|
|
4
|
+
const POINT_MASS = 100;
|
|
5
|
+
export class ShapeFactory {
|
|
6
|
+
static createBody(physicsEntityDefinition, material, materialDefinition, type) {
|
|
7
|
+
switch (physicsEntityDefinition.shapeDefinition.shapeType) {
|
|
8
|
+
case PhysicsShapeType.point:
|
|
9
|
+
return this.createPointBody(material, materialDefinition, physicsEntityDefinition.shapeDefinition.group, type);
|
|
10
|
+
case PhysicsShapeType.polygon:
|
|
11
|
+
return this.createPolygonBody(physicsEntityDefinition.shapeDefinition.shapeData, material, materialDefinition, physicsEntityDefinition.shapeDefinition.group, type);
|
|
12
|
+
case PhysicsShapeType.rectangle:
|
|
13
|
+
return this.createRectangleBody(physicsEntityDefinition.shapeDefinition.shapeData, material, materialDefinition, physicsEntityDefinition.shapeDefinition.group, type);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
static createPointBody(material, materialDefinition, group, type) {
|
|
17
|
+
let shape = new p2.Circle({
|
|
18
|
+
collisionGroup: PhysicsBodyGroups.getGroupConstant(group),
|
|
19
|
+
collisionMask: PhysicsBodyGroups.getMaskConstant(group)
|
|
20
|
+
});
|
|
21
|
+
shape.material = material;
|
|
22
|
+
let p2Body = new p2.Body({
|
|
23
|
+
type: type === 'dynamic' ? p2.Body.DYNAMIC : p2.Body.STATIC,
|
|
24
|
+
mass: POINT_MASS,
|
|
25
|
+
damping: materialDefinition.velocityDrag,
|
|
26
|
+
angularDamping: materialDefinition.angularDrag
|
|
27
|
+
});
|
|
28
|
+
p2Body.addShape(shape);
|
|
29
|
+
return p2Body;
|
|
30
|
+
}
|
|
31
|
+
static createPolygonBody(polygonShapeData, material, materialDefinition, group, type) {
|
|
32
|
+
let shapes = polygonShapeData.boundingShapeVertices
|
|
33
|
+
.map(vertices => new p2.Convex({
|
|
34
|
+
vertices: vertices.map(vertex => [
|
|
35
|
+
(vertex.x - polygonShapeData.size.x * polygonShapeData.anchor.x) * polygonShapeData.scale,
|
|
36
|
+
(vertex.y - polygonShapeData.size.y * polygonShapeData.anchor.y) * polygonShapeData.scale
|
|
37
|
+
]),
|
|
38
|
+
collisionGroup: PhysicsBodyGroups.getGroupConstant(group),
|
|
39
|
+
collisionMask: PhysicsBodyGroups.getMaskConstant(group)
|
|
40
|
+
}))
|
|
41
|
+
.map(shape => {
|
|
42
|
+
shape.material = material;
|
|
43
|
+
return shape;
|
|
44
|
+
});
|
|
45
|
+
let area = shapes.reduce((acc, shape) => acc + shape.area, 0);
|
|
46
|
+
let p2Body = new p2.Body({
|
|
47
|
+
type: type === 'dynamic' ? p2.Body.DYNAMIC : p2.Body.STATIC,
|
|
48
|
+
mass: area,
|
|
49
|
+
damping: materialDefinition.velocityDrag,
|
|
50
|
+
angularDamping: materialDefinition.angularDrag
|
|
51
|
+
});
|
|
52
|
+
shapes.forEach(shape => p2Body.addShape(shape));
|
|
53
|
+
p2Body.setDensity(materialDefinition.density);
|
|
54
|
+
return p2Body;
|
|
55
|
+
}
|
|
56
|
+
static createRectangleBody(rectangleShapeData, material, materialDefinition, group, type) {
|
|
57
|
+
let shape = new p2.Box({
|
|
58
|
+
width: rectangleShapeData.size.x,
|
|
59
|
+
height: rectangleShapeData.size.y,
|
|
60
|
+
collisionGroup: PhysicsBodyGroups.getGroupConstant(group),
|
|
61
|
+
collisionMask: PhysicsBodyGroups.getMaskConstant(group)
|
|
62
|
+
});
|
|
63
|
+
shape.material = material;
|
|
64
|
+
let area = rectangleShapeData.size.x * rectangleShapeData.size.y;
|
|
65
|
+
let p2Body = new p2.Body({
|
|
66
|
+
type: type === 'dynamic' ? p2.Body.DYNAMIC : p2.Body.STATIC,
|
|
67
|
+
mass: area,
|
|
68
|
+
damping: materialDefinition.velocityDrag,
|
|
69
|
+
angularDamping: materialDefinition.angularDrag
|
|
70
|
+
});
|
|
71
|
+
p2Body.addShape(shape);
|
|
72
|
+
p2Body.setDensity(materialDefinition.density);
|
|
73
|
+
return p2Body;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=shape-factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shape-factory.js","sourceRoot":"","sources":["../../../src/physics/helpers/shape-factory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { PhysicsWorld } from './physics-world';
|
|
2
|
+
export { MovableEntity } from './entitity-types/movable-entity';
|
|
3
|
+
export { MovablePhysicsEntity } from './entitity-types/movable-physics-entity';
|
|
4
|
+
export { ImmovablePhysicsEntity } from './entitity-types/immovable-physics-entity';
|
|
5
|
+
export { PhysicsEntity } from './entitity-types/physics-entity';
|
|
6
|
+
export { PhysicsBodyGroup } from './sub-elements/physics-body-groups';
|
|
7
|
+
export { PhysicsCollision } from './sub-elements/physics-collision';
|
|
8
|
+
export { PhysicsMaterials } from './sub-elements/physics-materials';
|
|
9
|
+
export * from './interfaces';
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export { PhysicsWorld } from './physics-world';
|
|
2
|
+
export { MovableEntity } from './entitity-types/movable-entity';
|
|
3
|
+
export { MovablePhysicsEntity } from './entitity-types/movable-physics-entity';
|
|
4
|
+
export { ImmovablePhysicsEntity } from './entitity-types/immovable-physics-entity';
|
|
5
|
+
export { PhysicsEntity } from './entitity-types/physics-entity';
|
|
6
|
+
export { PhysicsBodyGroup } from './sub-elements/physics-body-groups';
|
|
7
|
+
export { PhysicsCollision } from './sub-elements/physics-collision';
|
|
8
|
+
export { PhysicsMaterials } from './sub-elements/physics-materials';
|
|
9
|
+
export * from './interfaces';
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/physics/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,yCAAyC,CAAC;AAC/E,OAAO,EAAE,sBAAsB,EAAE,MAAM,2CAA2C,CAAC;AACnF,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,cAAc,cAAc,CAAC"}
|