bard-legends-framework 0.0.4 → 0.1.0
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/_interfaces/index.js +1 -2
- package/dist/game-entities/attachable/attachable.d.ts +0 -8
- package/dist/game-entities/attachable/attachable.js +16 -26
- package/dist/game-entities/attachable/attachable.js.map +1 -1
- package/dist/game-entities/attachable/attachable.spec.js.map +1 -1
- package/dist/game-entities/attachable/helpers/decorate-actions-lib.d.ts +17 -0
- package/dist/game-entities/attachable/helpers/decorate-actions-lib.js +73 -0
- package/dist/game-entities/attachable/helpers/decorate-actions-lib.js.map +1 -0
- package/dist/game-entities/controller/controller.js +5 -10
- package/dist/game-entities/controller/controller.js.map +1 -1
- package/dist/game-entities/controller/controller.spec.js.map +1 -1
- package/dist/game-entities/entity/entity.js +19 -24
- package/dist/game-entities/entity/entity.js.map +1 -1
- package/dist/game-entities/entity/entity.spec.js.map +1 -1
- package/dist/game-entities/entity/helpers/entity-store.helper.js +8 -10
- package/dist/game-entities/entity/helpers/entity-store.helper.js.map +1 -1
- package/dist/game-entities/entity/helpers/view-creation.helper.js +10 -12
- package/dist/game-entities/entity/helpers/view-creation.helper.js.map +1 -1
- package/dist/game-entities/index.d.ts +1 -1
- package/dist/game-entities/index.js +6 -20
- package/dist/game-entities/index.js.map +1 -1
- package/dist/game-entities/scene/scene.js +16 -17
- package/dist/game-entities/scene/scene.js.map +1 -1
- package/dist/game-entities/scene/scene.spec.js.map +1 -1
- package/dist/game-entities/service/service.js +8 -11
- package/dist/game-entities/service/service.js.map +1 -1
- package/dist/game-entities/service/service.spec.js.map +1 -1
- package/dist/game-entities/view/view.js +15 -18
- package/dist/game-entities/view/view.js.map +1 -1
- package/dist/game-entities/view/view.spec.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +9 -30
- package/dist/index.js.map +1 -1
- package/dist/lib/animator/animations.js +12 -20
- package/dist/lib/animator/animations.js.map +1 -1
- package/dist/lib/animator/animator.js +17 -19
- package/dist/lib/animator/animator.js.map +1 -1
- package/dist/lib/animator/animator.spec.js.map +1 -1
- package/dist/lib/animator/index.js +2 -18
- package/dist/lib/animator/index.js.map +1 -1
- package/dist/lib/path-finder/path-finder.js +3 -7
- package/dist/lib/path-finder/path-finder.js.map +1 -1
- package/dist/lib/update-loop.js +17 -13
- package/dist/lib/update-loop.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/dist/services/keyboard/keyboard.js +6 -9
- package/dist/services/keyboard/keyboard.js.map +1 -1
- package/dist/services/mouse/mouse.service.js +13 -14
- package/dist/services/mouse/mouse.service.js.map +1 -1
- package/dist/services/mouse/mouser-target-focus.service.js +14 -15
- package/dist/services/mouse/mouser-target-focus.service.js.map +1 -1
- package/package.json +6 -4
- package/tsconfig.json +1 -1
- package/coverage/clover.xml +0 -539
- package/coverage/coverage-final.json +0 -12
- package/coverage/lcov-report/base.css +0 -224
- package/coverage/lcov-report/block-navigation.js +0 -87
- package/coverage/lcov-report/favicon.png +0 -0
- package/coverage/lcov-report/game-entities/controller.ts.html +0 -235
- package/coverage/lcov-report/game-entities/entity-base.ts.html +0 -202
- package/coverage/lcov-report/game-entities/entity.ts.html +0 -526
- package/coverage/lcov-report/game-entities/index.html +0 -191
- package/coverage/lcov-report/game-entities/service.ts.html +0 -379
- package/coverage/lcov-report/game-entities/store.ts.html +0 -391
- package/coverage/lcov-report/game-entities/view.ts.html +0 -154
- package/coverage/lcov-report/helpers/animator/animator.ts.html +0 -658
- package/coverage/lcov-report/helpers/animator/index.html +0 -116
- package/coverage/lcov-report/helpers/auto-destroy/auto-destroy.ts.html +0 -184
- package/coverage/lcov-report/helpers/auto-destroy/index.html +0 -116
- package/coverage/lcov-report/helpers/index.html +0 -116
- package/coverage/lcov-report/helpers/update-loop.ts.html +0 -127
- package/coverage/lcov-report/helpers/view-array/index.html +0 -116
- package/coverage/lcov-report/helpers/view-array/view-array.ts.html +0 -388
- package/coverage/lcov-report/index.html +0 -191
- package/coverage/lcov-report/lib/vector/index.html +0 -116
- package/coverage/lcov-report/lib/vector/vector.ts.html +0 -484
- package/coverage/lcov-report/prettify.css +0 -1
- package/coverage/lcov-report/prettify.js +0 -2
- package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/coverage/lcov-report/sorter.js +0 -196
- package/coverage/lcov.info +0 -1056
- package/dist/app.d.ts +0 -21
- package/dist/app.js +0 -54
- package/dist/app.js.map +0 -1
- package/dist/game-assets/container/container.d.ts +0 -26
- package/dist/game-assets/container/container.js +0 -94
- package/dist/game-assets/container/container.js.map +0 -1
- package/dist/game-assets/display-object/container.d.ts +0 -59
- package/dist/game-assets/display-object/container.js +0 -219
- package/dist/game-assets/display-object/container.js.map +0 -1
- package/dist/game-assets/display-object/container.spec.js.map +0 -1
- package/dist/game-assets/display-object/display-object.d.ts +0 -56
- package/dist/game-assets/display-object/display-object.js +0 -214
- package/dist/game-assets/display-object/display-object.js.map +0 -1
- package/dist/game-assets/display-object/display-object.spec.js.map +0 -1
- package/dist/game-assets/display-object/interfaces.d.ts +0 -23
- package/dist/game-assets/display-object/interfaces.js +0 -3
- package/dist/game-assets/display-object/interfaces.js.map +0 -1
- package/dist/game-assets/display-object/objects/container.d.ts +0 -9
- package/dist/game-assets/display-object/objects/container.js +0 -41
- package/dist/game-assets/display-object/objects/container.js.map +0 -1
- package/dist/game-assets/display-object/objects/graphics.d.ts +0 -23
- package/dist/game-assets/display-object/objects/graphics.js +0 -117
- package/dist/game-assets/display-object/objects/graphics.js.map +0 -1
- package/dist/game-assets/display-object/objects/image.d.ts +0 -29
- package/dist/game-assets/display-object/objects/image.js +0 -130
- package/dist/game-assets/display-object/objects/image.js.map +0 -1
- package/dist/game-assets/display-object/objects/sprite.d.ts +0 -34
- package/dist/game-assets/display-object/objects/sprite.js +0 -87
- package/dist/game-assets/display-object/objects/sprite.js.map +0 -1
- package/dist/game-assets/display-object/premade-display-objects/image-with-glowing-shapes.d.ts +0 -19
- package/dist/game-assets/display-object/premade-display-objects/image-with-glowing-shapes.js +0 -94
- package/dist/game-assets/display-object/premade-display-objects/image-with-glowing-shapes.js.map +0 -1
- package/dist/game-assets/filters/filters.d.ts +0 -38
- package/dist/game-assets/filters/filters.js +0 -162
- package/dist/game-assets/filters/filters.js.map +0 -1
- package/dist/game-assets/filters/glow-filter.d.ts +0 -11
- package/dist/game-assets/filters/glow-filter.js +0 -33
- package/dist/game-assets/filters/glow-filter.js.map +0 -1
- package/dist/game-assets/filters/shaders.d.ts +0 -8
- package/dist/game-assets/filters/shaders.js +0 -82
- package/dist/game-assets/filters/shaders.js.map +0 -1
- package/dist/game-assets/game-assets.d.ts +0 -14
- package/dist/game-assets/game-assets.js +0 -92
- package/dist/game-assets/game-assets.js.map +0 -1
- package/dist/game-assets/graphics/graphics.d.ts +0 -26
- package/dist/game-assets/graphics/graphics.js +0 -104
- package/dist/game-assets/graphics/graphics.js.map +0 -1
- package/dist/game-assets/helpers/glow.helper.d.ts +0 -1
- package/dist/game-assets/helpers/glow.helper.js +0 -77
- package/dist/game-assets/helpers/glow.helper.js.map +0 -1
- package/dist/game-assets/image/image-creator.d.ts +0 -23
- package/dist/game-assets/image/image-creator.js +0 -96
- package/dist/game-assets/image/image-creator.js.map +0 -1
- package/dist/game-assets/image/image.d.ts +0 -34
- package/dist/game-assets/image/image.js +0 -139
- package/dist/game-assets/image/image.js.map +0 -1
- package/dist/game-assets/image-data.helper.d.ts +0 -16
- package/dist/game-assets/image-data.helper.js +0 -53
- package/dist/game-assets/image-data.helper.js.map +0 -1
- package/dist/game-assets/index.d.ts +0 -8
- package/dist/game-assets/index.js +0 -34
- package/dist/game-assets/index.js.map +0 -1
- package/dist/game-assets/pixel-perfect-interaction.d.ts +0 -2
- package/dist/game-assets/pixel-perfect-interaction.js +0 -111
- package/dist/game-assets/pixel-perfect-interaction.js.map +0 -1
- package/dist/game-entities/controller.d.ts +0 -10
- package/dist/game-entities/controller.js +0 -53
- package/dist/game-entities/controller.js.map +0 -1
- package/dist/game-entities/entity-base/entity-base.d.ts +0 -10
- package/dist/game-entities/entity-base/entity-base.js +0 -38
- package/dist/game-entities/entity-base/entity-base.js.map +0 -1
- package/dist/game-entities/entity-base/entity-base.spec.js.map +0 -1
- package/dist/game-entities/entity-base.d.ts +0 -12
- package/dist/game-entities/entity-base.js +0 -55
- package/dist/game-entities/entity-base.js.map +0 -1
- package/dist/game-entities/entity.d.ts +0 -22
- package/dist/game-entities/entity.js +0 -126
- package/dist/game-entities/entity.js.map +0 -1
- package/dist/game-entities/service.d.ts +0 -10
- package/dist/game-entities/service.js +0 -93
- package/dist/game-entities/service.js.map +0 -1
- package/dist/game-entities/store/store.d.ts +0 -19
- package/dist/game-entities/store/store.js +0 -131
- package/dist/game-entities/store/store.js.map +0 -1
- package/dist/game-entities/store/store.spec.js.map +0 -1
- package/dist/game-entities/store.d.ts +0 -18
- package/dist/game-entities/store.js +0 -121
- package/dist/game-entities/store.js.map +0 -1
- package/dist/game-entities/tests/controller.spec.js.map +0 -1
- package/dist/game-entities/tests/entity-base.spec.js.map +0 -1
- package/dist/game-entities/tests/entity.spec.js.map +0 -1
- package/dist/game-entities/tests/service.spec.js.map +0 -1
- package/dist/game-entities/tests/store.spec.js.map +0 -1
- package/dist/game-entities/tests/view.spec.js.map +0 -1
- package/dist/game-entities/view.d.ts +0 -9
- package/dist/game-entities/view.js +0 -20
- package/dist/game-entities/view.js.map +0 -1
- package/dist/helpers/animator/animator.d.ts +0 -35
- package/dist/helpers/animator/animator.js +0 -158
- package/dist/helpers/animator/animator.js.map +0 -1
- package/dist/helpers/animator/animator.spec.js.map +0 -1
- package/dist/helpers/auto-destroy/auto-destroy.d.ts +0 -5
- package/dist/helpers/auto-destroy/auto-destroy.js +0 -38
- package/dist/helpers/auto-destroy/auto-destroy.js.map +0 -1
- package/dist/helpers/auto-destroy/auto-destroy.spec.js.map +0 -1
- package/dist/helpers/update-loop.d.ts +0 -7
- package/dist/helpers/update-loop.js +0 -16
- package/dist/helpers/update-loop.js.map +0 -1
- package/dist/helpers/vertice/vertice.helper.d.ts +0 -4
- package/dist/helpers/vertice/vertice.helper.js +0 -23
- package/dist/helpers/vertice/vertice.helper.js.map +0 -1
- package/dist/helpers/view-array/view-array.d.ts +0 -28
- package/dist/helpers/view-array/view-array.js +0 -117
- package/dist/lib/common/common-lib.d.ts +0 -6
- package/dist/lib/common/common-lib.js +0 -40
- package/dist/lib/common/common-lib.js.map +0 -1
- package/dist/lib/vector/vector-coordinate-convertion.spec.js.map +0 -1
- package/dist/lib/vector/vector-radian.spec.js.map +0 -1
- package/dist/lib/vector/vector.d.ts +0 -28
- package/dist/lib/vector/vector.js +0 -114
- package/dist/lib/vector/vector.js.map +0 -1
- package/dist/lib/vector/vector.spec.js.map +0 -1
- package/dist/services/mouse/mouse.d.ts +0 -12
- package/dist/services/mouse/mouse.js +0 -57
- package/dist/services/mouse/mouse.js.map +0 -1
- package/dist/services/sound/sound.d.ts +0 -3
- package/dist/services/sound/sound.js +0 -22
- package/dist/services/sound/sound.js.map +0 -1
|
@@ -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"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { Vec2 } from 'helpers-lib';
|
|
2
|
+
import p2 from 'p2';
|
|
3
|
+
import { PhysicsBodyGroup } from './sub-elements/physics-body-groups';
|
|
4
|
+
export declare const BorderMaterialName = "border";
|
|
5
|
+
export interface MaterialContactDefinition {
|
|
6
|
+
readonly materialA: string;
|
|
7
|
+
readonly materialB: string;
|
|
8
|
+
readonly friction: number;
|
|
9
|
+
readonly bounciness: number;
|
|
10
|
+
readonly stiffness: number;
|
|
11
|
+
}
|
|
12
|
+
export interface MaterialDefinition {
|
|
13
|
+
readonly name: string;
|
|
14
|
+
readonly density: number;
|
|
15
|
+
readonly velocityDrag: number;
|
|
16
|
+
readonly angularDrag: number;
|
|
17
|
+
}
|
|
18
|
+
export interface PhysicsShape {
|
|
19
|
+
area: number;
|
|
20
|
+
setBody(body: p2.Body): void;
|
|
21
|
+
}
|
|
22
|
+
export interface ImageProperties {
|
|
23
|
+
readonly size: Vec2;
|
|
24
|
+
readonly anchor: Vec2;
|
|
25
|
+
readonly scale: number;
|
|
26
|
+
}
|
|
27
|
+
export interface BorderProperties {
|
|
28
|
+
readonly friction: number;
|
|
29
|
+
readonly bounciness: number;
|
|
30
|
+
readonly stiffness: number;
|
|
31
|
+
}
|
|
32
|
+
export interface PhysicsBodyDTO {
|
|
33
|
+
entityId: string;
|
|
34
|
+
entityClassName: string;
|
|
35
|
+
position: Vec2;
|
|
36
|
+
rotation: number;
|
|
37
|
+
velocity: Vec2;
|
|
38
|
+
angularVelocity: number;
|
|
39
|
+
}
|
|
40
|
+
export interface CollisionDetails {
|
|
41
|
+
body: PhysicsBodyDTO;
|
|
42
|
+
getPositionReletiveToObject: () => Vec2;
|
|
43
|
+
position: Vec2;
|
|
44
|
+
getSeverity: () => number;
|
|
45
|
+
}
|
|
46
|
+
export interface CollisionReport {
|
|
47
|
+
self: CollisionDetails;
|
|
48
|
+
target: CollisionDetails;
|
|
49
|
+
}
|
|
50
|
+
export declare enum PhysicsShapeType {
|
|
51
|
+
point = "point",
|
|
52
|
+
polygon = "polygon",
|
|
53
|
+
rectangle = "rectangle"
|
|
54
|
+
}
|
|
55
|
+
export interface RectangleShapeData {
|
|
56
|
+
size: Vec2;
|
|
57
|
+
}
|
|
58
|
+
export interface PolygonShapeData {
|
|
59
|
+
boundingShapeVertices: Vec2[][] | ReadonlyArray<ReadonlyArray<Vec2>>;
|
|
60
|
+
size: Vec2;
|
|
61
|
+
anchor: Vec2;
|
|
62
|
+
scale: number;
|
|
63
|
+
}
|
|
64
|
+
export interface ShapeDefinition {
|
|
65
|
+
materialName: string;
|
|
66
|
+
group: PhysicsBodyGroup;
|
|
67
|
+
shapeType: PhysicsShapeType;
|
|
68
|
+
shapeData: PolygonShapeData | RectangleShapeData | undefined;
|
|
69
|
+
}
|
|
70
|
+
export interface PhysicsEntityDefinition {
|
|
71
|
+
shapeDefinition: ShapeDefinition;
|
|
72
|
+
position: Vec2;
|
|
73
|
+
rotation: number;
|
|
74
|
+
addInEmptySpace: boolean;
|
|
75
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export const BorderMaterialName = 'border';
|
|
2
|
+
export var PhysicsShapeType;
|
|
3
|
+
(function (PhysicsShapeType) {
|
|
4
|
+
PhysicsShapeType["point"] = "point";
|
|
5
|
+
PhysicsShapeType["polygon"] = "polygon";
|
|
6
|
+
PhysicsShapeType["rectangle"] = "rectangle";
|
|
7
|
+
})(PhysicsShapeType || (PhysicsShapeType = {}));
|
|
8
|
+
//# sourceMappingURL=interfaces.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../../src/physics/interfaces.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,MAAM,kBAAkB,GAAG,QAAQ,CAAC;AAuD3C,MAAM,CAAN,IAAY,gBAIX;AAJD,WAAY,gBAAgB;IAC1B,mCAAe,CAAA;IACf,uCAAmB,CAAA;IACnB,2CAAuB,CAAA;AACzB,CAAC,EAJW,gBAAgB,KAAhB,gBAAgB,QAI3B"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { Vec2 } from 'helpers-lib';
|
|
2
|
+
import { Action } from 'actions-lib';
|
|
3
|
+
import p2 from 'p2';
|
|
4
|
+
import { PhysicsMaterials } from './sub-elements/physics-materials';
|
|
5
|
+
import { OnCollisionCallbackFunciton } from './sub-elements/physics-collision';
|
|
6
|
+
import { MaterialContactDefinition, MaterialDefinition, PhysicsEntityDefinition } from './interfaces';
|
|
7
|
+
import { ImmovablePhysicsEntity } from './entitity-types/immovable-physics-entity';
|
|
8
|
+
import { Entity } from '../game-entities';
|
|
9
|
+
export declare class PhysicsWorld extends Entity {
|
|
10
|
+
readonly mapSize: Vec2;
|
|
11
|
+
readonly physicsMaterials: PhysicsMaterials;
|
|
12
|
+
readonly onPhysicsStep: Action<{
|
|
13
|
+
time: number;
|
|
14
|
+
delta: number;
|
|
15
|
+
}>;
|
|
16
|
+
private p2World;
|
|
17
|
+
private physicsCollision;
|
|
18
|
+
constructor(mapSize: Vec2, borderProperties: {
|
|
19
|
+
friction: number;
|
|
20
|
+
bounciness: number;
|
|
21
|
+
stiffness: number;
|
|
22
|
+
}, materialDefinitions: ReadonlyArray<MaterialDefinition>, materialContactDefinitions: ReadonlyArray<MaterialContactDefinition>);
|
|
23
|
+
step(time: number, delta: number): void;
|
|
24
|
+
destroy(): void;
|
|
25
|
+
addBody(body: p2.Body, onCollisionCallback: OnCollisionCallbackFunciton): void;
|
|
26
|
+
addBodyInEmptySpace(body: p2.Body, onCollisionCallback: OnCollisionCallbackFunciton): boolean;
|
|
27
|
+
removeBody(body: p2.Body): void;
|
|
28
|
+
isCollidingWithAnything(p2Body: p2.Body): boolean;
|
|
29
|
+
private createBorders;
|
|
30
|
+
private createBorder;
|
|
31
|
+
}
|
|
32
|
+
export declare class BorderEntity extends ImmovablePhysicsEntity {
|
|
33
|
+
constructor(physicsWorld: PhysicsWorld, physicsEntityDefinition: PhysicsEntityDefinition);
|
|
34
|
+
}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
import { Action } from 'actions-lib';
|
|
11
|
+
import p2 from 'p2';
|
|
12
|
+
import { PhysicsMaterials } from './sub-elements/physics-materials';
|
|
13
|
+
import { PhysicsCollision } from './sub-elements/physics-collision';
|
|
14
|
+
import { PhysicsBodyGroup } from './sub-elements/physics-body-groups';
|
|
15
|
+
import { BorderMaterialName, PhysicsShapeType } from './interfaces';
|
|
16
|
+
import { ImmovablePhysicsEntity } from './entitity-types/immovable-physics-entity';
|
|
17
|
+
import { Entity, EntityDecorator } from '../game-entities';
|
|
18
|
+
let PhysicsWorld = class PhysicsWorld extends Entity {
|
|
19
|
+
constructor(mapSize, borderProperties, materialDefinitions, materialContactDefinitions) {
|
|
20
|
+
super();
|
|
21
|
+
this.onPhysicsStep = new Action();
|
|
22
|
+
this.mapSize = mapSize;
|
|
23
|
+
this.p2World = new p2.World({ gravity: [0, 0] });
|
|
24
|
+
this.physicsMaterials = new PhysicsMaterials(this.p2World, borderProperties, materialDefinitions, materialContactDefinitions);
|
|
25
|
+
this.physicsCollision = new PhysicsCollision(this.p2World, mapSize);
|
|
26
|
+
this.createBorders();
|
|
27
|
+
}
|
|
28
|
+
step(time, delta) {
|
|
29
|
+
this.physicsCollision.update(time, delta);
|
|
30
|
+
this.p2World.step(1, delta, 10);
|
|
31
|
+
this.onPhysicsStep.trigger({ time, delta });
|
|
32
|
+
}
|
|
33
|
+
destroy() {
|
|
34
|
+
this.p2World.clear();
|
|
35
|
+
}
|
|
36
|
+
addBody(body, onCollisionCallback) {
|
|
37
|
+
this.p2World.addBody(body);
|
|
38
|
+
this.physicsCollision.onBodyAdded(body, onCollisionCallback, false);
|
|
39
|
+
}
|
|
40
|
+
addBodyInEmptySpace(body, onCollisionCallback) {
|
|
41
|
+
let changeVector = this.physicsCollision.findClosestAvailableSpace(body);
|
|
42
|
+
if (changeVector) {
|
|
43
|
+
body.position[0] += changeVector.x;
|
|
44
|
+
body.position[1] += changeVector.y;
|
|
45
|
+
this.p2World.addBody(body);
|
|
46
|
+
this.physicsCollision.onBodyAdded(body, onCollisionCallback, true);
|
|
47
|
+
return true;
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
removeBody(body) {
|
|
54
|
+
this.p2World.removeBody(body);
|
|
55
|
+
this.physicsCollision.onBodyRemoved(body);
|
|
56
|
+
}
|
|
57
|
+
isCollidingWithAnything(p2Body) {
|
|
58
|
+
return this.physicsCollision.isCollidingWithAnything(p2Body);
|
|
59
|
+
}
|
|
60
|
+
createBorders() {
|
|
61
|
+
this.createBorder({ x: this.mapSize.x / 2, y: -50 }, { x: this.mapSize.x + 200, y: 100 }); // Top border
|
|
62
|
+
this.createBorder({ x: this.mapSize.x / 2, y: this.mapSize.y + 50 }, { x: this.mapSize.x + 200, y: 100 }); // Bottom border
|
|
63
|
+
this.createBorder({ x: -50, y: this.mapSize.y / 2 }, { x: 100, y: this.mapSize.y + 200 }); // Left border
|
|
64
|
+
this.createBorder({ x: this.mapSize.x + 50, y: this.mapSize.y / 2 }, { x: 100, y: this.mapSize.y + 200 }); // Right border
|
|
65
|
+
}
|
|
66
|
+
createBorder(position, size) {
|
|
67
|
+
return new BorderEntity(this, {
|
|
68
|
+
shapeDefinition: {
|
|
69
|
+
materialName: BorderMaterialName,
|
|
70
|
+
group: PhysicsBodyGroup.border,
|
|
71
|
+
shapeType: PhysicsShapeType.rectangle,
|
|
72
|
+
shapeData: { size }
|
|
73
|
+
},
|
|
74
|
+
position,
|
|
75
|
+
rotation: 0,
|
|
76
|
+
addInEmptySpace: false
|
|
77
|
+
}).attach(this);
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
PhysicsWorld = __decorate([
|
|
81
|
+
EntityDecorator() // TODO: Remove this decorator
|
|
82
|
+
,
|
|
83
|
+
__metadata("design:paramtypes", [Object, Object, Array, Array])
|
|
84
|
+
], PhysicsWorld);
|
|
85
|
+
export { PhysicsWorld };
|
|
86
|
+
let BorderEntity = class BorderEntity extends ImmovablePhysicsEntity {
|
|
87
|
+
constructor(physicsWorld, physicsEntityDefinition) {
|
|
88
|
+
super(physicsWorld, physicsEntityDefinition);
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
BorderEntity = __decorate([
|
|
92
|
+
EntityDecorator(),
|
|
93
|
+
__metadata("design:paramtypes", [PhysicsWorld, Object])
|
|
94
|
+
], BorderEntity);
|
|
95
|
+
export { BorderEntity };
|
|
96
|
+
//# sourceMappingURL=physics-world.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"physics-world.js","sourceRoot":"","sources":["../../src/physics/physics-world.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export declare enum PhysicsBodyGroup {
|
|
2
|
+
border = 0,
|
|
3
|
+
friend = 1,
|
|
4
|
+
enemy = 2,
|
|
5
|
+
neutral = 3
|
|
6
|
+
}
|
|
7
|
+
export declare class PhysicsBodyGroups {
|
|
8
|
+
static getGroupConstant(group: PhysicsBodyGroup): number;
|
|
9
|
+
static getMaskConstant(group: PhysicsBodyGroup): number;
|
|
10
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/* eslint-disable no-bitwise */
|
|
2
|
+
const BORDER_GROUP = Math.pow(2, 0); // 0b0001;
|
|
3
|
+
const FRIEND_GROUP = Math.pow(2, 1); // 0b0010;
|
|
4
|
+
const ENEMY_GROUP = Math.pow(2, 2); // 0b0100;
|
|
5
|
+
const NEUTRAL_GROUP = Math.pow(2, 3); // 0b1000;
|
|
6
|
+
const BORDER_MASK = FRIEND_GROUP | ENEMY_GROUP | NEUTRAL_GROUP; // Borders only collide with bodies
|
|
7
|
+
const FRIEND_MASK = ENEMY_GROUP | NEUTRAL_GROUP | BORDER_GROUP;
|
|
8
|
+
const ENEMY_MASK = FRIEND_GROUP | NEUTRAL_GROUP | BORDER_GROUP;
|
|
9
|
+
const NEUTRAL_MASK = FRIEND_GROUP | ENEMY_GROUP | NEUTRAL_GROUP | BORDER_GROUP;
|
|
10
|
+
export var PhysicsBodyGroup;
|
|
11
|
+
(function (PhysicsBodyGroup) {
|
|
12
|
+
PhysicsBodyGroup[PhysicsBodyGroup["border"] = 0] = "border";
|
|
13
|
+
PhysicsBodyGroup[PhysicsBodyGroup["friend"] = 1] = "friend";
|
|
14
|
+
PhysicsBodyGroup[PhysicsBodyGroup["enemy"] = 2] = "enemy";
|
|
15
|
+
PhysicsBodyGroup[PhysicsBodyGroup["neutral"] = 3] = "neutral";
|
|
16
|
+
})(PhysicsBodyGroup || (PhysicsBodyGroup = {}));
|
|
17
|
+
export class PhysicsBodyGroups {
|
|
18
|
+
static getGroupConstant(group) {
|
|
19
|
+
switch (group) {
|
|
20
|
+
case PhysicsBodyGroup.border:
|
|
21
|
+
return BORDER_GROUP;
|
|
22
|
+
case PhysicsBodyGroup.friend:
|
|
23
|
+
return FRIEND_GROUP;
|
|
24
|
+
case PhysicsBodyGroup.enemy:
|
|
25
|
+
return ENEMY_GROUP;
|
|
26
|
+
case PhysicsBodyGroup.neutral:
|
|
27
|
+
return NEUTRAL_GROUP;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
static getMaskConstant(group) {
|
|
31
|
+
switch (group) {
|
|
32
|
+
case PhysicsBodyGroup.border:
|
|
33
|
+
return BORDER_MASK;
|
|
34
|
+
case PhysicsBodyGroup.friend:
|
|
35
|
+
return FRIEND_MASK;
|
|
36
|
+
case PhysicsBodyGroup.enemy:
|
|
37
|
+
return ENEMY_MASK;
|
|
38
|
+
case PhysicsBodyGroup.neutral:
|
|
39
|
+
return NEUTRAL_MASK;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=physics-body-groups.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"physics-body-groups.js","sourceRoot":"","sources":["../../../src/physics/sub-elements/physics-body-groups.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU;AAC/C,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU;AAC/C,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU;AAC9C,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU;AAEhD,MAAM,WAAW,GAAG,YAAY,GAAG,WAAW,GAAG,aAAa,CAAC,CAAC,mCAAmC;AACnG,MAAM,WAAW,GAAG,WAAW,GAAG,aAAa,GAAG,YAAY,CAAC;AAC/D,MAAM,UAAU,GAAG,YAAY,GAAG,aAAa,GAAG,YAAY,CAAC;AAC/D,MAAM,YAAY,GAAG,YAAY,GAAG,WAAW,GAAG,aAAa,GAAG,YAAY,CAAC;AAE/E,MAAM,CAAN,IAAY,gBAKX;AALD,WAAY,gBAAgB;IAC1B,2DAAU,CAAA;IACV,2DAAU,CAAA;IACV,yDAAS,CAAA;IACT,6DAAW,CAAA;AACb,CAAC,EALW,gBAAgB,KAAhB,gBAAgB,QAK3B;AAED,MAAM,OAAO,iBAAiB;IAC5B,MAAM,CAAC,gBAAgB,CAAC,KAAuB;QAC7C,QAAQ,KAAK,EAAE,CAAC;YACd,KAAK,gBAAgB,CAAC,MAAM;gBAC1B,OAAO,YAAY,CAAC;YACtB,KAAK,gBAAgB,CAAC,MAAM;gBAC1B,OAAO,YAAY,CAAC;YACtB,KAAK,gBAAgB,CAAC,KAAK;gBACzB,OAAO,WAAW,CAAC;YACrB,KAAK,gBAAgB,CAAC,OAAO;gBAC3B,OAAO,aAAa,CAAC;QACzB,CAAC;IACH,CAAC;IAED,MAAM,CAAC,eAAe,CAAC,KAAuB;QAC5C,QAAQ,KAAK,EAAE,CAAC;YACd,KAAK,gBAAgB,CAAC,MAAM;gBAC1B,OAAO,WAAW,CAAC;YACrB,KAAK,gBAAgB,CAAC,MAAM;gBAC1B,OAAO,WAAW,CAAC;YACrB,KAAK,gBAAgB,CAAC,KAAK;gBACzB,OAAO,UAAU,CAAC;YACpB,KAAK,gBAAgB,CAAC,OAAO;gBAC3B,OAAO,YAAY,CAAC;QACxB,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/// <reference types="p2" />
|
|
2
|
+
import { Vec2 } from 'helpers-lib';
|
|
3
|
+
import { CollisionReport } from '../interfaces';
|
|
4
|
+
export type OnCollisionCallbackFunciton = (collision: CollisionReport) => void;
|
|
5
|
+
export declare class PhysicsCollision {
|
|
6
|
+
private p2BodyIdtoOnCollisionCallback;
|
|
7
|
+
private p2World;
|
|
8
|
+
private closestAvailableSpaceHelper?;
|
|
9
|
+
private mapSize;
|
|
10
|
+
constructor(p2World: p2.World, mapsize: Vec2);
|
|
11
|
+
update(time: number, delta: number): void;
|
|
12
|
+
isCollidingWithAnything(p2Body: p2.Body): boolean;
|
|
13
|
+
findClosestAvailableSpace(body: p2.Body): Vec2 | undefined;
|
|
14
|
+
onBodyAdded(body: p2.Body, onCollisionCallback: OnCollisionCallbackFunciton, markOnGrid: boolean): void;
|
|
15
|
+
onBodyRemoved(body: p2.Body): void;
|
|
16
|
+
private createClosestAvailableSpaceHelper;
|
|
17
|
+
private handleSpeedLimit;
|
|
18
|
+
private handleCollision;
|
|
19
|
+
private calculateImpactSeverity;
|
|
20
|
+
private getContactPointsOfCollision;
|
|
21
|
+
private getContactPointOfCollision;
|
|
22
|
+
}
|