bard-legends-framework 0.9.5 → 0.9.7

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 (239) hide show
  1. package/dist/_interfaces/index.d.ts +2 -2
  2. package/dist/_interfaces/index.js +2 -3
  3. package/dist/game-entities/attachable/attachable.d.ts +6 -6
  4. package/dist/game-entities/attachable/attachable.js +28 -30
  5. package/dist/game-entities/attachable/attachable.spec.js +129 -128
  6. package/dist/game-entities/attachable/attachable.store.d.ts +5 -5
  7. package/dist/game-entities/attachable/attachable.store.js +34 -32
  8. package/dist/game-entities/attachable/attachable.test.js +132 -131
  9. package/dist/game-entities/attachable/destroyable.d.ts +13 -13
  10. package/dist/game-entities/attachable/destroyable.js +64 -69
  11. package/dist/game-entities/attachable/helpers/decorate-actions-lib.d.ts +15 -15
  12. package/dist/game-entities/attachable/helpers/decorate-actions-lib.js +125 -116
  13. package/dist/game-entities/attachable/helpers/referance-variable.d.ts +15 -15
  14. package/dist/game-entities/attachable/helpers/referance-variable.js +47 -48
  15. package/dist/game-entities/attachable/interfaces.d.ts +6 -6
  16. package/dist/game-entities/attachable/interfaces.js +2 -3
  17. package/dist/game-entities/base/helpers/decorate-actions-lib.js +0 -1
  18. package/dist/game-entities/controller/controller.js +0 -1
  19. package/dist/game-entities/controller/controller.spec.js +128 -125
  20. package/dist/game-entities/entity/entity.spec.js +263 -293
  21. package/dist/game-entities/entity/helpers/view-creation.helper.d.ts +7 -7
  22. package/dist/game-entities/entity/helpers/view-creation.helper.js +48 -48
  23. package/dist/game-entities/scene/scene.spec.js +219 -223
  24. package/dist/game-entities/service/service.js +0 -4
  25. package/dist/game-entities/service/service.spec.js +265 -237
  26. package/dist/game-entities/service/service.test.js +4 -2
  27. package/dist/game-entities/update-loop.d.ts +18 -18
  28. package/dist/game-entities/update-loop.js +46 -28
  29. package/dist/game-entities/view/view.js +1 -1
  30. package/dist/game-entities/view/view.spec.js +490 -506
  31. package/dist/game-entities/view/view.test.js +1 -1
  32. package/dist/lib/animator/animations.d.ts +13 -13
  33. package/dist/lib/animator/animations.js +43 -40
  34. package/dist/lib/animator/animator.d.ts +41 -41
  35. package/dist/lib/animator/animator.js +194 -197
  36. package/dist/lib/animator/animator.spec.js +699 -612
  37. package/dist/lib/animator/index.js +24 -19
  38. package/dist/lib/libraries/animator/animations.d.ts +13 -13
  39. package/dist/lib/libraries/animator/animations.js +43 -40
  40. package/dist/lib/libraries/animator/animator.d.ts +41 -41
  41. package/dist/lib/libraries/animator/animator.js +194 -197
  42. package/dist/lib/libraries/animator/animator.spec.js +699 -612
  43. package/dist/lib/libraries/animator/index.js +24 -19
  44. package/dist/lib/libraries/path-finder/path-finder.d.ts +2 -2
  45. package/dist/lib/libraries/path-finder/path-finder.js +19 -20
  46. package/dist/lib/path-finder/path-finder.d.ts +2 -2
  47. package/dist/lib/path-finder/path-finder.js +19 -20
  48. package/dist/lib/services/keyboard/keyboard.d.ts +4 -4
  49. package/dist/lib/services/keyboard/keyboard.js +39 -31
  50. package/dist/lib/services/mouse/mouse.service.d.ts +8 -8
  51. package/dist/lib/services/mouse/mouse.service.js +65 -53
  52. package/dist/lib/services/mouse/mouser-target-focus.service.d.ts +11 -11
  53. package/dist/lib/services/mouse/mouser-target-focus.service.js +83 -81
  54. package/dist/lib/update-loop.d.ts +10 -10
  55. package/dist/lib/update-loop.js +35 -27
  56. package/dist/physics/entitity-types/immovable-physics-entity.d.ts +6 -6
  57. package/dist/physics/entitity-types/immovable-physics-entity.js +23 -24
  58. package/dist/physics/entitity-types/movable-entity.d.ts +6 -6
  59. package/dist/physics/entitity-types/movable-entity.js +21 -22
  60. package/dist/physics/entitity-types/movable-physics-entity.d.ts +14 -14
  61. package/dist/physics/entitity-types/movable-physics-entity.js +83 -88
  62. package/dist/physics/entitity-types/physics-entity.d.ts +23 -23
  63. package/dist/physics/entitity-types/physics-entity.js +97 -88
  64. package/dist/physics/helpers/closest-available-space.helper.d.ts +16 -16
  65. package/dist/physics/helpers/closest-available-space.helper.js +98 -96
  66. package/dist/physics/helpers/closest-available-space.helper.spec.js +115 -68
  67. package/dist/physics/helpers/p2js.helper.d.ts +3 -3
  68. package/dist/physics/helpers/p2js.helper.js +21 -22
  69. package/dist/physics/helpers/shape-factory.d.ts +9 -4
  70. package/dist/physics/helpers/shape-factory.js +99 -75
  71. package/dist/physics/libs/p2js.helper.js +1 -1
  72. package/dist/physics/libs/position-to-grid-position-converter.d.ts +3 -3
  73. package/dist/physics/libs/position-to-grid-position-converter.js +15 -13
  74. package/dist/physics/module//360/237/223/220services/availability-grid.service.d.ts +10 -5
  75. package/dist/physics/module//360/237/223/220services/availability-grid.service.js +77 -57
  76. package/dist/physics/module//360/237/223/220services/border.service.d.ts +2 -2
  77. package/dist/physics/module//360/237/223/220services/border.service.js +57 -37
  78. package/dist/physics/module//360/237/223/220services/collision/physics-body-group.service.js +1 -1
  79. package/dist/physics/module//360/237/223/220services/collisions.service.d.ts +7 -7
  80. package/dist/physics/module//360/237/223/220services/collisions.service.js +110 -98
  81. package/dist/physics/module//360/237/223/220services/debug-visuals.service.d.ts +28 -6
  82. package/dist/physics/module//360/237/223/220services/debug-visuals.service.js +121 -89
  83. package/dist/physics/module//360/237/223/220services/eliptic-explosion.service.d.ts +15 -7
  84. package/dist/physics/module//360/237/223/220services/eliptic-explosion.service.js +117 -93
  85. package/dist/physics/module//360/237/223/220services/explosion.service.d.ts +14 -7
  86. package/dist/physics/module//360/237/223/220services/explosion.service.js +102 -77
  87. package/dist/physics/module//360/237/223/220services/explosions/eliptic-explosion.service.d.ts +15 -7
  88. package/dist/physics/module//360/237/223/220services/explosions/eliptic-explosion.service.js +117 -93
  89. package/dist/physics/module//360/237/223/220services/explosions/explosion.service.d.ts +14 -7
  90. package/dist/physics/module//360/237/223/220services/explosions/explosion.service.js +102 -77
  91. package/dist/physics/module//360/237/223/220services/explosions/helpers/ray-cast-hit-converter.d.ts +3 -3
  92. package/dist/physics/module//360/237/223/220services/explosions/helpers/ray-cast-hit-converter.js +71 -67
  93. package/dist/physics/module//360/237/223/220services/helpers/ray-cast-hit-converter.d.ts +3 -3
  94. package/dist/physics/module//360/237/223/220services/helpers/ray-cast-hit-converter.js +71 -67
  95. package/dist/physics/module//360/237/223/220services/impact/eliptic-explosion.service.js +1 -1
  96. package/dist/physics/module//360/237/223/220services/materials.service.d.ts +16 -11
  97. package/dist/physics/module//360/237/223/220services/materials.service.js +118 -108
  98. package/dist/physics/module//360/237/223/220services/path-finder.service.d.ts +19 -8
  99. package/dist/physics/module//360/237/223/220services/path-finder.service.js +121 -82
  100. package/dist/physics/module//360/237/223/220services/physics-world.service.d.ts +30 -15
  101. package/dist/physics/module//360/237/223/220services/physics-world.service.js +122 -100
  102. package/dist/physics/module//360/237/223/220services/ray-casting.service.d.ts +3 -3
  103. package/dist/physics/module//360/237/223/220services/ray-casting.service.js +87 -86
  104. package/dist/physics/module//360/237/223/220services/shape-creation.service.d.ts +9 -4
  105. package/dist/physics/module//360/237/223/220services/shape-creation.service.js +113 -84
  106. package/dist/physics/module//360/237/223/220services/test-visuals/test-visuals.service.js +2 -1
  107. package/dist/physics/module//360/237/247/212entities/data-structures/availability-grid-cache.d.ts +8 -8
  108. package/dist/physics/module//360/237/247/212entities/data-structures/availability-grid-cache.js +32 -33
  109. package/dist/physics/physics-world.d.ts +50 -34
  110. package/dist/physics/physics-world.js +142 -133
  111. package/dist/physics/sub-elements/available-spaces/helpers/availability-grid.helper.d.ts +3 -3
  112. package/dist/physics/sub-elements/available-spaces/helpers/availability-grid.helper.js +15 -13
  113. package/dist/physics/sub-elements/available-spaces/physics-availability-grid.d.ts +9 -9
  114. package/dist/physics/sub-elements/available-spaces/physics-availability-grid.js +82 -77
  115. package/dist/physics/sub-elements/available-spaces/physics-available-spaces.d.ts +18 -14
  116. package/dist/physics/sub-elements/available-spaces/physics-available-spaces.js +91 -79
  117. package/dist/physics/sub-elements/collisions/contact-equation-orginiser.d.ts +11 -11
  118. package/dist/physics/sub-elements/collisions/contact-equation-orginiser.js +84 -76
  119. package/dist/physics/sub-elements/collisions/physics-collision.d.ts +7 -7
  120. package/dist/physics/sub-elements/collisions/physics-collision.js +43 -44
  121. package/dist/physics/sub-elements/elements/physics-body-groups.d.ts +11 -11
  122. package/dist/physics/sub-elements/elements/physics-body-groups.js +54 -54
  123. package/dist/physics/sub-elements/elements/physics-materials.d.ts +15 -10
  124. package/dist/physics/sub-elements/elements/physics-materials.js +101 -100
  125. package/dist/physics/sub-elements/elements/physics-world-borders.d.ts +3 -3
  126. package/dist/physics/sub-elements/elements/physics-world-borders.js +69 -45
  127. package/dist/physics/sub-elements/physics-body-groups.d.ts +8 -8
  128. package/dist/physics/sub-elements/physics-body-groups.js +41 -42
  129. package/dist/physics/sub-elements/physics-collision.d.ts +16 -16
  130. package/dist/physics/sub-elements/physics-collision.js +141 -121
  131. package/dist/physics/sub-elements/physics-materials.d.ts +15 -10
  132. package/dist/physics/sub-elements/physics-materials.js +101 -100
  133. package/dist/physics/sub-elements/physics-world-borders.d.ts +2 -2
  134. package/dist/physics/sub-elements/physics-world-borders.js +25 -26
  135. package/dist/physics/sub-elements/raycasting/physics-body-explosion-hit.d.ts +15 -11
  136. package/dist/physics/sub-elements/raycasting/physics-body-explosion-hit.js +59 -59
  137. package/dist/physics/sub-elements/raycasting/physics-explosion.d.ts +13 -6
  138. package/dist/physics/sub-elements/raycasting/physics-explosion.js +108 -73
  139. package/dist/physics/sub-elements/raycasting/ray-cast.d.ts +19 -19
  140. package/dist/physics/sub-elements/raycasting/ray-cast.js +93 -98
  141. package/dist/pixi/display-object/components/filters.d.ts +18 -18
  142. package/dist/pixi/display-object/components/filters.js +106 -81
  143. package/dist/pixi/display-object/components/glow-effect.d.ts +8 -8
  144. package/dist/pixi/display-object/components/glow-effect.js +33 -36
  145. package/dist/pixi/display-object/components/glow-filter.d.ts +8 -8
  146. package/dist/pixi/display-object/components/glow-filter.js +33 -36
  147. package/dist/pixi/display-object/container-attributes.js +1 -1
  148. package/dist/pixi/display-object/display-object-attributes.d.ts +41 -41
  149. package/dist/pixi/display-object/display-object-attributes.js +148 -150
  150. package/dist/pixi/display-object/display-object.d.ts +17 -17
  151. package/dist/pixi/display-object/display-object.js +79 -75
  152. package/dist/pixi/display-object/filters/base-filters/alpha-primer-color.filter.d.ts +9 -4
  153. package/dist/pixi/display-object/filters/base-filters/alpha-primer-color.filter.js +89 -77
  154. package/dist/pixi/display-object/filters/base-filters/blur.filter.js +30 -30
  155. package/dist/pixi/display-object/filters/base-filters/contrast-filter.d.ts +9 -4
  156. package/dist/pixi/display-object/filters/base-filters/contrast-filter.js +62 -53
  157. package/dist/pixi/display-object/filters/base-filters/expand-with-alpha-color.d.ts +10 -5
  158. package/dist/pixi/display-object/filters/base-filters/expand-with-alpha-color.js +93 -81
  159. package/dist/pixi/display-object/filters/base-filters/expand-with-color-gradient.d.ts +12 -7
  160. package/dist/pixi/display-object/filters/base-filters/expand-with-color-gradient.js +120 -109
  161. package/dist/pixi/display-object/filters/base-filters/expand-with-color.d.ts +10 -5
  162. package/dist/pixi/display-object/filters/base-filters/expand-with-color.filter.js +32 -32
  163. package/dist/pixi/display-object/filters/base-filters/expand-with-color.js +92 -85
  164. package/dist/pixi/display-object/filters/templates/checking-neighbors.template.js +28 -28
  165. package/dist/pixi/display-object/filters/templates/plane.template.js +20 -20
  166. package/dist/pixi/display-object/filters.js +20 -4
  167. package/dist/pixi/display-object/objects/components/filters.d.ts +18 -18
  168. package/dist/pixi/display-object/objects/components/filters.js +106 -81
  169. package/dist/pixi/display-object/objects/container.d.ts +2 -2
  170. package/dist/pixi/display-object/objects/container.js +39 -30
  171. package/dist/pixi/display-object/objects/graphics.d.ts +28 -28
  172. package/dist/pixi/display-object/objects/graphics.js +218 -202
  173. package/dist/pixi/display-object/objects/helpers/filters.d.ts +25 -25
  174. package/dist/pixi/display-object/objects/helpers/filters.js +150 -124
  175. package/dist/pixi/display-object/objects/helpers/glow-sprite-generator.d.ts +7 -7
  176. package/dist/pixi/display-object/objects/helpers/glow-sprite-generator.js +114 -95
  177. package/dist/pixi/display-object/objects/premade-objects/sprite-with-glowing-shapes.d.ts +5 -5
  178. package/dist/pixi/display-object/objects/premade-objects/sprite-with-glowing-shapes.js +81 -57
  179. package/dist/pixi/display-object/objects/sprite.d.ts +43 -43
  180. package/dist/pixi/display-object/objects/sprite.js +248 -233
  181. package/dist/pixi/display-object/objects/text/helpers/process-steps/1-data-in-converter/rich-text-data-in-converter.js +1 -1
  182. package/dist/pixi/display-object/objects/text/helpers/process-steps/1-data-in-converter/rich-text-data-in-converter.test.js +9 -9
  183. package/dist/pixi/display-object/objects/text/helpers/rich-text-to-plane-text.d.ts +1 -1
  184. package/dist/pixi/display-object/objects/text.d.ts +25 -25
  185. package/dist/pixi/display-object/objects/text.js +111 -102
  186. package/dist/pixi/display-object/premade-objects/sprite-with-glowing-shapes.d.ts +13 -9
  187. package/dist/pixi/display-object/premade-objects/sprite-with-glowing-shapes.js +96 -67
  188. package/dist/pixi/game.d.ts +1 -1
  189. package/dist/pixi/game.js +2 -2
  190. package/dist/pixi/helpers/glow-sprite-generator.d.ts +6 -6
  191. package/dist/pixi/helpers/glow-sprite-generator.js +99 -84
  192. package/dist/pixi/helpers/pixi-container.helper.d.ts +1 -1
  193. package/dist/pixi/helpers/pixi-container.helper.js +10 -8
  194. package/dist/pixi/helpers/screen-position-to-stage.helper.d.ts +1 -1
  195. package/dist/pixi/helpers/screen-position-to-stage.helper.js +12 -12
  196. package/dist/pixi/helpers/screen-position-to-stage.helper.test.js +174 -79
  197. package/dist/pixi/modules/CAMERA/index.d.ts +1 -1
  198. package/dist/pixi/modules/CAMERA/index.js +3 -3
  199. package/dist/services/keyboard/keyboard.d.ts +4 -4
  200. package/dist/services/keyboard/keyboard.js +39 -31
  201. package/dist/services/mouse/mouse.service.d.ts +8 -8
  202. package/dist/services/mouse/mouse.service.js +65 -53
  203. package/dist/services/mouse/mouser-target-focus.service.d.ts +11 -11
  204. package/dist/services/mouse/mouser-target-focus.service.js +83 -81
  205. package/dist/utilities/libraries/animator/animating-content/state-animation.d.ts +29 -26
  206. package/dist/utilities/libraries/animator/animating-content/state-animation.js +159 -165
  207. package/dist/utilities/libraries/animator/animating-content/state-animation.test.js +386 -375
  208. package/dist/utilities/libraries/animator/animator.spec.js +765 -656
  209. package/dist/utilities/libraries/binary-heap/binary-heap.d.ts +11 -11
  210. package/dist/utilities/libraries/binary-heap/binary-heap.js +79 -81
  211. package/dist/utilities/libraries/data-structures/binary-heap/binary-heap.d.ts +11 -11
  212. package/dist/utilities/libraries/data-structures/binary-heap/binary-heap.js +79 -81
  213. package/dist/utilities/libraries/data-structures/grid/grid.d.ts +35 -31
  214. package/dist/utilities/libraries/data-structures/grid/grid.js +128 -117
  215. package/dist/utilities/libraries/data-structures/grid/grid.spec.js +176 -138
  216. package/dist/utilities/libraries/data-structures/grid/grid.test.js +218 -141
  217. package/dist/utilities/libraries/data-structures/grid/position-to-grid-position-converter.d.ts +3 -3
  218. package/dist/utilities/libraries/data-structures/grid/position-to-grid-position-converter.js +15 -13
  219. package/dist/utilities/libraries/data-structures/queue/queue.d.ts +21 -21
  220. package/dist/utilities/libraries/data-structures/queue/queue.js +63 -66
  221. package/dist/utilities/libraries/data-structures/queue/queue.test.js +54 -55
  222. package/dist/utilities/libraries/grid-algorithms/closest-available-space/closest-available-space.helper.spec.js +122 -68
  223. package/dist/utilities/libraries/grid-algorithms/path-finder/path-finder.spec.js +140 -135
  224. package/dist/utilities/libraries/grid-algorithms/vector-field-path-finder/vector-field-path-finder.spec.js +293 -229
  225. package/dist/utilities/libraries/path-finder/path-finder.d.ts +7 -7
  226. package/dist/utilities/libraries/path-finder/path-finder.js +113 -109
  227. package/dist/utilities/libraries/path-finder/path-finder.spec.js +131 -106
  228. package/dist/utilities/services/keyboard/keyboard.d.ts +4 -4
  229. package/dist/utilities/services/keyboard/keyboard.js +42 -34
  230. package/dist/utilities/services/mouse/helpers/mouse-position.helper.d.ts +1 -1
  231. package/dist/utilities/services/mouse/helpers/mouse-position.helper.js +12 -12
  232. package/dist/utilities/services/mouse/helpers/mouse-position.helper.test.js +168 -73
  233. package/dist/utilities/services/mouse/mouse-target-focus.service.d.ts +15 -15
  234. package/dist/utilities/services/mouse/mouse-target-focus.service.js +79 -76
  235. package/dist/utilities/services/mouse/mouse.service.d.ts +9 -9
  236. package/dist/utilities/services/mouse/mouse.service.js +86 -72
  237. package/dist/utilities/services/mouse/mouser-target-focus.service.d.ts +11 -11
  238. package/dist/utilities/services/mouse/mouser-target-focus.service.js +83 -81
  239. package/package.json +6 -12
@@ -1,102 +1,126 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- 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;
1
+ var __decorate =
2
+ (this && this.__decorate) ||
3
+ ((decorators, target, key, desc) => {
4
+ var c = arguments.length,
5
+ r = c < 3 ? target : desc === null ? (desc = Object.getOwnPropertyDescriptor(target, key)) : desc,
6
+ d;
7
+ if (typeof Reflect === 'object' && typeof Reflect.decorate === 'function')
8
+ r = Reflect.decorate(decorators, target, key, desc);
9
+ else
10
+ for (var i = decorators.length - 1; i >= 0; i--)
11
+ if ((d = decorators[i])) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
12
  return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- var __metadata = (this && this.__metadata) || function (k, v) {
9
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
13
+ });
14
+ var __metadata =
15
+ (this && this.__metadata) ||
16
+ ((k, v) => {
17
+ if (typeof Reflect === 'object' && typeof Reflect.metadata === 'function') return Reflect.metadata(k, v);
18
+ });
19
+ Object.defineProperty(exports, '__esModule', { value: true });
12
20
  exports.ElipticExplosionService = void 0;
13
- const helpers_lib_1 = require("helpers-lib");
14
- const game_entities_1 = require("../../../../game-entities");
15
- const ray_casting_service_1 = require("../ray-casting/ray-casting.service");
16
- const test_visuals_service_1 = require("../test-visuals/test-visuals.service");
17
- const physics_world_entity_1 = require("../../\uD83E\uDDCAentities/physics-world.entity");
18
- const ray_cast_hit_converter_1 = require("./helpers/ray-cast-hit-converter");
19
- const p2js_helper_1 = require("../../../libs/p2js.helper");
21
+ const helpers_lib_1 = require('helpers-lib');
22
+ const game_entities_1 = require('../../../../game-entities');
23
+ const ray_casting_service_1 = require('../ray-casting/ray-casting.service');
24
+ const test_visuals_service_1 = require('../test-visuals/test-visuals.service');
25
+ const physics_world_entity_1 = require('../../\uD83E\uDDCAentities/physics-world.entity');
26
+ const ray_cast_hit_converter_1 = require('./helpers/ray-cast-hit-converter');
27
+ const p2js_helper_1 = require('../../../libs/p2js.helper');
20
28
  const MIN_GAP_BETWEEN_LINES = 15;
21
29
  let ElipticExplosionService = class ElipticExplosionService {
22
- constructor(rayCastingService, testVisualsService) {
23
- this.rayCastingService = rayCastingService;
24
- this.testVisualsService = testVisualsService;
30
+ constructor(rayCastingService, testVisualsService) {
31
+ this.rayCastingService = rayCastingService;
32
+ this.testVisualsService = testVisualsService;
33
+ }
34
+ createElipticExplosion(physicsWorldId, explosionCenter, rotation, size, physicsBodyGroup, severity, options) {
35
+ const physicsWorld = physics_world_entity_1.PhysicsWorldEntity.getInstanceByIdOrFail(physicsWorldId);
36
+ const rayCasts = this.createRays(
37
+ explosionCenter,
38
+ rotation,
39
+ size,
40
+ physicsBodyGroup,
41
+ options?.hitOnlyClosest === true,
42
+ physicsWorld
43
+ );
44
+ const explosionHitWithP2Bodies = ray_cast_hit_converter_1.RayCastHitConverter.toExplosionHits(rayCasts, false);
45
+ this.applyForcesToBodies(explosionHitWithP2Bodies, severity);
46
+ if (options?.testLayerId) {
47
+ this.testVisualsService.createElipticExplosionDebugVisual(
48
+ physicsWorld,
49
+ options.testLayerId,
50
+ rayCasts,
51
+ explosionCenter,
52
+ rotation,
53
+ size,
54
+ options.debugRayDuration
55
+ );
25
56
  }
26
- createElipticExplosion(physicsWorldId, explosionCenter, rotation, size, physicsBodyGroup, severity, options) {
27
- let physicsWorld = physics_world_entity_1.PhysicsWorldEntity.getInstanceByIdOrFail(physicsWorldId);
28
- let rayCasts = this.createRays(explosionCenter, rotation, size, physicsBodyGroup, options?.hitOnlyClosest === true, physicsWorld);
29
- let explosionHitWithP2Bodies = ray_cast_hit_converter_1.RayCastHitConverter.toExplosionHits(rayCasts, false);
30
- this.applyForcesToBodies(explosionHitWithP2Bodies, severity);
31
- if (options?.testLayerId) {
32
- this.testVisualsService.createElipticExplosionDebugVisual(physicsWorld, options.testLayerId, rayCasts, explosionCenter, rotation, size, options.debugRayDuration);
57
+ return explosionHitWithP2Bodies.map(explosionHitWithP2Body => {
58
+ const { p2Body, ...explosionHit } = explosionHitWithP2Body;
59
+ return explosionHit;
60
+ });
61
+ }
62
+ createRays(explosionCenter, rotation, size, physicsBodyGroup, hitOnlyClosest, physicsWorld) {
63
+ const lines = [];
64
+ const centerDirection = rotation.toVector();
65
+ const lineDirection = rotation.add(helpers_lib_1.Radian.get90).toVector();
66
+ const horizontalVector = lineDirection.normalize(size.x);
67
+ lines.push(new helpers_lib_1.Line(explosionCenter, explosionCenter.add(horizontalVector)));
68
+ lines.push(new helpers_lib_1.Line(explosionCenter, explosionCenter.add(horizontalVector.multiply(-1))));
69
+ const verticalVector = centerDirection.normalize(size.y);
70
+ lines.push(new helpers_lib_1.Line(explosionCenter, explosionCenter.add(verticalVector)));
71
+ lines.push(new helpers_lib_1.Line(explosionCenter, explosionCenter.add(verticalVector.multiply(-1))));
72
+ const lineCount = Math.round(size.y / MIN_GAP_BETWEEN_LINES);
73
+ const gap = (size.y / (lineCount * 2 + 1)) * 2;
74
+ const gapVector = centerDirection.normalize(gap);
75
+ const width = size.x;
76
+ const heightSquared = size.y ** 2;
77
+ helpers_lib_1.ArrayHelper.createIntegerArray(lineCount).forEach(index => {
78
+ const distanceFromCenter = gap * (index + 1);
79
+ const distanceFromCenterVector = gapVector.multiply(index + 1);
80
+ const vector = lineDirection.normalize(this.getWidthOfLine(width, heightSquared, distanceFromCenter));
81
+ const center1 = explosionCenter.add(distanceFromCenterVector);
82
+ lines.push(new helpers_lib_1.Line(center1, center1.add(vector)));
83
+ lines.push(new helpers_lib_1.Line(center1, center1.add(vector.multiply(-1))));
84
+ const center2 = explosionCenter.add(distanceFromCenterVector.multiply(-1));
85
+ lines.push(new helpers_lib_1.Line(center2, center2.add(vector)));
86
+ lines.push(new helpers_lib_1.Line(center2, center2.add(vector.multiply(-1))));
87
+ });
88
+ return lines.map(line => {
89
+ if (hitOnlyClosest) {
90
+ const hit = this.rayCastingService.castClosest(physicsWorld, line, physicsBodyGroup);
91
+ return { line, hits: hit ? [hit] : [] };
92
+ } else {
93
+ const hits = this.rayCastingService.castAllFirstContacts(physicsWorld, line, physicsBodyGroup);
94
+ return { line, hits };
95
+ }
96
+ });
97
+ }
98
+ getWidthOfLine(width, heightSquared, distanceFromCenter) {
99
+ return Math.sqrt(1 - distanceFromCenter ** 2 / heightSquared) * width;
100
+ }
101
+ applyForcesToBodies(explosionHits, severity) {
102
+ explosionHits.forEach(explosionHit => {
103
+ explosionHit.raycastResults.forEach(rayCastResult => {
104
+ let hitDirection;
105
+ let force;
106
+ if (rayCastResult.isExternal()) {
107
+ hitDirection = rayCastResult.line.fromTo;
108
+ force = severity * 2;
109
+ } else {
110
+ hitDirection = rayCastResult.line.fromTo.multiply(-1);
111
+ force = severity * (1 - rayCastResult.fraction) * 8;
33
112
  }
34
- return explosionHitWithP2Bodies.map(explosionHitWithP2Body => {
35
- let { p2Body, ...explosionHit } = explosionHitWithP2Body;
36
- return explosionHit;
37
- });
38
- }
39
- createRays(explosionCenter, rotation, size, physicsBodyGroup, hitOnlyClosest, physicsWorld) {
40
- let lines = [];
41
- let centerDirection = rotation.toVector();
42
- let lineDirection = rotation.add(helpers_lib_1.Radian.get90).toVector();
43
- let horizontalVector = lineDirection.normalize(size.x);
44
- lines.push(new helpers_lib_1.Line(explosionCenter, explosionCenter.add(horizontalVector)));
45
- lines.push(new helpers_lib_1.Line(explosionCenter, explosionCenter.add(horizontalVector.multiply(-1))));
46
- let verticalVector = centerDirection.normalize(size.y);
47
- lines.push(new helpers_lib_1.Line(explosionCenter, explosionCenter.add(verticalVector)));
48
- lines.push(new helpers_lib_1.Line(explosionCenter, explosionCenter.add(verticalVector.multiply(-1))));
49
- let lineCount = Math.round(size.y / MIN_GAP_BETWEEN_LINES);
50
- let gap = (size.y / (lineCount * 2 + 1)) * 2;
51
- let gapVector = centerDirection.normalize(gap);
52
- let width = size.x;
53
- let heightSquared = Math.pow(size.y, 2);
54
- helpers_lib_1.ArrayHelper.createIntegerArray(lineCount).forEach(index => {
55
- let distanceFromCenter = gap * (index + 1);
56
- let distanceFromCenterVector = gapVector.multiply(index + 1);
57
- let vector = lineDirection.normalize(this.getWidthOfLine(width, heightSquared, distanceFromCenter));
58
- let center1 = explosionCenter.add(distanceFromCenterVector);
59
- lines.push(new helpers_lib_1.Line(center1, center1.add(vector)));
60
- lines.push(new helpers_lib_1.Line(center1, center1.add(vector.multiply(-1))));
61
- let center2 = explosionCenter.add(distanceFromCenterVector.multiply(-1));
62
- lines.push(new helpers_lib_1.Line(center2, center2.add(vector)));
63
- lines.push(new helpers_lib_1.Line(center2, center2.add(vector.multiply(-1))));
64
- });
65
- return lines.map(line => {
66
- if (hitOnlyClosest) {
67
- let hit = this.rayCastingService.castClosest(physicsWorld, line, physicsBodyGroup);
68
- return { line, hits: hit ? [hit] : [] };
69
- }
70
- else {
71
- let hits = this.rayCastingService.castAllFirstContacts(physicsWorld, line, physicsBodyGroup);
72
- return { line, hits };
73
- }
74
- });
75
- }
76
- getWidthOfLine(width, heightSquared, distanceFromCenter) {
77
- return Math.sqrt(1 - Math.pow(distanceFromCenter, 2) / heightSquared) * width;
78
- }
79
- applyForcesToBodies(explosionHits, severity) {
80
- explosionHits.forEach(explosionHit => {
81
- explosionHit.raycastResults.forEach(rayCastResult => {
82
- let hitDirection;
83
- let force;
84
- if (rayCastResult.isExternal()) {
85
- hitDirection = rayCastResult.line.fromTo;
86
- force = severity * 2;
87
- }
88
- else {
89
- hitDirection = rayCastResult.line.fromTo.multiply(-1);
90
- force = severity * (1 - rayCastResult.fraction) * 8;
91
- }
92
- p2js_helper_1.P2JSHelper.pushBody(rayCastResult.body, rayCastResult.hitPosition(), hitDirection, force);
93
- });
94
- });
95
- }
113
+ p2js_helper_1.P2JSHelper.pushBody(rayCastResult.body, rayCastResult.hitPosition(), hitDirection, force);
114
+ });
115
+ });
116
+ }
96
117
  };
97
118
  exports.ElipticExplosionService = ElipticExplosionService;
98
- exports.ElipticExplosionService = ElipticExplosionService = __decorate([
119
+ exports.ElipticExplosionService = ElipticExplosionService = __decorate(
120
+ [
99
121
  (0, game_entities_1.ServiceDecorator)(),
100
- __metadata("design:paramtypes", [ray_casting_service_1.RayCastingService, test_visuals_service_1.TestVisualsService])
101
- ], ElipticExplosionService);
102
- //# sourceMappingURL=eliptic-explosion.service.js.map
122
+ __metadata('design:paramtypes', [ray_casting_service_1.RayCastingService, test_visuals_service_1.TestVisualsService])
123
+ ],
124
+ ElipticExplosionService
125
+ );
126
+ //# sourceMappingURL=eliptic-explosion.service.js.map
@@ -4,11 +4,18 @@ import { PhysicsBodyGroup } from '../../../libs/physics-body-groups';
4
4
  import { TestVisualsService } from '../test-visuals/test-visuals.service';
5
5
  import { RayCastingService } from '../ray-casting/ray-casting.service';
6
6
  export declare class ExplosionService {
7
- private rayCastingService;
8
- private testVisualsService;
9
- constructor(rayCastingService: RayCastingService, testVisualsService: TestVisualsService);
10
- createExplosion(physicsWorldId: string, explosionCenter: Vector, radius: number, physicsBodyGroup: PhysicsBodyGroup, severity: number, options?: PhysicsExplosionOptions): ExplosionHit[];
11
- private createRays;
12
- private applyForcesToBodies;
13
- private getTotalCountOfRays;
7
+ private rayCastingService;
8
+ private testVisualsService;
9
+ constructor(rayCastingService: RayCastingService, testVisualsService: TestVisualsService);
10
+ createExplosion(
11
+ physicsWorldId: string,
12
+ explosionCenter: Vector,
13
+ radius: number,
14
+ physicsBodyGroup: PhysicsBodyGroup,
15
+ severity: number,
16
+ options?: PhysicsExplosionOptions
17
+ ): ExplosionHit[];
18
+ private createRays;
19
+ private applyForcesToBodies;
20
+ private getTotalCountOfRays;
14
21
  }
@@ -1,87 +1,112 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- 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;
1
+ var __decorate =
2
+ (this && this.__decorate) ||
3
+ ((decorators, target, key, desc) => {
4
+ var c = arguments.length,
5
+ r = c < 3 ? target : desc === null ? (desc = Object.getOwnPropertyDescriptor(target, key)) : desc,
6
+ d;
7
+ if (typeof Reflect === 'object' && typeof Reflect.decorate === 'function')
8
+ r = Reflect.decorate(decorators, target, key, desc);
9
+ else
10
+ for (var i = decorators.length - 1; i >= 0; i--)
11
+ if ((d = decorators[i])) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
12
  return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- var __metadata = (this && this.__metadata) || function (k, v) {
9
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
13
+ });
14
+ var __metadata =
15
+ (this && this.__metadata) ||
16
+ ((k, v) => {
17
+ if (typeof Reflect === 'object' && typeof Reflect.metadata === 'function') return Reflect.metadata(k, v);
18
+ });
19
+ Object.defineProperty(exports, '__esModule', { value: true });
12
20
  exports.ExplosionService = void 0;
13
- const helpers_lib_1 = require("helpers-lib");
14
- const game_entities_1 = require("../../../../game-entities");
15
- const physics_world_entity_1 = require("../../\uD83E\uDDCAentities/physics-world.entity");
16
- const p2js_helper_1 = require("../../../libs/p2js.helper");
17
- const ray_cast_hit_converter_1 = require("./helpers/ray-cast-hit-converter");
18
- const test_visuals_service_1 = require("../test-visuals/test-visuals.service");
19
- const ray_casting_service_1 = require("../ray-casting/ray-casting.service");
21
+ const helpers_lib_1 = require('helpers-lib');
22
+ const game_entities_1 = require('../../../../game-entities');
23
+ const physics_world_entity_1 = require('../../\uD83E\uDDCAentities/physics-world.entity');
24
+ const p2js_helper_1 = require('../../../libs/p2js.helper');
25
+ const ray_cast_hit_converter_1 = require('./helpers/ray-cast-hit-converter');
26
+ const test_visuals_service_1 = require('../test-visuals/test-visuals.service');
27
+ const ray_casting_service_1 = require('../ray-casting/ray-casting.service');
20
28
  let ExplosionService = class ExplosionService {
21
- constructor(rayCastingService, testVisualsService) {
22
- this.rayCastingService = rayCastingService;
23
- this.testVisualsService = testVisualsService;
29
+ constructor(rayCastingService, testVisualsService) {
30
+ this.rayCastingService = rayCastingService;
31
+ this.testVisualsService = testVisualsService;
32
+ }
33
+ createExplosion(physicsWorldId, explosionCenter, radius, physicsBodyGroup, severity, options) {
34
+ const physicsWorld = physics_world_entity_1.PhysicsWorldEntity.getInstanceByIdOrFail(physicsWorldId);
35
+ const totalCountOfRays = this.getTotalCountOfRays(radius);
36
+ const rayCasts = this.createRays(
37
+ explosionCenter,
38
+ radius,
39
+ physicsBodyGroup,
40
+ totalCountOfRays,
41
+ options?.hitOnlyClosest === true,
42
+ physicsWorld
43
+ );
44
+ const explosionHits = ray_cast_hit_converter_1.RayCastHitConverter.toExplosionHits(rayCasts);
45
+ this.applyForcesToBodies(explosionCenter, radius, severity, totalCountOfRays, explosionHits);
46
+ if (options?.testLayerId) {
47
+ this.testVisualsService.createExplosionDebugVisual(
48
+ physicsWorld,
49
+ options.testLayerId,
50
+ rayCasts,
51
+ explosionCenter,
52
+ radius,
53
+ options.debugRayDuration
54
+ );
24
55
  }
25
- createExplosion(physicsWorldId, explosionCenter, radius, physicsBodyGroup, severity, options) {
26
- let physicsWorld = physics_world_entity_1.PhysicsWorldEntity.getInstanceByIdOrFail(physicsWorldId);
27
- let totalCountOfRays = this.getTotalCountOfRays(radius);
28
- let rayCasts = this.createRays(explosionCenter, radius, physicsBodyGroup, totalCountOfRays, options?.hitOnlyClosest === true, physicsWorld);
29
- let explosionHits = ray_cast_hit_converter_1.RayCastHitConverter.toExplosionHits(rayCasts);
30
- this.applyForcesToBodies(explosionCenter, radius, severity, totalCountOfRays, explosionHits);
31
- if (options?.testLayerId) {
32
- this.testVisualsService.createExplosionDebugVisual(physicsWorld, options.testLayerId, rayCasts, explosionCenter, radius, options.debugRayDuration);
56
+ return explosionHits;
57
+ }
58
+ createRays(explosionCenter, radius, physicsBodyGroup, totalCountOfRays, hitOnlyClosest, physicsWorld) {
59
+ const radianPerLine = new helpers_lib_1.Radian(helpers_lib_1.PI_360 / totalCountOfRays);
60
+ let directionVector = new helpers_lib_1.Vector(0, -radius);
61
+ const rotationVector = radianPerLine.toVector();
62
+ return helpers_lib_1.ArrayHelper.createEmptyArray(totalCountOfRays)
63
+ .map(() => {
64
+ const to = explosionCenter.add(directionVector);
65
+ directionVector = directionVector.rotate(rotationVector);
66
+ return new helpers_lib_1.Line(explosionCenter, to);
67
+ })
68
+ .map(line => {
69
+ if (hitOnlyClosest) {
70
+ const hit = this.rayCastingService.castClosest(physicsWorld, line, physicsBodyGroup);
71
+ return { line, hits: hit ? [hit] : [] };
72
+ } else {
73
+ const hits = this.rayCastingService.castAllFirstContacts(physicsWorld, line, physicsBodyGroup);
74
+ return { line, hits };
33
75
  }
34
- return explosionHits;
35
- }
36
- createRays(explosionCenter, radius, physicsBodyGroup, totalCountOfRays, hitOnlyClosest, physicsWorld) {
37
- let radianPerLine = new helpers_lib_1.Radian(helpers_lib_1.PI_360 / totalCountOfRays);
38
- let directionVector = new helpers_lib_1.Vector(0, -radius);
39
- let rotationVector = radianPerLine.toVector();
40
- return helpers_lib_1.ArrayHelper.createEmptyArray(totalCountOfRays)
41
- .map(() => {
42
- let to = explosionCenter.add(directionVector);
43
- directionVector = directionVector.rotate(rotationVector);
44
- return new helpers_lib_1.Line(explosionCenter, to);
45
- })
46
- .map(line => {
47
- if (hitOnlyClosest) {
48
- let hit = this.rayCastingService.castClosest(physicsWorld, line, physicsBodyGroup);
49
- return { line, hits: hit ? [hit] : [] };
50
- }
51
- else {
52
- let hits = this.rayCastingService.castAllFirstContacts(physicsWorld, line, physicsBodyGroup);
53
- return { line, hits };
54
- }
55
- });
56
- }
57
- applyForcesToBodies(explosionCenter, radius, severity, totalCountOfRays, explosionHits) {
58
- explosionHits.forEach(explosionHit => {
59
- if (explosionHit.isExternal) {
60
- explosionHit.raycastResults.forEach(rayCastResult => {
61
- let force = severity * (1 - rayCastResult.fraction);
62
- p2js_helper_1.P2JSHelper.pushBody(rayCastResult.body, rayCastResult.hitPosition(), rayCastResult.line.fromTo, force);
63
- });
64
- }
65
- else {
66
- let vectorToCenter = helpers_lib_1.Vector.fromTo(explosionCenter, p2js_helper_1.P2JSHelper.arrayToVector(explosionHit.p2Body.position));
67
- let fractionToCenter = vectorToCenter.length / radius;
68
- let force = (severity * totalCountOfRays * fractionToCenter) / 2;
69
- p2js_helper_1.P2JSHelper.pushBody(explosionHit.p2Body, explosionHit.getHitPosition(), vectorToCenter, force);
70
- }
76
+ });
77
+ }
78
+ applyForcesToBodies(explosionCenter, radius, severity, totalCountOfRays, explosionHits) {
79
+ explosionHits.forEach(explosionHit => {
80
+ if (explosionHit.isExternal) {
81
+ explosionHit.raycastResults.forEach(rayCastResult => {
82
+ const force = severity * (1 - rayCastResult.fraction);
83
+ p2js_helper_1.P2JSHelper.pushBody(rayCastResult.body, rayCastResult.hitPosition(), rayCastResult.line.fromTo, force);
71
84
  });
85
+ } else {
86
+ const vectorToCenter = helpers_lib_1.Vector.fromTo(
87
+ explosionCenter,
88
+ p2js_helper_1.P2JSHelper.arrayToVector(explosionHit.p2Body.position)
89
+ );
90
+ const fractionToCenter = vectorToCenter.length / radius;
91
+ const force = (severity * totalCountOfRays * fractionToCenter) / 2;
92
+ p2js_helper_1.P2JSHelper.pushBody(explosionHit.p2Body, explosionHit.getHitPosition(), vectorToCenter, force);
93
+ }
94
+ });
95
+ }
96
+ getTotalCountOfRays(radius) {
97
+ if (radius > 100) {
98
+ return Math.floor(radius * 0.3);
99
+ } else {
100
+ return Math.floor(radius * 0.26 + 4);
72
101
  }
73
- getTotalCountOfRays(radius) {
74
- if (radius > 100) {
75
- return Math.floor(radius * 0.3);
76
- }
77
- else {
78
- return Math.floor(radius * 0.26 + 4);
79
- }
80
- }
102
+ }
81
103
  };
82
104
  exports.ExplosionService = ExplosionService;
83
- exports.ExplosionService = ExplosionService = __decorate([
105
+ exports.ExplosionService = ExplosionService = __decorate(
106
+ [
84
107
  (0, game_entities_1.ServiceDecorator)(),
85
- __metadata("design:paramtypes", [ray_casting_service_1.RayCastingService, test_visuals_service_1.TestVisualsService])
86
- ], ExplosionService);
87
- //# sourceMappingURL=explosion.service.js.map
108
+ __metadata('design:paramtypes', [ray_casting_service_1.RayCastingService, test_visuals_service_1.TestVisualsService])
109
+ ],
110
+ ExplosionService
111
+ );
112
+ //# sourceMappingURL=explosion.service.js.map
@@ -1,9 +1,9 @@
1
1
  /// <reference types="p2" />
2
2
  import { ExplosionHit, RayCast } from '../../../⚜️gateways';
3
3
  export interface ExplosionHitWithP2Body extends ExplosionHit {
4
- p2Body: p2.Body;
4
+ p2Body: p2.Body;
5
5
  }
6
6
  export declare class RayCastHitConverter {
7
- static toExplosionHits(rayCasts: RayCast[], allRaysStartingFromSamePosition?: boolean): ExplosionHitWithP2Body[];
8
- private static convertRayResultGroupToExplosionHit;
7
+ static toExplosionHits(rayCasts: RayCast[], allRaysStartingFromSamePosition?: boolean): ExplosionHitWithP2Body[];
8
+ private static convertRayResultGroupToExplosionHit;
9
9
  }
@@ -1,73 +1,77 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
1
+ Object.defineProperty(exports, '__esModule', { value: true });
3
2
  exports.RayCastHitConverter = void 0;
4
- const helpers_lib_1 = require("helpers-lib");
5
- const physics_entity_1 = require("../../../../entity-types/physics-entity");
6
- const p2js_helper_1 = require("../../../../libs/p2js.helper");
3
+ const helpers_lib_1 = require('helpers-lib');
4
+ const physics_entity_1 = require('../../../../entity-types/physics-entity');
5
+ const p2js_helper_1 = require('../../../../libs/p2js.helper');
7
6
  class RayCastHitConverter {
8
- static toExplosionHits(rayCasts, allRaysStartingFromSamePosition = true) {
9
- let bodyToHitResults = new Map();
10
- rayCasts.forEach(rayCast => {
11
- rayCast.hits.forEach(rayCastHit => {
12
- let previousRecord = bodyToHitResults.get(rayCastHit.body);
13
- if (previousRecord) {
14
- let closestRaycastResult = rayCastHit.fraction < previousRecord.closestRaycastHit.fraction ? rayCastHit : previousRecord.closestRaycastHit;
15
- previousRecord.rayCastHits.push(rayCastHit);
16
- bodyToHitResults.set(rayCastHit.body, {
17
- hitCount: previousRecord.hitCount + 1,
18
- closestRaycastHit: closestRaycastResult,
19
- rayCastHits: previousRecord.rayCastHits,
20
- isExternal: allRaysStartingFromSamePosition
21
- ? previousRecord.isExternal
22
- : previousRecord.isExternal && rayCastHit.isExternal(),
23
- explosionCenter: rayCastHit.line.from
24
- });
25
- }
26
- else {
27
- let isExternal = rayCastHit.isExternal();
28
- bodyToHitResults.set(rayCastHit.body, {
29
- hitCount: 1,
30
- closestRaycastHit: rayCastHit,
31
- rayCastHits: [rayCastHit],
32
- isExternal,
33
- explosionCenter: rayCastHit.line.from
34
- });
35
- }
36
- });
37
- });
38
- return [...bodyToHitResults.values()].map(rayResultGroupOfABody => this.convertRayResultGroupToExplosionHit(rayResultGroupOfABody, rayCasts.length));
39
- }
40
- static convertRayResultGroupToExplosionHit(rayResultGroupOfABody, totalCountOfRays) {
41
- let ratioOfHits = rayResultGroupOfABody.hitCount / totalCountOfRays;
42
- let raycastResults = rayResultGroupOfABody.rayCastHits;
43
- if (rayResultGroupOfABody.isExternal) {
44
- return {
45
- body: physics_entity_1.PhysicsEntity.getFromP2BodyIdOrFail(rayResultGroupOfABody.closestRaycastHit.body.id).convertToDTO(),
46
- p2Body: rayResultGroupOfABody.closestRaycastHit.body,
47
- isExternal: true,
48
- normal: rayResultGroupOfABody.closestRaycastHit.normal,
49
- fraction: rayResultGroupOfABody.closestRaycastHit.fraction,
50
- ratioOfHits,
51
- raycastResults,
52
- getHitPosition: rayResultGroupOfABody.closestRaycastHit.hitPosition,
53
- getHitDistance: rayResultGroupOfABody.closestRaycastHit.hitDistance
54
- };
55
- }
56
- else {
57
- let bodyPosition = p2js_helper_1.P2JSHelper.arrayToVector(rayResultGroupOfABody.closestRaycastHit.body.position);
58
- return {
59
- body: physics_entity_1.PhysicsEntity.getFromP2BodyIdOrFail(rayResultGroupOfABody.closestRaycastHit.body.id).convertToDTO(),
60
- p2Body: rayResultGroupOfABody.closestRaycastHit.body,
61
- isExternal: false,
62
- normal: helpers_lib_1.Vector.fromTo(bodyPosition, rayResultGroupOfABody.explosionCenter).normalize(),
63
- fraction: 0,
64
- ratioOfHits,
65
- raycastResults,
66
- getHitPosition: () => rayResultGroupOfABody.explosionCenter,
67
- getHitDistance: () => 0
68
- };
7
+ static toExplosionHits(rayCasts, allRaysStartingFromSamePosition = true) {
8
+ const bodyToHitResults = new Map();
9
+ rayCasts.forEach(rayCast => {
10
+ rayCast.hits.forEach(rayCastHit => {
11
+ const previousRecord = bodyToHitResults.get(rayCastHit.body);
12
+ if (previousRecord) {
13
+ const closestRaycastResult =
14
+ rayCastHit.fraction < previousRecord.closestRaycastHit.fraction ? rayCastHit : previousRecord.closestRaycastHit;
15
+ previousRecord.rayCastHits.push(rayCastHit);
16
+ bodyToHitResults.set(rayCastHit.body, {
17
+ hitCount: previousRecord.hitCount + 1,
18
+ closestRaycastHit: closestRaycastResult,
19
+ rayCastHits: previousRecord.rayCastHits,
20
+ isExternal: allRaysStartingFromSamePosition
21
+ ? previousRecord.isExternal
22
+ : previousRecord.isExternal && rayCastHit.isExternal(),
23
+ explosionCenter: rayCastHit.line.from
24
+ });
25
+ } else {
26
+ const isExternal = rayCastHit.isExternal();
27
+ bodyToHitResults.set(rayCastHit.body, {
28
+ hitCount: 1,
29
+ closestRaycastHit: rayCastHit,
30
+ rayCastHits: [rayCastHit],
31
+ isExternal,
32
+ explosionCenter: rayCastHit.line.from
33
+ });
69
34
  }
35
+ });
36
+ });
37
+ return [...bodyToHitResults.values()].map(rayResultGroupOfABody =>
38
+ RayCastHitConverter.convertRayResultGroupToExplosionHit(rayResultGroupOfABody, rayCasts.length)
39
+ );
40
+ }
41
+ static convertRayResultGroupToExplosionHit(rayResultGroupOfABody, totalCountOfRays) {
42
+ const ratioOfHits = rayResultGroupOfABody.hitCount / totalCountOfRays;
43
+ const raycastResults = rayResultGroupOfABody.rayCastHits;
44
+ if (rayResultGroupOfABody.isExternal) {
45
+ return {
46
+ body: physics_entity_1.PhysicsEntity.getFromP2BodyIdOrFail(
47
+ rayResultGroupOfABody.closestRaycastHit.body.id
48
+ ).convertToDTO(),
49
+ p2Body: rayResultGroupOfABody.closestRaycastHit.body,
50
+ isExternal: true,
51
+ normal: rayResultGroupOfABody.closestRaycastHit.normal,
52
+ fraction: rayResultGroupOfABody.closestRaycastHit.fraction,
53
+ ratioOfHits,
54
+ raycastResults,
55
+ getHitPosition: rayResultGroupOfABody.closestRaycastHit.hitPosition,
56
+ getHitDistance: rayResultGroupOfABody.closestRaycastHit.hitDistance
57
+ };
58
+ } else {
59
+ const bodyPosition = p2js_helper_1.P2JSHelper.arrayToVector(rayResultGroupOfABody.closestRaycastHit.body.position);
60
+ return {
61
+ body: physics_entity_1.PhysicsEntity.getFromP2BodyIdOrFail(
62
+ rayResultGroupOfABody.closestRaycastHit.body.id
63
+ ).convertToDTO(),
64
+ p2Body: rayResultGroupOfABody.closestRaycastHit.body,
65
+ isExternal: false,
66
+ normal: helpers_lib_1.Vector.fromTo(bodyPosition, rayResultGroupOfABody.explosionCenter).normalize(),
67
+ fraction: 0,
68
+ ratioOfHits,
69
+ raycastResults,
70
+ getHitPosition: () => rayResultGroupOfABody.explosionCenter,
71
+ getHitDistance: () => 0
72
+ };
70
73
  }
74
+ }
71
75
  }
72
76
  exports.RayCastHitConverter = RayCastHitConverter;
73
- //# sourceMappingURL=ray-cast-hit-converter.js.map
77
+ //# sourceMappingURL=ray-cast-hit-converter.js.map
@@ -1,9 +1,9 @@
1
1
  /// <reference types="p2" />
2
2
  import { ExplosionHit, RayCast } from '../../⚜️gateways';
3
3
  export interface ExplosionHitWithP2Body extends ExplosionHit {
4
- p2Body: p2.Body;
4
+ p2Body: p2.Body;
5
5
  }
6
6
  export declare class RayCastHitConverter {
7
- static toExplosionHits(rayCasts: RayCast[], allRaysStartingFromSamePosition?: boolean): ExplosionHitWithP2Body[];
8
- private static convertRayResultGroupToExplosionHit;
7
+ static toExplosionHits(rayCasts: RayCast[], allRaysStartingFromSamePosition?: boolean): ExplosionHitWithP2Body[];
8
+ private static convertRayResultGroupToExplosionHit;
9
9
  }