bard-legends-framework 0.9.6 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (241) 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.d.ts +4 -1
  21. package/dist/game-entities/entity/entity.js +5 -5
  22. package/dist/game-entities/entity/entity.spec.js +263 -293
  23. package/dist/game-entities/entity/helpers/view-creation.helper.d.ts +7 -7
  24. package/dist/game-entities/entity/helpers/view-creation.helper.js +48 -48
  25. package/dist/game-entities/scene/scene.spec.js +219 -223
  26. package/dist/game-entities/service/service.js +0 -4
  27. package/dist/game-entities/service/service.spec.js +265 -237
  28. package/dist/game-entities/service/service.test.js +4 -2
  29. package/dist/game-entities/update-loop.d.ts +18 -18
  30. package/dist/game-entities/update-loop.js +46 -28
  31. package/dist/game-entities/view/view.spec.js +490 -506
  32. package/dist/game-entities/view/view.test.js +1 -1
  33. package/dist/lib/animator/animations.d.ts +13 -13
  34. package/dist/lib/animator/animations.js +43 -40
  35. package/dist/lib/animator/animator.d.ts +41 -41
  36. package/dist/lib/animator/animator.js +194 -197
  37. package/dist/lib/animator/animator.spec.js +699 -612
  38. package/dist/lib/animator/index.js +24 -19
  39. package/dist/lib/libraries/animator/animations.d.ts +13 -13
  40. package/dist/lib/libraries/animator/animations.js +43 -40
  41. package/dist/lib/libraries/animator/animator.d.ts +41 -41
  42. package/dist/lib/libraries/animator/animator.js +194 -197
  43. package/dist/lib/libraries/animator/animator.spec.js +699 -612
  44. package/dist/lib/libraries/animator/index.js +24 -19
  45. package/dist/lib/libraries/path-finder/path-finder.d.ts +2 -2
  46. package/dist/lib/libraries/path-finder/path-finder.js +19 -20
  47. package/dist/lib/path-finder/path-finder.d.ts +2 -2
  48. package/dist/lib/path-finder/path-finder.js +19 -20
  49. package/dist/lib/services/keyboard/keyboard.d.ts +4 -4
  50. package/dist/lib/services/keyboard/keyboard.js +39 -31
  51. package/dist/lib/services/mouse/mouse.service.d.ts +8 -8
  52. package/dist/lib/services/mouse/mouse.service.js +65 -53
  53. package/dist/lib/services/mouse/mouser-target-focus.service.d.ts +11 -11
  54. package/dist/lib/services/mouse/mouser-target-focus.service.js +83 -81
  55. package/dist/lib/update-loop.d.ts +10 -10
  56. package/dist/lib/update-loop.js +35 -27
  57. package/dist/physics/entitity-types/immovable-physics-entity.d.ts +6 -6
  58. package/dist/physics/entitity-types/immovable-physics-entity.js +23 -24
  59. package/dist/physics/entitity-types/movable-entity.d.ts +6 -6
  60. package/dist/physics/entitity-types/movable-entity.js +21 -22
  61. package/dist/physics/entitity-types/movable-physics-entity.d.ts +14 -14
  62. package/dist/physics/entitity-types/movable-physics-entity.js +83 -88
  63. package/dist/physics/entitity-types/physics-entity.d.ts +23 -23
  64. package/dist/physics/entitity-types/physics-entity.js +97 -88
  65. package/dist/physics/helpers/closest-available-space.helper.d.ts +16 -16
  66. package/dist/physics/helpers/closest-available-space.helper.js +98 -96
  67. package/dist/physics/helpers/closest-available-space.helper.spec.js +115 -68
  68. package/dist/physics/helpers/p2js.helper.d.ts +3 -3
  69. package/dist/physics/helpers/p2js.helper.js +21 -22
  70. package/dist/physics/helpers/shape-factory.d.ts +9 -4
  71. package/dist/physics/helpers/shape-factory.js +99 -75
  72. package/dist/physics/libs/p2js.helper.js +1 -1
  73. package/dist/physics/libs/position-to-grid-position-converter.d.ts +3 -3
  74. package/dist/physics/libs/position-to-grid-position-converter.js +15 -13
  75. package/dist/physics/module//360/237/223/220services/availability-grid.service.d.ts +10 -5
  76. package/dist/physics/module//360/237/223/220services/availability-grid.service.js +77 -57
  77. package/dist/physics/module//360/237/223/220services/border.service.d.ts +2 -2
  78. package/dist/physics/module//360/237/223/220services/border.service.js +57 -37
  79. package/dist/physics/module//360/237/223/220services/collision/physics-body-group.service.js +1 -1
  80. package/dist/physics/module//360/237/223/220services/collisions.service.d.ts +7 -7
  81. package/dist/physics/module//360/237/223/220services/collisions.service.js +110 -98
  82. package/dist/physics/module//360/237/223/220services/debug-visuals.service.d.ts +28 -6
  83. package/dist/physics/module//360/237/223/220services/debug-visuals.service.js +121 -89
  84. package/dist/physics/module//360/237/223/220services/eliptic-explosion.service.d.ts +15 -7
  85. package/dist/physics/module//360/237/223/220services/eliptic-explosion.service.js +117 -93
  86. package/dist/physics/module//360/237/223/220services/explosion.service.d.ts +14 -7
  87. package/dist/physics/module//360/237/223/220services/explosion.service.js +102 -77
  88. package/dist/physics/module//360/237/223/220services/explosions/eliptic-explosion.service.d.ts +15 -7
  89. package/dist/physics/module//360/237/223/220services/explosions/eliptic-explosion.service.js +117 -93
  90. package/dist/physics/module//360/237/223/220services/explosions/explosion.service.d.ts +14 -7
  91. package/dist/physics/module//360/237/223/220services/explosions/explosion.service.js +102 -77
  92. package/dist/physics/module//360/237/223/220services/explosions/helpers/ray-cast-hit-converter.d.ts +3 -3
  93. package/dist/physics/module//360/237/223/220services/explosions/helpers/ray-cast-hit-converter.js +71 -67
  94. package/dist/physics/module//360/237/223/220services/helpers/ray-cast-hit-converter.d.ts +3 -3
  95. package/dist/physics/module//360/237/223/220services/helpers/ray-cast-hit-converter.js +71 -67
  96. package/dist/physics/module//360/237/223/220services/impact/eliptic-explosion.service.js +1 -1
  97. package/dist/physics/module//360/237/223/220services/materials.service.d.ts +16 -11
  98. package/dist/physics/module//360/237/223/220services/materials.service.js +118 -108
  99. package/dist/physics/module//360/237/223/220services/path-finder.service.d.ts +19 -8
  100. package/dist/physics/module//360/237/223/220services/path-finder.service.js +121 -82
  101. package/dist/physics/module//360/237/223/220services/physics-world.service.d.ts +30 -15
  102. package/dist/physics/module//360/237/223/220services/physics-world.service.js +122 -100
  103. package/dist/physics/module//360/237/223/220services/ray-casting.service.d.ts +3 -3
  104. package/dist/physics/module//360/237/223/220services/ray-casting.service.js +87 -86
  105. package/dist/physics/module//360/237/223/220services/shape-creation.service.d.ts +9 -4
  106. package/dist/physics/module//360/237/223/220services/shape-creation.service.js +113 -84
  107. package/dist/physics/module//360/237/223/220services/test-visuals/test-visuals.service.js +2 -1
  108. package/dist/physics/module//360/237/247/212entities/data-structures/availability-grid-cache.d.ts +8 -8
  109. package/dist/physics/module//360/237/247/212entities/data-structures/availability-grid-cache.js +32 -33
  110. package/dist/physics/physics-world.d.ts +50 -34
  111. package/dist/physics/physics-world.js +142 -133
  112. package/dist/physics/sub-elements/available-spaces/helpers/availability-grid.helper.d.ts +3 -3
  113. package/dist/physics/sub-elements/available-spaces/helpers/availability-grid.helper.js +15 -13
  114. package/dist/physics/sub-elements/available-spaces/physics-availability-grid.d.ts +9 -9
  115. package/dist/physics/sub-elements/available-spaces/physics-availability-grid.js +82 -77
  116. package/dist/physics/sub-elements/available-spaces/physics-available-spaces.d.ts +18 -14
  117. package/dist/physics/sub-elements/available-spaces/physics-available-spaces.js +91 -79
  118. package/dist/physics/sub-elements/collisions/contact-equation-orginiser.d.ts +11 -11
  119. package/dist/physics/sub-elements/collisions/contact-equation-orginiser.js +84 -76
  120. package/dist/physics/sub-elements/collisions/physics-collision.d.ts +7 -7
  121. package/dist/physics/sub-elements/collisions/physics-collision.js +43 -44
  122. package/dist/physics/sub-elements/elements/physics-body-groups.d.ts +11 -11
  123. package/dist/physics/sub-elements/elements/physics-body-groups.js +54 -54
  124. package/dist/physics/sub-elements/elements/physics-materials.d.ts +15 -10
  125. package/dist/physics/sub-elements/elements/physics-materials.js +101 -100
  126. package/dist/physics/sub-elements/elements/physics-world-borders.d.ts +3 -3
  127. package/dist/physics/sub-elements/elements/physics-world-borders.js +69 -45
  128. package/dist/physics/sub-elements/physics-body-groups.d.ts +8 -8
  129. package/dist/physics/sub-elements/physics-body-groups.js +41 -42
  130. package/dist/physics/sub-elements/physics-collision.d.ts +16 -16
  131. package/dist/physics/sub-elements/physics-collision.js +141 -121
  132. package/dist/physics/sub-elements/physics-materials.d.ts +15 -10
  133. package/dist/physics/sub-elements/physics-materials.js +101 -100
  134. package/dist/physics/sub-elements/physics-world-borders.d.ts +2 -2
  135. package/dist/physics/sub-elements/physics-world-borders.js +25 -26
  136. package/dist/physics/sub-elements/raycasting/physics-body-explosion-hit.d.ts +15 -11
  137. package/dist/physics/sub-elements/raycasting/physics-body-explosion-hit.js +59 -59
  138. package/dist/physics/sub-elements/raycasting/physics-explosion.d.ts +13 -6
  139. package/dist/physics/sub-elements/raycasting/physics-explosion.js +108 -73
  140. package/dist/physics/sub-elements/raycasting/ray-cast.d.ts +19 -19
  141. package/dist/physics/sub-elements/raycasting/ray-cast.js +93 -98
  142. package/dist/pixi/display-object/components/filters.d.ts +18 -18
  143. package/dist/pixi/display-object/components/filters.js +106 -81
  144. package/dist/pixi/display-object/components/glow-effect.d.ts +8 -8
  145. package/dist/pixi/display-object/components/glow-effect.js +33 -36
  146. package/dist/pixi/display-object/components/glow-filter.d.ts +8 -8
  147. package/dist/pixi/display-object/components/glow-filter.js +33 -36
  148. package/dist/pixi/display-object/container-attributes.js +1 -1
  149. package/dist/pixi/display-object/display-object-attributes.d.ts +41 -41
  150. package/dist/pixi/display-object/display-object-attributes.js +148 -150
  151. package/dist/pixi/display-object/display-object.d.ts +17 -17
  152. package/dist/pixi/display-object/display-object.js +79 -75
  153. package/dist/pixi/display-object/filters/base-filters/alpha-primer-color.filter.d.ts +9 -4
  154. package/dist/pixi/display-object/filters/base-filters/alpha-primer-color.filter.js +89 -77
  155. package/dist/pixi/display-object/filters/base-filters/blur.filter.js +30 -30
  156. package/dist/pixi/display-object/filters/base-filters/contrast-filter.d.ts +9 -4
  157. package/dist/pixi/display-object/filters/base-filters/contrast-filter.js +62 -53
  158. package/dist/pixi/display-object/filters/base-filters/expand-with-alpha-color.d.ts +10 -5
  159. package/dist/pixi/display-object/filters/base-filters/expand-with-alpha-color.js +93 -81
  160. package/dist/pixi/display-object/filters/base-filters/expand-with-color-gradient.d.ts +12 -7
  161. package/dist/pixi/display-object/filters/base-filters/expand-with-color-gradient.js +120 -109
  162. package/dist/pixi/display-object/filters/base-filters/expand-with-color.d.ts +10 -5
  163. package/dist/pixi/display-object/filters/base-filters/expand-with-color.filter.js +32 -32
  164. package/dist/pixi/display-object/filters/base-filters/expand-with-color.js +92 -85
  165. package/dist/pixi/display-object/filters/templates/checking-neighbors.template.js +28 -28
  166. package/dist/pixi/display-object/filters/templates/plane.template.js +20 -20
  167. package/dist/pixi/display-object/filters.js +20 -4
  168. package/dist/pixi/display-object/objects/components/filters.d.ts +18 -18
  169. package/dist/pixi/display-object/objects/components/filters.js +106 -81
  170. package/dist/pixi/display-object/objects/container.d.ts +2 -2
  171. package/dist/pixi/display-object/objects/container.js +39 -30
  172. package/dist/pixi/display-object/objects/graphics.d.ts +28 -28
  173. package/dist/pixi/display-object/objects/graphics.js +218 -202
  174. package/dist/pixi/display-object/objects/helpers/filters.d.ts +25 -25
  175. package/dist/pixi/display-object/objects/helpers/filters.js +150 -124
  176. package/dist/pixi/display-object/objects/helpers/glow-sprite-generator.d.ts +7 -7
  177. package/dist/pixi/display-object/objects/helpers/glow-sprite-generator.js +114 -95
  178. package/dist/pixi/display-object/objects/premade-objects/sprite-with-glowing-shapes.d.ts +5 -5
  179. package/dist/pixi/display-object/objects/premade-objects/sprite-with-glowing-shapes.js +81 -57
  180. package/dist/pixi/display-object/objects/sprite.d.ts +43 -43
  181. package/dist/pixi/display-object/objects/sprite.js +248 -233
  182. package/dist/pixi/display-object/objects/text/helpers/process-steps/1-data-in-converter/rich-text-data-in-converter.js +1 -1
  183. package/dist/pixi/display-object/objects/text/helpers/process-steps/1-data-in-converter/rich-text-data-in-converter.test.js +9 -9
  184. package/dist/pixi/display-object/objects/text/helpers/rich-text-to-plane-text.d.ts +1 -1
  185. package/dist/pixi/display-object/objects/text.d.ts +25 -25
  186. package/dist/pixi/display-object/objects/text.js +111 -102
  187. package/dist/pixi/display-object/premade-objects/sprite-with-glowing-shapes.d.ts +13 -9
  188. package/dist/pixi/display-object/premade-objects/sprite-with-glowing-shapes.js +96 -67
  189. package/dist/pixi/game.d.ts +1 -1
  190. package/dist/pixi/game.js +2 -2
  191. package/dist/pixi/helpers/glow-sprite-generator.d.ts +6 -6
  192. package/dist/pixi/helpers/glow-sprite-generator.js +99 -84
  193. package/dist/pixi/helpers/pixi-container.helper.d.ts +1 -1
  194. package/dist/pixi/helpers/pixi-container.helper.js +10 -8
  195. package/dist/pixi/helpers/screen-position-to-stage.helper.d.ts +1 -1
  196. package/dist/pixi/helpers/screen-position-to-stage.helper.js +12 -12
  197. package/dist/pixi/helpers/screen-position-to-stage.helper.test.js +174 -79
  198. package/dist/pixi/modules/CAMERA/index.d.ts +1 -1
  199. package/dist/pixi/modules/CAMERA/index.js +3 -3
  200. package/dist/pixi/modules/CAMERA//360/237/247/212entities/camera.entity.js +1 -1
  201. package/dist/services/keyboard/keyboard.d.ts +4 -4
  202. package/dist/services/keyboard/keyboard.js +39 -31
  203. package/dist/services/mouse/mouse.service.d.ts +8 -8
  204. package/dist/services/mouse/mouse.service.js +65 -53
  205. package/dist/services/mouse/mouser-target-focus.service.d.ts +11 -11
  206. package/dist/services/mouse/mouser-target-focus.service.js +83 -81
  207. package/dist/utilities/libraries/animator/animating-content/state-animation.d.ts +29 -26
  208. package/dist/utilities/libraries/animator/animating-content/state-animation.js +159 -165
  209. package/dist/utilities/libraries/animator/animating-content/state-animation.test.js +386 -375
  210. package/dist/utilities/libraries/animator/animator.spec.js +765 -656
  211. package/dist/utilities/libraries/binary-heap/binary-heap.d.ts +11 -11
  212. package/dist/utilities/libraries/binary-heap/binary-heap.js +79 -81
  213. package/dist/utilities/libraries/data-structures/binary-heap/binary-heap.d.ts +11 -11
  214. package/dist/utilities/libraries/data-structures/binary-heap/binary-heap.js +79 -81
  215. package/dist/utilities/libraries/data-structures/grid/grid.d.ts +35 -31
  216. package/dist/utilities/libraries/data-structures/grid/grid.js +128 -117
  217. package/dist/utilities/libraries/data-structures/grid/grid.spec.js +176 -138
  218. package/dist/utilities/libraries/data-structures/grid/grid.test.js +218 -141
  219. package/dist/utilities/libraries/data-structures/grid/position-to-grid-position-converter.d.ts +3 -3
  220. package/dist/utilities/libraries/data-structures/grid/position-to-grid-position-converter.js +15 -13
  221. package/dist/utilities/libraries/data-structures/queue/queue.d.ts +21 -21
  222. package/dist/utilities/libraries/data-structures/queue/queue.js +63 -66
  223. package/dist/utilities/libraries/data-structures/queue/queue.test.js +54 -55
  224. package/dist/utilities/libraries/grid-algorithms/closest-available-space/closest-available-space.helper.spec.js +122 -68
  225. package/dist/utilities/libraries/grid-algorithms/path-finder/path-finder.spec.js +140 -135
  226. package/dist/utilities/libraries/grid-algorithms/vector-field-path-finder/vector-field-path-finder.spec.js +293 -229
  227. package/dist/utilities/libraries/path-finder/path-finder.d.ts +7 -7
  228. package/dist/utilities/libraries/path-finder/path-finder.js +113 -109
  229. package/dist/utilities/libraries/path-finder/path-finder.spec.js +131 -106
  230. package/dist/utilities/services/keyboard/keyboard.d.ts +4 -4
  231. package/dist/utilities/services/keyboard/keyboard.js +42 -34
  232. package/dist/utilities/services/mouse/helpers/mouse-position.helper.d.ts +1 -1
  233. package/dist/utilities/services/mouse/helpers/mouse-position.helper.js +12 -12
  234. package/dist/utilities/services/mouse/helpers/mouse-position.helper.test.js +168 -73
  235. package/dist/utilities/services/mouse/mouse-target-focus.service.d.ts +15 -15
  236. package/dist/utilities/services/mouse/mouse-target-focus.service.js +79 -76
  237. package/dist/utilities/services/mouse/mouse.service.d.ts +9 -9
  238. package/dist/utilities/services/mouse/mouse.service.js +86 -72
  239. package/dist/utilities/services/mouse/mouser-target-focus.service.d.ts +11 -11
  240. package/dist/utilities/services/mouse/mouser-target-focus.service.js +83 -81
  241. package/package.json +8 -13
@@ -1,232 +1,296 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const vitest_1 = require("vitest");
4
- const helpers_lib_1 = require("helpers-lib");
5
- const grid_1 = require("../../data-structures/grid/grid");
6
- const vector_field_path_finder_1 = require("./vector-field-path-finder");
1
+ Object.defineProperty(exports, '__esModule', { value: true });
2
+ const vitest_1 = require('vitest');
3
+ const helpers_lib_1 = require('helpers-lib');
4
+ const grid_1 = require('../../data-structures/grid/grid');
5
+ const vector_field_path_finder_1 = require('./vector-field-path-finder');
7
6
  (0, vitest_1.describe)('VectorFieldPathFinder', () => {
8
- (0, vitest_1.describe)('weight grid', () => {
9
- (0, vitest_1.test)('basic 1', () => {
10
- let targetArea = { topLeft: { x: 0, y: 0 }, bottomRight: { x: 0, y: 0 } };
11
- let availabilityGrid = grid_1.Grid.createNew({ x: 1, y: 1 }, true);
12
- let pathFinder = new vector_field_path_finder_1.VectorFieldPathFinder(targetArea, availabilityGrid);
13
- (0, vitest_1.expect)(pathFinder['weightGrid'].get({ x: 0, y: 0 })).toBe(0);
14
- });
15
- (0, vitest_1.test)('basic 2', () => {
16
- let targetArea = { topLeft: { x: 0, y: 0 }, bottomRight: { x: 1, y: 1 } };
17
- let availabilityGrid = grid_1.Grid.createByValues([
18
- [true, true],
19
- [true, true]
20
- ]);
21
- let pathFinder = new vector_field_path_finder_1.VectorFieldPathFinder(targetArea, availabilityGrid);
22
- (0, vitest_1.expect)(pathFinder['weightGrid'].get({ x: 0, y: 0 })).toBe(0);
23
- (0, vitest_1.expect)(pathFinder['weightGrid'].get({ x: 1, y: 0 })).toBe(0);
24
- (0, vitest_1.expect)(pathFinder['weightGrid'].get({ x: 0, y: 1 })).toBe(0);
25
- (0, vitest_1.expect)(pathFinder['weightGrid'].get({ x: 1, y: 1 })).toBe(0);
26
- });
27
- (0, vitest_1.test)('sample 1', () => {
28
- let targetArea = { topLeft: { x: 0, y: 0 }, bottomRight: { x: 0, y: 0 } };
29
- let availabilityGrid = grid_1.Grid.createByValues([
30
- [true, true],
31
- [true, true]
32
- ]);
33
- let pathFinder = new vector_field_path_finder_1.VectorFieldPathFinder(targetArea, availabilityGrid);
34
- (0, vitest_1.expect)(pathFinder['weightGrid'].get({ x: 0, y: 0 })).toBe(0);
35
- (0, vitest_1.expect)(pathFinder['weightGrid'].get({ x: 1, y: 0 })).toBe(10);
36
- (0, vitest_1.expect)(pathFinder['weightGrid'].get({ x: 0, y: 1 })).toBe(10);
37
- (0, vitest_1.expect)(pathFinder['weightGrid'].get({ x: 1, y: 1 })).toBe(14);
38
- });
39
- (0, vitest_1.test)('sample 2', () => {
40
- let targetArea = { topLeft: { x: 0, y: 0 }, bottomRight: { x: 1, y: 1 } };
41
- let availabilityGrid = grid_1.Grid.createNew({ x: 3, y: 3 }, true);
42
- let pathFinder = new vector_field_path_finder_1.VectorFieldPathFinder(targetArea, availabilityGrid);
43
- (0, vitest_1.expect)(pathFinder['weightGrid']['_grid']).toEqual([
44
- [0, 0, 10],
45
- [0, 0, 10],
46
- [10, 10, 14]
47
- ]);
48
- });
49
- (0, vitest_1.test)('sample 3', () => {
50
- let targetArea = { topLeft: { x: 1, y: 1 }, bottomRight: { x: 2, y: 2 } };
51
- let availabilityGrid = grid_1.Grid.createNew({ x: 3, y: 3 }, true);
52
- let pathFinder = new vector_field_path_finder_1.VectorFieldPathFinder(targetArea, availabilityGrid);
53
- (0, vitest_1.expect)(pathFinder['weightGrid']['_grid']).toEqual([
54
- [14, 10, 10],
55
- [10, 0, 0],
56
- [10, 0, 0]
57
- ]);
58
- });
59
- (0, vitest_1.test)('complex 1', () => {
60
- let targetArea = { topLeft: { x: 0, y: 0 }, bottomRight: { x: 0, y: 0 } };
61
- let availabilityGrid = grid_1.Grid.createByValues([
62
- [true, false, true],
63
- [true, true, true],
64
- [false, false, true],
65
- [false, false, true]
66
- ]);
67
- let pathFinder = new vector_field_path_finder_1.VectorFieldPathFinder(targetArea, availabilityGrid);
68
- let h = pathFinder['getHighestWeight'](availabilityGrid.size);
69
- (0, vitest_1.expect)(pathFinder['weightGrid']['_grid']).toEqual([
70
- [0, h, 28],
71
- [10, 14, 24],
72
- [h, h, 28],
73
- [h, h, 38]
74
- ]);
75
- });
76
- (0, vitest_1.test)('complex 2', () => {
77
- let targetArea = { topLeft: { x: 0, y: 0 }, bottomRight: { x: 1, y: 1 } };
78
- let availabilityGrid = grid_1.Grid.createByValues([
79
- [true, true, false, true],
80
- [true, true, false, true],
81
- [false, false, true, true]
82
- ]);
83
- let pathFinder = new vector_field_path_finder_1.VectorFieldPathFinder(targetArea, availabilityGrid);
84
- let h = pathFinder['getHighestWeight'](availabilityGrid.size);
85
- (0, vitest_1.expect)(pathFinder['weightGrid']['_grid']).toEqual([
86
- [0, 0, h, 38],
87
- [0, 0, h, 28],
88
- [h, h, 14, 24]
89
- ]);
90
- });
91
- (0, vitest_1.test)('complex 3', () => {
92
- let targetArea = { topLeft: { x: 2, y: 2 }, bottomRight: { x: 3, y: 3 } };
93
- let availabilityGrid = grid_1.Grid.createByValues([
94
- [true, true, false, true],
95
- [true, true, false, true],
96
- [false, false, true, true],
97
- [false, false, true, true]
98
- ]);
99
- let pathFinder = new vector_field_path_finder_1.VectorFieldPathFinder(targetArea, availabilityGrid);
100
- let h = pathFinder['getHighestWeight'](availabilityGrid.size);
101
- (0, vitest_1.expect)(pathFinder['weightGrid']['_grid']).toEqual([
102
- [28, 24, h, 20],
103
- [24, 14, h, 10],
104
- [h, h, 0, 0],
105
- [h, h, 0, 0]
106
- ]);
107
- });
108
- (0, vitest_1.test)('unreachable area 1', () => {
109
- let targetArea = { topLeft: { x: 0, y: 0 }, bottomRight: { x: 0, y: 0 } };
110
- let availabilityGrid = grid_1.Grid.createByValues([
111
- [true, false, true, false, true],
112
- [true, false, true, false, true],
113
- [true, false, false, false, true],
114
- [true, false, false, false, true],
115
- [true, true, true, true, true]
116
- ]);
117
- let pathFinder = new vector_field_path_finder_1.VectorFieldPathFinder(targetArea, availabilityGrid);
118
- let h = pathFinder['getHighestWeight'](availabilityGrid.size);
119
- (0, vitest_1.expect)(pathFinder['weightGrid']['_grid']).toEqual([
120
- [0, h, h, h, 108],
121
- [10, h, h, h, 98],
122
- [20, h, h, h, 88],
123
- [30, h, h, h, 78],
124
- [40, 44, 54, 64, 74]
125
- ]);
126
- });
127
- });
128
- (0, vitest_1.describe)('getDirectionToTarget', () => {
129
- (0, vitest_1.test)('sample 1', () => {
130
- let targetArea = { topLeft: { x: 0, y: 0 }, bottomRight: { x: 0, y: 0 } };
131
- let availabilityGrid = grid_1.Grid.createByValues([
132
- [true, true],
133
- [true, true]
134
- ]);
135
- let pathFinder = new vector_field_path_finder_1.VectorFieldPathFinder(targetArea, availabilityGrid);
136
- (0, vitest_1.expect)(pathFinder.getDirectionToTarget({ x: 1, y: 1 })).toEqual(-helpers_lib_1.Radian.get45);
137
- });
138
- (0, vitest_1.test)('sample 2', () => {
139
- let targetArea = { topLeft: { x: 0, y: 0 }, bottomRight: { x: 0, y: 0 } };
140
- let availabilityGrid = grid_1.Grid.createByValues([
141
- [true, true, true],
142
- [false, true, true]
143
- ]);
144
- let pathFinder = new vector_field_path_finder_1.VectorFieldPathFinder(targetArea, availabilityGrid);
145
- (0, vitest_1.expect)(pathFinder.getDirectionToTarget({ x: 2, y: 1 })).toEqual(helpers_lib_1.Radian.vectorToRadian({ x: -2, y: -1 }));
146
- });
147
- (0, vitest_1.test)('sample 3', () => {
148
- let targetArea = { topLeft: { x: 0, y: 0 }, bottomRight: { x: 0, y: 0 } };
149
- let availabilityGrid = grid_1.Grid.createByValues([
150
- [true, false, true],
151
- [true, false, true],
152
- [true, true, true]
153
- ]);
154
- let pathFinder = new vector_field_path_finder_1.VectorFieldPathFinder(targetArea, availabilityGrid);
155
- (0, vitest_1.expect)(pathFinder.getDirectionToTarget({ x: 2, y: 0 })).toEqual(helpers_lib_1.Radian.get180);
156
- });
157
- (0, vitest_1.test)('sample 4', () => {
158
- let targetArea = { topLeft: { x: 0, y: 0 }, bottomRight: { x: 0, y: 0 } };
159
- let availabilityGrid = grid_1.Grid.createByValues([
160
- [true, false, false],
161
- [true, false, false]
162
- ]);
163
- let pathFinder = new vector_field_path_finder_1.VectorFieldPathFinder(targetArea, availabilityGrid);
164
- (0, vitest_1.expect)(pathFinder.getDirectionToTarget({ x: 2, y: 0 })).toBeUndefined();
165
- });
166
- });
167
- (0, vitest_1.describe)('edge cases', () => {
168
- (0, vitest_1.test)('should create an instance', () => {
169
- let targetArea = { topLeft: { x: 0, y: 0 }, bottomRight: { x: 0, y: 0 } };
170
- let availabilityGrid = grid_1.Grid.createNew({ x: 1, y: 1 }, true);
171
- (0, vitest_1.expect)(new vector_field_path_finder_1.VectorFieldPathFinder(targetArea, availabilityGrid)).toBeTruthy();
172
- });
173
- (0, vitest_1.test)('should activate unavailable target cells of the target area', () => {
174
- let targetArea = { topLeft: { x: 0, y: 0 }, bottomRight: { x: 0, y: 0 } };
175
- let availabilityGrid = grid_1.Grid.createNew({ x: 1, y: 1 }, false);
176
- let pathFinder = new vector_field_path_finder_1.VectorFieldPathFinder(targetArea, availabilityGrid);
177
- (0, vitest_1.expect)(pathFinder['weightGrid'].get({ x: 0, y: 0 })).toBe(0);
178
- });
179
- (0, vitest_1.test)('should select closest grid cells if the target is outside of the grid', () => {
180
- let targetArea = { topLeft: { x: 3, y: -1 }, bottomRight: { x: 3, y: 1 } };
181
- let availabilityGrid = grid_1.Grid.createNew({ x: 3, y: 3 }, true);
182
- let pathFinder = new vector_field_path_finder_1.VectorFieldPathFinder(targetArea, availabilityGrid);
183
- (0, vitest_1.expect)(pathFinder['weightGrid']['_grid']).toEqual([
184
- [20, 10, 0],
185
- [20, 10, 0],
186
- [24, 14, 10]
187
- ]);
188
- });
189
- (0, vitest_1.test)('should return undefined if starting position and its neighbors are unreachable', () => {
190
- let targetArea = { topLeft: { x: 0, y: 0 }, bottomRight: { x: 0, y: 0 } };
191
- let availabilityGrid = grid_1.Grid.createByValues([
192
- [true, false, false],
193
- [true, false, false]
194
- ]);
195
- let pathFinder = new vector_field_path_finder_1.VectorFieldPathFinder(targetArea, availabilityGrid);
196
- (0, vitest_1.expect)(pathFinder.getDirectionToTarget({ x: 2, y: 1 })).toBeUndefined();
197
- });
198
- (0, vitest_1.test)('should find the direction if starting position is unreachable but there is a reachable neighbor', () => {
199
- let targetArea = { topLeft: { x: 0, y: 0 }, bottomRight: { x: 0, y: 0 } };
200
- let availabilityGrid = grid_1.Grid.createByValues([
201
- [true, true, false],
202
- [true, false, false]
203
- ]);
204
- let pathFinder = new vector_field_path_finder_1.VectorFieldPathFinder(targetArea, availabilityGrid);
205
- (0, vitest_1.expect)(pathFinder.getDirectionToTarget({ x: 2, y: 1 })).toEqual(-helpers_lib_1.Radian.get45);
206
- });
207
- (0, vitest_1.test)('should return undefined if starting point is inside target area', () => {
208
- let targetArea = { topLeft: { x: 0, y: 0 }, bottomRight: { x: 1, y: 1 } };
209
- let availabilityGrid = grid_1.Grid.createNew({ x: 2, y: 2 }, true);
210
- let pathFinder = new vector_field_path_finder_1.VectorFieldPathFinder(targetArea, availabilityGrid);
211
- (0, vitest_1.expect)(pathFinder.getDirectionToTarget({ x: 0, y: 0 })).toBeUndefined();
212
- });
213
- (0, vitest_1.test)('should return closest cell result if starting point is outside of the grid', () => {
214
- let targetArea = { topLeft: { x: 0, y: 0 }, bottomRight: { x: 0, y: 0 } };
215
- let availabilityGrid = grid_1.Grid.createNew({ x: 2, y: 1 }, true);
216
- let pathFinder = new vector_field_path_finder_1.VectorFieldPathFinder(targetArea, availabilityGrid);
217
- (0, vitest_1.expect)(pathFinder.getDirectionToTarget({ x: 2, y: 0 })).toEqual(-helpers_lib_1.Radian.get90);
218
- });
219
- (0, vitest_1.test)('if average direction is pointing blocked path, it should pick random available direction', () => {
220
- let targetArea = { topLeft: { x: 0, y: 0 }, bottomRight: { x: 0, y: 0 } };
221
- let availabilityGrid = grid_1.Grid.createByValues([
222
- [true, true, true],
223
- [true, false, true],
224
- [true, true, true]
225
- ]);
226
- let pathFinder = new vector_field_path_finder_1.VectorFieldPathFinder(targetArea, availabilityGrid);
227
- let result = pathFinder.getDirectionToTarget({ x: 2, y: 2 });
228
- (0, vitest_1.expect)(result === -helpers_lib_1.Radian.get90 || result === 0).toBeTruthy();
229
- });
7
+ (0, vitest_1.describe)('weight grid', () => {
8
+ (0, vitest_1.test)('basic 1', () => {
9
+ const targetArea = {
10
+ topLeft: { x: 0, y: 0 },
11
+ bottomRight: { x: 0, y: 0 }
12
+ };
13
+ const availabilityGrid = grid_1.Grid.createNew({ x: 1, y: 1 }, true);
14
+ const pathFinder = new vector_field_path_finder_1.VectorFieldPathFinder(targetArea, availabilityGrid);
15
+ (0, vitest_1.expect)(pathFinder['weightGrid'].get({ x: 0, y: 0 })).toBe(0);
230
16
  });
17
+ (0, vitest_1.test)('basic 2', () => {
18
+ const targetArea = {
19
+ topLeft: { x: 0, y: 0 },
20
+ bottomRight: { x: 1, y: 1 }
21
+ };
22
+ const availabilityGrid = grid_1.Grid.createByValues([
23
+ [true, true],
24
+ [true, true]
25
+ ]);
26
+ const pathFinder = new vector_field_path_finder_1.VectorFieldPathFinder(targetArea, availabilityGrid);
27
+ (0, vitest_1.expect)(pathFinder['weightGrid'].get({ x: 0, y: 0 })).toBe(0);
28
+ (0, vitest_1.expect)(pathFinder['weightGrid'].get({ x: 1, y: 0 })).toBe(0);
29
+ (0, vitest_1.expect)(pathFinder['weightGrid'].get({ x: 0, y: 1 })).toBe(0);
30
+ (0, vitest_1.expect)(pathFinder['weightGrid'].get({ x: 1, y: 1 })).toBe(0);
31
+ });
32
+ (0, vitest_1.test)('sample 1', () => {
33
+ const targetArea = {
34
+ topLeft: { x: 0, y: 0 },
35
+ bottomRight: { x: 0, y: 0 }
36
+ };
37
+ const availabilityGrid = grid_1.Grid.createByValues([
38
+ [true, true],
39
+ [true, true]
40
+ ]);
41
+ const pathFinder = new vector_field_path_finder_1.VectorFieldPathFinder(targetArea, availabilityGrid);
42
+ (0, vitest_1.expect)(pathFinder['weightGrid'].get({ x: 0, y: 0 })).toBe(0);
43
+ (0, vitest_1.expect)(pathFinder['weightGrid'].get({ x: 1, y: 0 })).toBe(10);
44
+ (0, vitest_1.expect)(pathFinder['weightGrid'].get({ x: 0, y: 1 })).toBe(10);
45
+ (0, vitest_1.expect)(pathFinder['weightGrid'].get({ x: 1, y: 1 })).toBe(14);
46
+ });
47
+ (0, vitest_1.test)('sample 2', () => {
48
+ const targetArea = {
49
+ topLeft: { x: 0, y: 0 },
50
+ bottomRight: { x: 1, y: 1 }
51
+ };
52
+ const availabilityGrid = grid_1.Grid.createNew({ x: 3, y: 3 }, true);
53
+ const pathFinder = new vector_field_path_finder_1.VectorFieldPathFinder(targetArea, availabilityGrid);
54
+ (0, vitest_1.expect)(pathFinder['weightGrid']['_grid']).toEqual([
55
+ [0, 0, 10],
56
+ [0, 0, 10],
57
+ [10, 10, 14]
58
+ ]);
59
+ });
60
+ (0, vitest_1.test)('sample 3', () => {
61
+ const targetArea = {
62
+ topLeft: { x: 1, y: 1 },
63
+ bottomRight: { x: 2, y: 2 }
64
+ };
65
+ const availabilityGrid = grid_1.Grid.createNew({ x: 3, y: 3 }, true);
66
+ const pathFinder = new vector_field_path_finder_1.VectorFieldPathFinder(targetArea, availabilityGrid);
67
+ (0, vitest_1.expect)(pathFinder['weightGrid']['_grid']).toEqual([
68
+ [14, 10, 10],
69
+ [10, 0, 0],
70
+ [10, 0, 0]
71
+ ]);
72
+ });
73
+ (0, vitest_1.test)('complex 1', () => {
74
+ const targetArea = {
75
+ topLeft: { x: 0, y: 0 },
76
+ bottomRight: { x: 0, y: 0 }
77
+ };
78
+ const availabilityGrid = grid_1.Grid.createByValues([
79
+ [true, false, true],
80
+ [true, true, true],
81
+ [false, false, true],
82
+ [false, false, true]
83
+ ]);
84
+ const pathFinder = new vector_field_path_finder_1.VectorFieldPathFinder(targetArea, availabilityGrid);
85
+ const h = pathFinder['getHighestWeight'](availabilityGrid.size);
86
+ (0, vitest_1.expect)(pathFinder['weightGrid']['_grid']).toEqual([
87
+ [0, h, 28],
88
+ [10, 14, 24],
89
+ [h, h, 28],
90
+ [h, h, 38]
91
+ ]);
92
+ });
93
+ (0, vitest_1.test)('complex 2', () => {
94
+ const targetArea = {
95
+ topLeft: { x: 0, y: 0 },
96
+ bottomRight: { x: 1, y: 1 }
97
+ };
98
+ const availabilityGrid = grid_1.Grid.createByValues([
99
+ [true, true, false, true],
100
+ [true, true, false, true],
101
+ [false, false, true, true]
102
+ ]);
103
+ const pathFinder = new vector_field_path_finder_1.VectorFieldPathFinder(targetArea, availabilityGrid);
104
+ const h = pathFinder['getHighestWeight'](availabilityGrid.size);
105
+ (0, vitest_1.expect)(pathFinder['weightGrid']['_grid']).toEqual([
106
+ [0, 0, h, 38],
107
+ [0, 0, h, 28],
108
+ [h, h, 14, 24]
109
+ ]);
110
+ });
111
+ (0, vitest_1.test)('complex 3', () => {
112
+ const targetArea = {
113
+ topLeft: { x: 2, y: 2 },
114
+ bottomRight: { x: 3, y: 3 }
115
+ };
116
+ const availabilityGrid = grid_1.Grid.createByValues([
117
+ [true, true, false, true],
118
+ [true, true, false, true],
119
+ [false, false, true, true],
120
+ [false, false, true, true]
121
+ ]);
122
+ const pathFinder = new vector_field_path_finder_1.VectorFieldPathFinder(targetArea, availabilityGrid);
123
+ const h = pathFinder['getHighestWeight'](availabilityGrid.size);
124
+ (0, vitest_1.expect)(pathFinder['weightGrid']['_grid']).toEqual([
125
+ [28, 24, h, 20],
126
+ [24, 14, h, 10],
127
+ [h, h, 0, 0],
128
+ [h, h, 0, 0]
129
+ ]);
130
+ });
131
+ (0, vitest_1.test)('unreachable area 1', () => {
132
+ const targetArea = {
133
+ topLeft: { x: 0, y: 0 },
134
+ bottomRight: { x: 0, y: 0 }
135
+ };
136
+ const availabilityGrid = grid_1.Grid.createByValues([
137
+ [true, false, true, false, true],
138
+ [true, false, true, false, true],
139
+ [true, false, false, false, true],
140
+ [true, false, false, false, true],
141
+ [true, true, true, true, true]
142
+ ]);
143
+ const pathFinder = new vector_field_path_finder_1.VectorFieldPathFinder(targetArea, availabilityGrid);
144
+ const h = pathFinder['getHighestWeight'](availabilityGrid.size);
145
+ (0, vitest_1.expect)(pathFinder['weightGrid']['_grid']).toEqual([
146
+ [0, h, h, h, 108],
147
+ [10, h, h, h, 98],
148
+ [20, h, h, h, 88],
149
+ [30, h, h, h, 78],
150
+ [40, 44, 54, 64, 74]
151
+ ]);
152
+ });
153
+ });
154
+ (0, vitest_1.describe)('getDirectionToTarget', () => {
155
+ (0, vitest_1.test)('sample 1', () => {
156
+ const targetArea = {
157
+ topLeft: { x: 0, y: 0 },
158
+ bottomRight: { x: 0, y: 0 }
159
+ };
160
+ const availabilityGrid = grid_1.Grid.createByValues([
161
+ [true, true],
162
+ [true, true]
163
+ ]);
164
+ const pathFinder = new vector_field_path_finder_1.VectorFieldPathFinder(targetArea, availabilityGrid);
165
+ (0, vitest_1.expect)(pathFinder.getDirectionToTarget({ x: 1, y: 1 })).toEqual(-helpers_lib_1.Radian.get45);
166
+ });
167
+ (0, vitest_1.test)('sample 2', () => {
168
+ const targetArea = {
169
+ topLeft: { x: 0, y: 0 },
170
+ bottomRight: { x: 0, y: 0 }
171
+ };
172
+ const availabilityGrid = grid_1.Grid.createByValues([
173
+ [true, true, true],
174
+ [false, true, true]
175
+ ]);
176
+ const pathFinder = new vector_field_path_finder_1.VectorFieldPathFinder(targetArea, availabilityGrid);
177
+ (0, vitest_1.expect)(pathFinder.getDirectionToTarget({ x: 2, y: 1 })).toEqual(
178
+ helpers_lib_1.Radian.vectorToRadian({ x: -2, y: -1 })
179
+ );
180
+ });
181
+ (0, vitest_1.test)('sample 3', () => {
182
+ const targetArea = {
183
+ topLeft: { x: 0, y: 0 },
184
+ bottomRight: { x: 0, y: 0 }
185
+ };
186
+ const availabilityGrid = grid_1.Grid.createByValues([
187
+ [true, false, true],
188
+ [true, false, true],
189
+ [true, true, true]
190
+ ]);
191
+ const pathFinder = new vector_field_path_finder_1.VectorFieldPathFinder(targetArea, availabilityGrid);
192
+ (0, vitest_1.expect)(pathFinder.getDirectionToTarget({ x: 2, y: 0 })).toEqual(helpers_lib_1.Radian.get180);
193
+ });
194
+ (0, vitest_1.test)('sample 4', () => {
195
+ const targetArea = {
196
+ topLeft: { x: 0, y: 0 },
197
+ bottomRight: { x: 0, y: 0 }
198
+ };
199
+ const availabilityGrid = grid_1.Grid.createByValues([
200
+ [true, false, false],
201
+ [true, false, false]
202
+ ]);
203
+ const pathFinder = new vector_field_path_finder_1.VectorFieldPathFinder(targetArea, availabilityGrid);
204
+ (0, vitest_1.expect)(pathFinder.getDirectionToTarget({ x: 2, y: 0 })).toBeUndefined();
205
+ });
206
+ });
207
+ (0, vitest_1.describe)('edge cases', () => {
208
+ (0, vitest_1.test)('should create an instance', () => {
209
+ const targetArea = {
210
+ topLeft: { x: 0, y: 0 },
211
+ bottomRight: { x: 0, y: 0 }
212
+ };
213
+ const availabilityGrid = grid_1.Grid.createNew({ x: 1, y: 1 }, true);
214
+ (0, vitest_1.expect)(new vector_field_path_finder_1.VectorFieldPathFinder(targetArea, availabilityGrid)).toBeTruthy();
215
+ });
216
+ (0, vitest_1.test)('should activate unavailable target cells of the target area', () => {
217
+ const targetArea = {
218
+ topLeft: { x: 0, y: 0 },
219
+ bottomRight: { x: 0, y: 0 }
220
+ };
221
+ const availabilityGrid = grid_1.Grid.createNew({ x: 1, y: 1 }, false);
222
+ const pathFinder = new vector_field_path_finder_1.VectorFieldPathFinder(targetArea, availabilityGrid);
223
+ (0, vitest_1.expect)(pathFinder['weightGrid'].get({ x: 0, y: 0 })).toBe(0);
224
+ });
225
+ (0, vitest_1.test)('should select closest grid cells if the target is outside of the grid', () => {
226
+ const targetArea = {
227
+ topLeft: { x: 3, y: -1 },
228
+ bottomRight: { x: 3, y: 1 }
229
+ };
230
+ const availabilityGrid = grid_1.Grid.createNew({ x: 3, y: 3 }, true);
231
+ const pathFinder = new vector_field_path_finder_1.VectorFieldPathFinder(targetArea, availabilityGrid);
232
+ (0, vitest_1.expect)(pathFinder['weightGrid']['_grid']).toEqual([
233
+ [20, 10, 0],
234
+ [20, 10, 0],
235
+ [24, 14, 10]
236
+ ]);
237
+ });
238
+ (0, vitest_1.test)('should return undefined if starting position and its neighbors are unreachable', () => {
239
+ const targetArea = {
240
+ topLeft: { x: 0, y: 0 },
241
+ bottomRight: { x: 0, y: 0 }
242
+ };
243
+ const availabilityGrid = grid_1.Grid.createByValues([
244
+ [true, false, false],
245
+ [true, false, false]
246
+ ]);
247
+ const pathFinder = new vector_field_path_finder_1.VectorFieldPathFinder(targetArea, availabilityGrid);
248
+ (0, vitest_1.expect)(pathFinder.getDirectionToTarget({ x: 2, y: 1 })).toBeUndefined();
249
+ });
250
+ (0, vitest_1.test)('should find the direction if starting position is unreachable but there is a reachable neighbor', () => {
251
+ const targetArea = {
252
+ topLeft: { x: 0, y: 0 },
253
+ bottomRight: { x: 0, y: 0 }
254
+ };
255
+ const availabilityGrid = grid_1.Grid.createByValues([
256
+ [true, true, false],
257
+ [true, false, false]
258
+ ]);
259
+ const pathFinder = new vector_field_path_finder_1.VectorFieldPathFinder(targetArea, availabilityGrid);
260
+ (0, vitest_1.expect)(pathFinder.getDirectionToTarget({ x: 2, y: 1 })).toEqual(-helpers_lib_1.Radian.get45);
261
+ });
262
+ (0, vitest_1.test)('should return undefined if starting point is inside target area', () => {
263
+ const targetArea = {
264
+ topLeft: { x: 0, y: 0 },
265
+ bottomRight: { x: 1, y: 1 }
266
+ };
267
+ const availabilityGrid = grid_1.Grid.createNew({ x: 2, y: 2 }, true);
268
+ const pathFinder = new vector_field_path_finder_1.VectorFieldPathFinder(targetArea, availabilityGrid);
269
+ (0, vitest_1.expect)(pathFinder.getDirectionToTarget({ x: 0, y: 0 })).toBeUndefined();
270
+ });
271
+ (0, vitest_1.test)('should return closest cell result if starting point is outside of the grid', () => {
272
+ const targetArea = {
273
+ topLeft: { x: 0, y: 0 },
274
+ bottomRight: { x: 0, y: 0 }
275
+ };
276
+ const availabilityGrid = grid_1.Grid.createNew({ x: 2, y: 1 }, true);
277
+ const pathFinder = new vector_field_path_finder_1.VectorFieldPathFinder(targetArea, availabilityGrid);
278
+ (0, vitest_1.expect)(pathFinder.getDirectionToTarget({ x: 2, y: 0 })).toEqual(-helpers_lib_1.Radian.get90);
279
+ });
280
+ (0, vitest_1.test)('if average direction is pointing blocked path, it should pick random available direction', () => {
281
+ const targetArea = {
282
+ topLeft: { x: 0, y: 0 },
283
+ bottomRight: { x: 0, y: 0 }
284
+ };
285
+ const availabilityGrid = grid_1.Grid.createByValues([
286
+ [true, true, true],
287
+ [true, false, true],
288
+ [true, true, true]
289
+ ]);
290
+ const pathFinder = new vector_field_path_finder_1.VectorFieldPathFinder(targetArea, availabilityGrid);
291
+ const result = pathFinder.getDirectionToTarget({ x: 2, y: 2 });
292
+ (0, vitest_1.expect)(result === -helpers_lib_1.Radian.get90 || result === 0).toBeTruthy();
293
+ });
294
+ });
231
295
  });
232
- //# sourceMappingURL=vector-field-path-finder.spec.js.map
296
+ //# sourceMappingURL=vector-field-path-finder.spec.js.map
@@ -1,12 +1,12 @@
1
1
  import { Vec2 } from 'helpers-lib';
2
2
  export interface PathFinderResult {
3
- directPathAvailable: boolean;
4
- path: Vec2[];
3
+ directPathAvailable: boolean;
4
+ path: Vec2[];
5
5
  }
6
6
  export declare class PathFinder {
7
- /**
8
- * Time Complexity: O(grid.height * grid.width)
9
- * Space Complexity: O(grid.height * grid.width)
10
- */
11
- static findPath(gridValues: boolean[][], startingPosition: Vec2, targetPosition: Vec2): PathFinderResult;
7
+ /**
8
+ * Time Complexity: O(grid.height * grid.width)
9
+ * Space Complexity: O(grid.height * grid.width)
10
+ */
11
+ static findPath(gridValues: boolean[][], startingPosition: Vec2, targetPosition: Vec2): PathFinderResult;
12
12
  }