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.
Files changed (248) hide show
  1. package/dist/_interfaces/index.js +1 -2
  2. package/dist/game-entities/attachable/attachable.d.ts +0 -8
  3. package/dist/game-entities/attachable/attachable.js +16 -26
  4. package/dist/game-entities/attachable/attachable.js.map +1 -1
  5. package/dist/game-entities/attachable/attachable.spec.js.map +1 -1
  6. package/dist/game-entities/attachable/helpers/decorate-actions-lib.d.ts +17 -0
  7. package/dist/game-entities/attachable/helpers/decorate-actions-lib.js +73 -0
  8. package/dist/game-entities/attachable/helpers/decorate-actions-lib.js.map +1 -0
  9. package/dist/game-entities/controller/controller.js +5 -10
  10. package/dist/game-entities/controller/controller.js.map +1 -1
  11. package/dist/game-entities/controller/controller.spec.js.map +1 -1
  12. package/dist/game-entities/entity/entity.js +19 -24
  13. package/dist/game-entities/entity/entity.js.map +1 -1
  14. package/dist/game-entities/entity/entity.spec.js.map +1 -1
  15. package/dist/game-entities/entity/helpers/entity-store.helper.js +8 -10
  16. package/dist/game-entities/entity/helpers/entity-store.helper.js.map +1 -1
  17. package/dist/game-entities/entity/helpers/view-creation.helper.js +10 -12
  18. package/dist/game-entities/entity/helpers/view-creation.helper.js.map +1 -1
  19. package/dist/game-entities/index.d.ts +1 -1
  20. package/dist/game-entities/index.js +6 -20
  21. package/dist/game-entities/index.js.map +1 -1
  22. package/dist/game-entities/scene/scene.js +16 -17
  23. package/dist/game-entities/scene/scene.js.map +1 -1
  24. package/dist/game-entities/scene/scene.spec.js.map +1 -1
  25. package/dist/game-entities/service/service.js +8 -11
  26. package/dist/game-entities/service/service.js.map +1 -1
  27. package/dist/game-entities/service/service.spec.js.map +1 -1
  28. package/dist/game-entities/view/view.js +15 -18
  29. package/dist/game-entities/view/view.js.map +1 -1
  30. package/dist/game-entities/view/view.spec.js.map +1 -1
  31. package/dist/index.d.ts +1 -1
  32. package/dist/index.js +9 -30
  33. package/dist/index.js.map +1 -1
  34. package/dist/lib/animator/animations.js +12 -20
  35. package/dist/lib/animator/animations.js.map +1 -1
  36. package/dist/lib/animator/animator.js +17 -19
  37. package/dist/lib/animator/animator.js.map +1 -1
  38. package/dist/lib/animator/animator.spec.js.map +1 -1
  39. package/dist/lib/animator/index.js +2 -18
  40. package/dist/lib/animator/index.js.map +1 -1
  41. package/dist/lib/path-finder/path-finder.js +3 -7
  42. package/dist/lib/path-finder/path-finder.js.map +1 -1
  43. package/dist/lib/update-loop.js +17 -13
  44. package/dist/lib/update-loop.js.map +1 -1
  45. package/dist/physics/entitity-types/immovable-physics-entity.d.ts +15 -0
  46. package/dist/physics/entitity-types/immovable-physics-entity.js +28 -0
  47. package/dist/physics/entitity-types/immovable-physics-entity.js.map +1 -0
  48. package/dist/physics/entitity-types/movable-entity.d.ts +10 -0
  49. package/dist/physics/entitity-types/movable-entity.js +19 -0
  50. package/dist/physics/entitity-types/movable-entity.js.map +1 -0
  51. package/dist/physics/entitity-types/movable-physics-entity.d.ts +22 -0
  52. package/dist/physics/entitity-types/movable-physics-entity.js +88 -0
  53. package/dist/physics/entitity-types/movable-physics-entity.js.map +1 -0
  54. package/dist/physics/entitity-types/physics-entity.d.ts +18 -0
  55. package/dist/physics/entitity-types/physics-entity.js +54 -0
  56. package/dist/physics/entitity-types/physics-entity.js.map +1 -0
  57. package/dist/physics/helpers/closest-available-space.helper.d.ts +19 -0
  58. package/dist/physics/helpers/closest-available-space.helper.js +103 -0
  59. package/dist/physics/helpers/closest-available-space.helper.js.map +1 -0
  60. package/dist/physics/helpers/closest-available-space.helper.spec.js.map +1 -0
  61. package/dist/physics/helpers/p2js.helper.d.ts +8 -0
  62. package/dist/physics/helpers/p2js.helper.js +27 -0
  63. package/dist/physics/helpers/p2js.helper.js.map +1 -0
  64. package/dist/physics/helpers/shape-factory.d.ts +8 -0
  65. package/dist/physics/helpers/shape-factory.js +76 -0
  66. package/dist/physics/helpers/shape-factory.js.map +1 -0
  67. package/dist/physics/index.d.ts +9 -0
  68. package/dist/physics/index.js +10 -0
  69. package/dist/physics/index.js.map +1 -0
  70. package/dist/physics/interfaces.d.ts +75 -0
  71. package/dist/physics/interfaces.js +8 -0
  72. package/dist/physics/interfaces.js.map +1 -0
  73. package/dist/physics/physics-world.d.ts +34 -0
  74. package/dist/physics/physics-world.js +96 -0
  75. package/dist/physics/physics-world.js.map +1 -0
  76. package/dist/physics/sub-elements/physics-body-groups.d.ts +10 -0
  77. package/dist/physics/sub-elements/physics-body-groups.js +43 -0
  78. package/dist/physics/sub-elements/physics-body-groups.js.map +1 -0
  79. package/dist/physics/sub-elements/physics-collision.d.ts +22 -0
  80. package/dist/physics/sub-elements/physics-collision.js +130 -0
  81. package/dist/physics/sub-elements/physics-collision.js.map +1 -0
  82. package/dist/physics/sub-elements/physics-materials.d.ts +14 -0
  83. package/dist/physics/sub-elements/physics-materials.js +100 -0
  84. package/dist/physics/sub-elements/physics-materials.js.map +1 -0
  85. package/dist/services/keyboard/keyboard.js +6 -9
  86. package/dist/services/keyboard/keyboard.js.map +1 -1
  87. package/dist/services/mouse/mouse.service.js +13 -14
  88. package/dist/services/mouse/mouse.service.js.map +1 -1
  89. package/dist/services/mouse/mouser-target-focus.service.js +14 -15
  90. package/dist/services/mouse/mouser-target-focus.service.js.map +1 -1
  91. package/package.json +6 -4
  92. package/tsconfig.json +1 -1
  93. package/coverage/clover.xml +0 -539
  94. package/coverage/coverage-final.json +0 -12
  95. package/coverage/lcov-report/base.css +0 -224
  96. package/coverage/lcov-report/block-navigation.js +0 -87
  97. package/coverage/lcov-report/favicon.png +0 -0
  98. package/coverage/lcov-report/game-entities/controller.ts.html +0 -235
  99. package/coverage/lcov-report/game-entities/entity-base.ts.html +0 -202
  100. package/coverage/lcov-report/game-entities/entity.ts.html +0 -526
  101. package/coverage/lcov-report/game-entities/index.html +0 -191
  102. package/coverage/lcov-report/game-entities/service.ts.html +0 -379
  103. package/coverage/lcov-report/game-entities/store.ts.html +0 -391
  104. package/coverage/lcov-report/game-entities/view.ts.html +0 -154
  105. package/coverage/lcov-report/helpers/animator/animator.ts.html +0 -658
  106. package/coverage/lcov-report/helpers/animator/index.html +0 -116
  107. package/coverage/lcov-report/helpers/auto-destroy/auto-destroy.ts.html +0 -184
  108. package/coverage/lcov-report/helpers/auto-destroy/index.html +0 -116
  109. package/coverage/lcov-report/helpers/index.html +0 -116
  110. package/coverage/lcov-report/helpers/update-loop.ts.html +0 -127
  111. package/coverage/lcov-report/helpers/view-array/index.html +0 -116
  112. package/coverage/lcov-report/helpers/view-array/view-array.ts.html +0 -388
  113. package/coverage/lcov-report/index.html +0 -191
  114. package/coverage/lcov-report/lib/vector/index.html +0 -116
  115. package/coverage/lcov-report/lib/vector/vector.ts.html +0 -484
  116. package/coverage/lcov-report/prettify.css +0 -1
  117. package/coverage/lcov-report/prettify.js +0 -2
  118. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  119. package/coverage/lcov-report/sorter.js +0 -196
  120. package/coverage/lcov.info +0 -1056
  121. package/dist/app.d.ts +0 -21
  122. package/dist/app.js +0 -54
  123. package/dist/app.js.map +0 -1
  124. package/dist/game-assets/container/container.d.ts +0 -26
  125. package/dist/game-assets/container/container.js +0 -94
  126. package/dist/game-assets/container/container.js.map +0 -1
  127. package/dist/game-assets/display-object/container.d.ts +0 -59
  128. package/dist/game-assets/display-object/container.js +0 -219
  129. package/dist/game-assets/display-object/container.js.map +0 -1
  130. package/dist/game-assets/display-object/container.spec.js.map +0 -1
  131. package/dist/game-assets/display-object/display-object.d.ts +0 -56
  132. package/dist/game-assets/display-object/display-object.js +0 -214
  133. package/dist/game-assets/display-object/display-object.js.map +0 -1
  134. package/dist/game-assets/display-object/display-object.spec.js.map +0 -1
  135. package/dist/game-assets/display-object/interfaces.d.ts +0 -23
  136. package/dist/game-assets/display-object/interfaces.js +0 -3
  137. package/dist/game-assets/display-object/interfaces.js.map +0 -1
  138. package/dist/game-assets/display-object/objects/container.d.ts +0 -9
  139. package/dist/game-assets/display-object/objects/container.js +0 -41
  140. package/dist/game-assets/display-object/objects/container.js.map +0 -1
  141. package/dist/game-assets/display-object/objects/graphics.d.ts +0 -23
  142. package/dist/game-assets/display-object/objects/graphics.js +0 -117
  143. package/dist/game-assets/display-object/objects/graphics.js.map +0 -1
  144. package/dist/game-assets/display-object/objects/image.d.ts +0 -29
  145. package/dist/game-assets/display-object/objects/image.js +0 -130
  146. package/dist/game-assets/display-object/objects/image.js.map +0 -1
  147. package/dist/game-assets/display-object/objects/sprite.d.ts +0 -34
  148. package/dist/game-assets/display-object/objects/sprite.js +0 -87
  149. package/dist/game-assets/display-object/objects/sprite.js.map +0 -1
  150. package/dist/game-assets/display-object/premade-display-objects/image-with-glowing-shapes.d.ts +0 -19
  151. package/dist/game-assets/display-object/premade-display-objects/image-with-glowing-shapes.js +0 -94
  152. package/dist/game-assets/display-object/premade-display-objects/image-with-glowing-shapes.js.map +0 -1
  153. package/dist/game-assets/filters/filters.d.ts +0 -38
  154. package/dist/game-assets/filters/filters.js +0 -162
  155. package/dist/game-assets/filters/filters.js.map +0 -1
  156. package/dist/game-assets/filters/glow-filter.d.ts +0 -11
  157. package/dist/game-assets/filters/glow-filter.js +0 -33
  158. package/dist/game-assets/filters/glow-filter.js.map +0 -1
  159. package/dist/game-assets/filters/shaders.d.ts +0 -8
  160. package/dist/game-assets/filters/shaders.js +0 -82
  161. package/dist/game-assets/filters/shaders.js.map +0 -1
  162. package/dist/game-assets/game-assets.d.ts +0 -14
  163. package/dist/game-assets/game-assets.js +0 -92
  164. package/dist/game-assets/game-assets.js.map +0 -1
  165. package/dist/game-assets/graphics/graphics.d.ts +0 -26
  166. package/dist/game-assets/graphics/graphics.js +0 -104
  167. package/dist/game-assets/graphics/graphics.js.map +0 -1
  168. package/dist/game-assets/helpers/glow.helper.d.ts +0 -1
  169. package/dist/game-assets/helpers/glow.helper.js +0 -77
  170. package/dist/game-assets/helpers/glow.helper.js.map +0 -1
  171. package/dist/game-assets/image/image-creator.d.ts +0 -23
  172. package/dist/game-assets/image/image-creator.js +0 -96
  173. package/dist/game-assets/image/image-creator.js.map +0 -1
  174. package/dist/game-assets/image/image.d.ts +0 -34
  175. package/dist/game-assets/image/image.js +0 -139
  176. package/dist/game-assets/image/image.js.map +0 -1
  177. package/dist/game-assets/image-data.helper.d.ts +0 -16
  178. package/dist/game-assets/image-data.helper.js +0 -53
  179. package/dist/game-assets/image-data.helper.js.map +0 -1
  180. package/dist/game-assets/index.d.ts +0 -8
  181. package/dist/game-assets/index.js +0 -34
  182. package/dist/game-assets/index.js.map +0 -1
  183. package/dist/game-assets/pixel-perfect-interaction.d.ts +0 -2
  184. package/dist/game-assets/pixel-perfect-interaction.js +0 -111
  185. package/dist/game-assets/pixel-perfect-interaction.js.map +0 -1
  186. package/dist/game-entities/controller.d.ts +0 -10
  187. package/dist/game-entities/controller.js +0 -53
  188. package/dist/game-entities/controller.js.map +0 -1
  189. package/dist/game-entities/entity-base/entity-base.d.ts +0 -10
  190. package/dist/game-entities/entity-base/entity-base.js +0 -38
  191. package/dist/game-entities/entity-base/entity-base.js.map +0 -1
  192. package/dist/game-entities/entity-base/entity-base.spec.js.map +0 -1
  193. package/dist/game-entities/entity-base.d.ts +0 -12
  194. package/dist/game-entities/entity-base.js +0 -55
  195. package/dist/game-entities/entity-base.js.map +0 -1
  196. package/dist/game-entities/entity.d.ts +0 -22
  197. package/dist/game-entities/entity.js +0 -126
  198. package/dist/game-entities/entity.js.map +0 -1
  199. package/dist/game-entities/service.d.ts +0 -10
  200. package/dist/game-entities/service.js +0 -93
  201. package/dist/game-entities/service.js.map +0 -1
  202. package/dist/game-entities/store/store.d.ts +0 -19
  203. package/dist/game-entities/store/store.js +0 -131
  204. package/dist/game-entities/store/store.js.map +0 -1
  205. package/dist/game-entities/store/store.spec.js.map +0 -1
  206. package/dist/game-entities/store.d.ts +0 -18
  207. package/dist/game-entities/store.js +0 -121
  208. package/dist/game-entities/store.js.map +0 -1
  209. package/dist/game-entities/tests/controller.spec.js.map +0 -1
  210. package/dist/game-entities/tests/entity-base.spec.js.map +0 -1
  211. package/dist/game-entities/tests/entity.spec.js.map +0 -1
  212. package/dist/game-entities/tests/service.spec.js.map +0 -1
  213. package/dist/game-entities/tests/store.spec.js.map +0 -1
  214. package/dist/game-entities/tests/view.spec.js.map +0 -1
  215. package/dist/game-entities/view.d.ts +0 -9
  216. package/dist/game-entities/view.js +0 -20
  217. package/dist/game-entities/view.js.map +0 -1
  218. package/dist/helpers/animator/animator.d.ts +0 -35
  219. package/dist/helpers/animator/animator.js +0 -158
  220. package/dist/helpers/animator/animator.js.map +0 -1
  221. package/dist/helpers/animator/animator.spec.js.map +0 -1
  222. package/dist/helpers/auto-destroy/auto-destroy.d.ts +0 -5
  223. package/dist/helpers/auto-destroy/auto-destroy.js +0 -38
  224. package/dist/helpers/auto-destroy/auto-destroy.js.map +0 -1
  225. package/dist/helpers/auto-destroy/auto-destroy.spec.js.map +0 -1
  226. package/dist/helpers/update-loop.d.ts +0 -7
  227. package/dist/helpers/update-loop.js +0 -16
  228. package/dist/helpers/update-loop.js.map +0 -1
  229. package/dist/helpers/vertice/vertice.helper.d.ts +0 -4
  230. package/dist/helpers/vertice/vertice.helper.js +0 -23
  231. package/dist/helpers/vertice/vertice.helper.js.map +0 -1
  232. package/dist/helpers/view-array/view-array.d.ts +0 -28
  233. package/dist/helpers/view-array/view-array.js +0 -117
  234. package/dist/lib/common/common-lib.d.ts +0 -6
  235. package/dist/lib/common/common-lib.js +0 -40
  236. package/dist/lib/common/common-lib.js.map +0 -1
  237. package/dist/lib/vector/vector-coordinate-convertion.spec.js.map +0 -1
  238. package/dist/lib/vector/vector-radian.spec.js.map +0 -1
  239. package/dist/lib/vector/vector.d.ts +0 -28
  240. package/dist/lib/vector/vector.js +0 -114
  241. package/dist/lib/vector/vector.js.map +0 -1
  242. package/dist/lib/vector/vector.spec.js.map +0 -1
  243. package/dist/services/mouse/mouse.d.ts +0 -12
  244. package/dist/services/mouse/mouse.js +0 -57
  245. package/dist/services/mouse/mouse.js.map +0 -1
  246. package/dist/services/sound/sound.d.ts +0 -3
  247. package/dist/services/sound/sound.js +0 -22
  248. 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
+ }