bard-legends-framework 0.9.6 → 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 (238) 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.spec.js +490 -506
  30. package/dist/game-entities/view/view.test.js +1 -1
  31. package/dist/lib/animator/animations.d.ts +13 -13
  32. package/dist/lib/animator/animations.js +43 -40
  33. package/dist/lib/animator/animator.d.ts +41 -41
  34. package/dist/lib/animator/animator.js +194 -197
  35. package/dist/lib/animator/animator.spec.js +699 -612
  36. package/dist/lib/animator/index.js +24 -19
  37. package/dist/lib/libraries/animator/animations.d.ts +13 -13
  38. package/dist/lib/libraries/animator/animations.js +43 -40
  39. package/dist/lib/libraries/animator/animator.d.ts +41 -41
  40. package/dist/lib/libraries/animator/animator.js +194 -197
  41. package/dist/lib/libraries/animator/animator.spec.js +699 -612
  42. package/dist/lib/libraries/animator/index.js +24 -19
  43. package/dist/lib/libraries/path-finder/path-finder.d.ts +2 -2
  44. package/dist/lib/libraries/path-finder/path-finder.js +19 -20
  45. package/dist/lib/path-finder/path-finder.d.ts +2 -2
  46. package/dist/lib/path-finder/path-finder.js +19 -20
  47. package/dist/lib/services/keyboard/keyboard.d.ts +4 -4
  48. package/dist/lib/services/keyboard/keyboard.js +39 -31
  49. package/dist/lib/services/mouse/mouse.service.d.ts +8 -8
  50. package/dist/lib/services/mouse/mouse.service.js +65 -53
  51. package/dist/lib/services/mouse/mouser-target-focus.service.d.ts +11 -11
  52. package/dist/lib/services/mouse/mouser-target-focus.service.js +83 -81
  53. package/dist/lib/update-loop.d.ts +10 -10
  54. package/dist/lib/update-loop.js +35 -27
  55. package/dist/physics/entitity-types/immovable-physics-entity.d.ts +6 -6
  56. package/dist/physics/entitity-types/immovable-physics-entity.js +23 -24
  57. package/dist/physics/entitity-types/movable-entity.d.ts +6 -6
  58. package/dist/physics/entitity-types/movable-entity.js +21 -22
  59. package/dist/physics/entitity-types/movable-physics-entity.d.ts +14 -14
  60. package/dist/physics/entitity-types/movable-physics-entity.js +83 -88
  61. package/dist/physics/entitity-types/physics-entity.d.ts +23 -23
  62. package/dist/physics/entitity-types/physics-entity.js +97 -88
  63. package/dist/physics/helpers/closest-available-space.helper.d.ts +16 -16
  64. package/dist/physics/helpers/closest-available-space.helper.js +98 -96
  65. package/dist/physics/helpers/closest-available-space.helper.spec.js +115 -68
  66. package/dist/physics/helpers/p2js.helper.d.ts +3 -3
  67. package/dist/physics/helpers/p2js.helper.js +21 -22
  68. package/dist/physics/helpers/shape-factory.d.ts +9 -4
  69. package/dist/physics/helpers/shape-factory.js +99 -75
  70. package/dist/physics/libs/p2js.helper.js +1 -1
  71. package/dist/physics/libs/position-to-grid-position-converter.d.ts +3 -3
  72. package/dist/physics/libs/position-to-grid-position-converter.js +15 -13
  73. package/dist/physics/module//360/237/223/220services/availability-grid.service.d.ts +10 -5
  74. package/dist/physics/module//360/237/223/220services/availability-grid.service.js +77 -57
  75. package/dist/physics/module//360/237/223/220services/border.service.d.ts +2 -2
  76. package/dist/physics/module//360/237/223/220services/border.service.js +57 -37
  77. package/dist/physics/module//360/237/223/220services/collision/physics-body-group.service.js +1 -1
  78. package/dist/physics/module//360/237/223/220services/collisions.service.d.ts +7 -7
  79. package/dist/physics/module//360/237/223/220services/collisions.service.js +110 -98
  80. package/dist/physics/module//360/237/223/220services/debug-visuals.service.d.ts +28 -6
  81. package/dist/physics/module//360/237/223/220services/debug-visuals.service.js +121 -89
  82. package/dist/physics/module//360/237/223/220services/eliptic-explosion.service.d.ts +15 -7
  83. package/dist/physics/module//360/237/223/220services/eliptic-explosion.service.js +117 -93
  84. package/dist/physics/module//360/237/223/220services/explosion.service.d.ts +14 -7
  85. package/dist/physics/module//360/237/223/220services/explosion.service.js +102 -77
  86. package/dist/physics/module//360/237/223/220services/explosions/eliptic-explosion.service.d.ts +15 -7
  87. package/dist/physics/module//360/237/223/220services/explosions/eliptic-explosion.service.js +117 -93
  88. package/dist/physics/module//360/237/223/220services/explosions/explosion.service.d.ts +14 -7
  89. package/dist/physics/module//360/237/223/220services/explosions/explosion.service.js +102 -77
  90. package/dist/physics/module//360/237/223/220services/explosions/helpers/ray-cast-hit-converter.d.ts +3 -3
  91. package/dist/physics/module//360/237/223/220services/explosions/helpers/ray-cast-hit-converter.js +71 -67
  92. package/dist/physics/module//360/237/223/220services/helpers/ray-cast-hit-converter.d.ts +3 -3
  93. package/dist/physics/module//360/237/223/220services/helpers/ray-cast-hit-converter.js +71 -67
  94. package/dist/physics/module//360/237/223/220services/impact/eliptic-explosion.service.js +1 -1
  95. package/dist/physics/module//360/237/223/220services/materials.service.d.ts +16 -11
  96. package/dist/physics/module//360/237/223/220services/materials.service.js +118 -108
  97. package/dist/physics/module//360/237/223/220services/path-finder.service.d.ts +19 -8
  98. package/dist/physics/module//360/237/223/220services/path-finder.service.js +121 -82
  99. package/dist/physics/module//360/237/223/220services/physics-world.service.d.ts +30 -15
  100. package/dist/physics/module//360/237/223/220services/physics-world.service.js +122 -100
  101. package/dist/physics/module//360/237/223/220services/ray-casting.service.d.ts +3 -3
  102. package/dist/physics/module//360/237/223/220services/ray-casting.service.js +87 -86
  103. package/dist/physics/module//360/237/223/220services/shape-creation.service.d.ts +9 -4
  104. package/dist/physics/module//360/237/223/220services/shape-creation.service.js +113 -84
  105. package/dist/physics/module//360/237/223/220services/test-visuals/test-visuals.service.js +2 -1
  106. package/dist/physics/module//360/237/247/212entities/data-structures/availability-grid-cache.d.ts +8 -8
  107. package/dist/physics/module//360/237/247/212entities/data-structures/availability-grid-cache.js +32 -33
  108. package/dist/physics/physics-world.d.ts +50 -34
  109. package/dist/physics/physics-world.js +142 -133
  110. package/dist/physics/sub-elements/available-spaces/helpers/availability-grid.helper.d.ts +3 -3
  111. package/dist/physics/sub-elements/available-spaces/helpers/availability-grid.helper.js +15 -13
  112. package/dist/physics/sub-elements/available-spaces/physics-availability-grid.d.ts +9 -9
  113. package/dist/physics/sub-elements/available-spaces/physics-availability-grid.js +82 -77
  114. package/dist/physics/sub-elements/available-spaces/physics-available-spaces.d.ts +18 -14
  115. package/dist/physics/sub-elements/available-spaces/physics-available-spaces.js +91 -79
  116. package/dist/physics/sub-elements/collisions/contact-equation-orginiser.d.ts +11 -11
  117. package/dist/physics/sub-elements/collisions/contact-equation-orginiser.js +84 -76
  118. package/dist/physics/sub-elements/collisions/physics-collision.d.ts +7 -7
  119. package/dist/physics/sub-elements/collisions/physics-collision.js +43 -44
  120. package/dist/physics/sub-elements/elements/physics-body-groups.d.ts +11 -11
  121. package/dist/physics/sub-elements/elements/physics-body-groups.js +54 -54
  122. package/dist/physics/sub-elements/elements/physics-materials.d.ts +15 -10
  123. package/dist/physics/sub-elements/elements/physics-materials.js +101 -100
  124. package/dist/physics/sub-elements/elements/physics-world-borders.d.ts +3 -3
  125. package/dist/physics/sub-elements/elements/physics-world-borders.js +69 -45
  126. package/dist/physics/sub-elements/physics-body-groups.d.ts +8 -8
  127. package/dist/physics/sub-elements/physics-body-groups.js +41 -42
  128. package/dist/physics/sub-elements/physics-collision.d.ts +16 -16
  129. package/dist/physics/sub-elements/physics-collision.js +141 -121
  130. package/dist/physics/sub-elements/physics-materials.d.ts +15 -10
  131. package/dist/physics/sub-elements/physics-materials.js +101 -100
  132. package/dist/physics/sub-elements/physics-world-borders.d.ts +2 -2
  133. package/dist/physics/sub-elements/physics-world-borders.js +25 -26
  134. package/dist/physics/sub-elements/raycasting/physics-body-explosion-hit.d.ts +15 -11
  135. package/dist/physics/sub-elements/raycasting/physics-body-explosion-hit.js +59 -59
  136. package/dist/physics/sub-elements/raycasting/physics-explosion.d.ts +13 -6
  137. package/dist/physics/sub-elements/raycasting/physics-explosion.js +108 -73
  138. package/dist/physics/sub-elements/raycasting/ray-cast.d.ts +19 -19
  139. package/dist/physics/sub-elements/raycasting/ray-cast.js +93 -98
  140. package/dist/pixi/display-object/components/filters.d.ts +18 -18
  141. package/dist/pixi/display-object/components/filters.js +106 -81
  142. package/dist/pixi/display-object/components/glow-effect.d.ts +8 -8
  143. package/dist/pixi/display-object/components/glow-effect.js +33 -36
  144. package/dist/pixi/display-object/components/glow-filter.d.ts +8 -8
  145. package/dist/pixi/display-object/components/glow-filter.js +33 -36
  146. package/dist/pixi/display-object/container-attributes.js +1 -1
  147. package/dist/pixi/display-object/display-object-attributes.d.ts +41 -41
  148. package/dist/pixi/display-object/display-object-attributes.js +148 -150
  149. package/dist/pixi/display-object/display-object.d.ts +17 -17
  150. package/dist/pixi/display-object/display-object.js +79 -75
  151. package/dist/pixi/display-object/filters/base-filters/alpha-primer-color.filter.d.ts +9 -4
  152. package/dist/pixi/display-object/filters/base-filters/alpha-primer-color.filter.js +89 -77
  153. package/dist/pixi/display-object/filters/base-filters/blur.filter.js +30 -30
  154. package/dist/pixi/display-object/filters/base-filters/contrast-filter.d.ts +9 -4
  155. package/dist/pixi/display-object/filters/base-filters/contrast-filter.js +62 -53
  156. package/dist/pixi/display-object/filters/base-filters/expand-with-alpha-color.d.ts +10 -5
  157. package/dist/pixi/display-object/filters/base-filters/expand-with-alpha-color.js +93 -81
  158. package/dist/pixi/display-object/filters/base-filters/expand-with-color-gradient.d.ts +12 -7
  159. package/dist/pixi/display-object/filters/base-filters/expand-with-color-gradient.js +120 -109
  160. package/dist/pixi/display-object/filters/base-filters/expand-with-color.d.ts +10 -5
  161. package/dist/pixi/display-object/filters/base-filters/expand-with-color.filter.js +32 -32
  162. package/dist/pixi/display-object/filters/base-filters/expand-with-color.js +92 -85
  163. package/dist/pixi/display-object/filters/templates/checking-neighbors.template.js +28 -28
  164. package/dist/pixi/display-object/filters/templates/plane.template.js +20 -20
  165. package/dist/pixi/display-object/filters.js +20 -4
  166. package/dist/pixi/display-object/objects/components/filters.d.ts +18 -18
  167. package/dist/pixi/display-object/objects/components/filters.js +106 -81
  168. package/dist/pixi/display-object/objects/container.d.ts +2 -2
  169. package/dist/pixi/display-object/objects/container.js +39 -30
  170. package/dist/pixi/display-object/objects/graphics.d.ts +28 -28
  171. package/dist/pixi/display-object/objects/graphics.js +218 -202
  172. package/dist/pixi/display-object/objects/helpers/filters.d.ts +25 -25
  173. package/dist/pixi/display-object/objects/helpers/filters.js +150 -124
  174. package/dist/pixi/display-object/objects/helpers/glow-sprite-generator.d.ts +7 -7
  175. package/dist/pixi/display-object/objects/helpers/glow-sprite-generator.js +114 -95
  176. package/dist/pixi/display-object/objects/premade-objects/sprite-with-glowing-shapes.d.ts +5 -5
  177. package/dist/pixi/display-object/objects/premade-objects/sprite-with-glowing-shapes.js +81 -57
  178. package/dist/pixi/display-object/objects/sprite.d.ts +43 -43
  179. package/dist/pixi/display-object/objects/sprite.js +248 -233
  180. package/dist/pixi/display-object/objects/text/helpers/process-steps/1-data-in-converter/rich-text-data-in-converter.js +1 -1
  181. package/dist/pixi/display-object/objects/text/helpers/process-steps/1-data-in-converter/rich-text-data-in-converter.test.js +9 -9
  182. package/dist/pixi/display-object/objects/text/helpers/rich-text-to-plane-text.d.ts +1 -1
  183. package/dist/pixi/display-object/objects/text.d.ts +25 -25
  184. package/dist/pixi/display-object/objects/text.js +111 -102
  185. package/dist/pixi/display-object/premade-objects/sprite-with-glowing-shapes.d.ts +13 -9
  186. package/dist/pixi/display-object/premade-objects/sprite-with-glowing-shapes.js +96 -67
  187. package/dist/pixi/game.d.ts +1 -1
  188. package/dist/pixi/game.js +2 -2
  189. package/dist/pixi/helpers/glow-sprite-generator.d.ts +6 -6
  190. package/dist/pixi/helpers/glow-sprite-generator.js +99 -84
  191. package/dist/pixi/helpers/pixi-container.helper.d.ts +1 -1
  192. package/dist/pixi/helpers/pixi-container.helper.js +10 -8
  193. package/dist/pixi/helpers/screen-position-to-stage.helper.d.ts +1 -1
  194. package/dist/pixi/helpers/screen-position-to-stage.helper.js +12 -12
  195. package/dist/pixi/helpers/screen-position-to-stage.helper.test.js +174 -79
  196. package/dist/pixi/modules/CAMERA/index.d.ts +1 -1
  197. package/dist/pixi/modules/CAMERA/index.js +3 -3
  198. package/dist/services/keyboard/keyboard.d.ts +4 -4
  199. package/dist/services/keyboard/keyboard.js +39 -31
  200. package/dist/services/mouse/mouse.service.d.ts +8 -8
  201. package/dist/services/mouse/mouse.service.js +65 -53
  202. package/dist/services/mouse/mouser-target-focus.service.d.ts +11 -11
  203. package/dist/services/mouse/mouser-target-focus.service.js +83 -81
  204. package/dist/utilities/libraries/animator/animating-content/state-animation.d.ts +29 -26
  205. package/dist/utilities/libraries/animator/animating-content/state-animation.js +159 -165
  206. package/dist/utilities/libraries/animator/animating-content/state-animation.test.js +386 -375
  207. package/dist/utilities/libraries/animator/animator.spec.js +765 -656
  208. package/dist/utilities/libraries/binary-heap/binary-heap.d.ts +11 -11
  209. package/dist/utilities/libraries/binary-heap/binary-heap.js +79 -81
  210. package/dist/utilities/libraries/data-structures/binary-heap/binary-heap.d.ts +11 -11
  211. package/dist/utilities/libraries/data-structures/binary-heap/binary-heap.js +79 -81
  212. package/dist/utilities/libraries/data-structures/grid/grid.d.ts +35 -31
  213. package/dist/utilities/libraries/data-structures/grid/grid.js +128 -117
  214. package/dist/utilities/libraries/data-structures/grid/grid.spec.js +176 -138
  215. package/dist/utilities/libraries/data-structures/grid/grid.test.js +218 -141
  216. package/dist/utilities/libraries/data-structures/grid/position-to-grid-position-converter.d.ts +3 -3
  217. package/dist/utilities/libraries/data-structures/grid/position-to-grid-position-converter.js +15 -13
  218. package/dist/utilities/libraries/data-structures/queue/queue.d.ts +21 -21
  219. package/dist/utilities/libraries/data-structures/queue/queue.js +63 -66
  220. package/dist/utilities/libraries/data-structures/queue/queue.test.js +54 -55
  221. package/dist/utilities/libraries/grid-algorithms/closest-available-space/closest-available-space.helper.spec.js +122 -68
  222. package/dist/utilities/libraries/grid-algorithms/path-finder/path-finder.spec.js +140 -135
  223. package/dist/utilities/libraries/grid-algorithms/vector-field-path-finder/vector-field-path-finder.spec.js +293 -229
  224. package/dist/utilities/libraries/path-finder/path-finder.d.ts +7 -7
  225. package/dist/utilities/libraries/path-finder/path-finder.js +113 -109
  226. package/dist/utilities/libraries/path-finder/path-finder.spec.js +131 -106
  227. package/dist/utilities/services/keyboard/keyboard.d.ts +4 -4
  228. package/dist/utilities/services/keyboard/keyboard.js +42 -34
  229. package/dist/utilities/services/mouse/helpers/mouse-position.helper.d.ts +1 -1
  230. package/dist/utilities/services/mouse/helpers/mouse-position.helper.js +12 -12
  231. package/dist/utilities/services/mouse/helpers/mouse-position.helper.test.js +168 -73
  232. package/dist/utilities/services/mouse/mouse-target-focus.service.d.ts +15 -15
  233. package/dist/utilities/services/mouse/mouse-target-focus.service.js +79 -76
  234. package/dist/utilities/services/mouse/mouse.service.d.ts +9 -9
  235. package/dist/utilities/services/mouse/mouse.service.js +86 -72
  236. package/dist/utilities/services/mouse/mouser-target-focus.service.d.ts +11 -11
  237. package/dist/utilities/services/mouse/mouser-target-focus.service.js +83 -81
  238. package/package.json +4 -10
@@ -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
  }