warcraft-3-w3ts-utils 0.1.7 → 0.1.8

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 (81) hide show
  1. package/dist/index.lua +13 -0
  2. package/dist/lua_modules/w3ts/globals/index.lua +23 -0
  3. package/dist/lua_modules/w3ts/globals/order.lua +2 -0
  4. package/dist/lua_modules/w3ts/handles/camera.lua +348 -0
  5. package/dist/lua_modules/w3ts/handles/destructable.lua +237 -0
  6. package/dist/lua_modules/w3ts/handles/dialog.lua +161 -0
  7. package/dist/lua_modules/w3ts/handles/effect.lua +198 -0
  8. package/dist/lua_modules/w3ts/handles/fogmodifier.lua +76 -0
  9. package/dist/lua_modules/w3ts/handles/force.lua +105 -0
  10. package/dist/lua_modules/w3ts/handles/frame.lua +417 -0
  11. package/dist/lua_modules/w3ts/handles/gamecache.lua +132 -0
  12. package/dist/lua_modules/w3ts/handles/group.lua +215 -0
  13. package/dist/lua_modules/w3ts/handles/handle.lua +38 -0
  14. package/dist/lua_modules/w3ts/handles/image.lua +105 -0
  15. package/dist/lua_modules/w3ts/handles/index.lua +226 -0
  16. package/dist/lua_modules/w3ts/handles/item.lua +375 -0
  17. package/dist/lua_modules/w3ts/handles/leaderboard.lua +211 -0
  18. package/dist/lua_modules/w3ts/handles/multiboard.lua +193 -0
  19. package/dist/lua_modules/w3ts/handles/player.lua +311 -0
  20. package/dist/lua_modules/w3ts/handles/point.lua +80 -0
  21. package/dist/lua_modules/w3ts/handles/quest.lua +176 -0
  22. package/dist/lua_modules/w3ts/handles/rect.lua +129 -0
  23. package/dist/lua_modules/w3ts/handles/region.lua +72 -0
  24. package/dist/lua_modules/w3ts/handles/sound.lua +174 -0
  25. package/dist/lua_modules/w3ts/handles/texttag.lua +97 -0
  26. package/dist/lua_modules/w3ts/handles/timer.lua +83 -0
  27. package/dist/lua_modules/w3ts/handles/timerdialog.lua +86 -0
  28. package/dist/lua_modules/w3ts/handles/trigger.lua +265 -0
  29. package/dist/lua_modules/w3ts/handles/ubersplat.lua +84 -0
  30. package/dist/lua_modules/w3ts/handles/unit.lua +1330 -0
  31. package/dist/lua_modules/w3ts/handles/weathereffect.lua +42 -0
  32. package/dist/lua_modules/w3ts/handles/widget.lua +53 -0
  33. package/dist/lua_modules/w3ts/hooks/index.lua +52 -0
  34. package/dist/lua_modules/w3ts/index.lua +36 -0
  35. package/dist/lua_modules/w3ts/system/base64.lua +108 -0
  36. package/dist/lua_modules/w3ts/system/binaryreader.lua +74 -0
  37. package/dist/lua_modules/w3ts/system/binarywriter.lua +88 -0
  38. package/dist/lua_modules/w3ts/system/file.lua +88 -0
  39. package/dist/lua_modules/w3ts/system/gametime.lua +27 -0
  40. package/dist/lua_modules/w3ts/system/host.lua +104 -0
  41. package/dist/lua_modules/w3ts/system/index.lua +58 -0
  42. package/dist/lua_modules/w3ts/system/sync.lua +239 -0
  43. package/dist/lua_modules/w3ts/utils/color.lua +189 -0
  44. package/dist/lua_modules/w3ts/utils/index.lua +38 -0
  45. package/dist/lualib_bundle.lua +2733 -0
  46. package/dist/package.json +41 -0
  47. package/dist/utils/abilities.lua +107 -0
  48. package/dist/utils/camera.lua +46 -0
  49. package/dist/utils/chat-command.lua +30 -0
  50. package/dist/utils/color.lua +41 -0
  51. package/dist/utils/index.lua +125 -0
  52. package/dist/utils/item.lua +173 -0
  53. package/dist/utils/math.lua +17 -0
  54. package/dist/utils/minimapIcons.lua +28 -0
  55. package/dist/utils/misc.lua +143 -0
  56. package/dist/utils/physics.lua +161 -0
  57. package/dist/utils/players.lua +234 -0
  58. package/dist/utils/point.lua +60 -0
  59. package/dist/utils/quests.lua +47 -0
  60. package/dist/utils/textTag.lua +110 -0
  61. package/dist/utils/timer.lua +21 -0
  62. package/dist/utils/units.lua +102 -0
  63. package/package.json +4 -6
  64. package/dist/index.js +0 -18
  65. package/dist/utils/abilities.js +0 -125
  66. package/dist/utils/camera.js +0 -37
  67. package/dist/utils/chat-command.js +0 -22
  68. package/dist/utils/color.js +0 -141
  69. package/dist/utils/index.js +0 -32
  70. package/dist/utils/item.js +0 -124
  71. package/dist/utils/math.js +0 -17
  72. package/dist/utils/minimapIcons.js +0 -27
  73. package/dist/utils/misc.js +0 -175
  74. package/dist/utils/physics.js +0 -194
  75. package/dist/utils/players.js +0 -189
  76. package/dist/utils/point.js +0 -74
  77. package/dist/utils/quests.js +0 -30
  78. package/dist/utils/textTag.js +0 -72
  79. package/dist/utils/timer.js +0 -16
  80. package/dist/utils/units.js +0 -81
  81. package/tsconfig.json +0 -40
@@ -1,124 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.unitHasItem = unitHasItem;
4
- exports.trig_itemRecipeSystem = trig_itemRecipeSystem;
5
- const w3ts_1 = require("w3ts");
6
- const misc_1 = require("./misc");
7
- /**
8
- * Checks if the unit has an item in their item slots
9
- * @param u
10
- * @param itemTypeId
11
- * @returns
12
- */
13
- function unitHasItem(u, itemTypeId) {
14
- for (let x = 0; x < 6; x++) {
15
- if (u.getItemInSlot(x)?.typeId === itemTypeId) {
16
- return true;
17
- }
18
- }
19
- return false;
20
- }
21
- // Player should pick up recipes when needed. if they are missing items then the recipe cost is refunded
22
- function trig_itemRecipeSystem() {
23
- //takes a set of items
24
- //unit or unit clicks
25
- const t = w3ts_1.Trigger.create();
26
- t.registerAnyUnitEvent(EVENT_PLAYER_UNIT_PICKUP_ITEM);
27
- t.addAction(() => {
28
- const recipeItem = w3ts_1.Item.fromEvent();
29
- const unit = w3ts_1.Unit.fromHandle(GetTriggerUnit());
30
- if (!unit || !recipeItem) {
31
- return;
32
- }
33
- //for every item they have, if any has the word recipe, then we check to see if they have the items needed to satisfy the recipe
34
- for (let x = 0; x < 6; x++) {
35
- const currItem = unit?.getItemInSlot(x);
36
- if (currItem?.name.toLowerCase().includes("recipe")) {
37
- checkItemRecipeRequirements(unit, currItem);
38
- }
39
- }
40
- });
41
- }
42
- function checkItemRecipeRequirements(unit, recipeItem) {
43
- if (recipeItem.name.toLowerCase().includes("recipe")) {
44
- let requiredItems = null;
45
- let itemToCreateId = null;
46
- for (const [key, value] of itemRecipesMap.entries()) {
47
- if (key.recipeId === recipeItem.typeId) {
48
- requiredItems = value;
49
- itemToCreateId = key.itemId;
50
- }
51
- }
52
- if (!requiredItems) {
53
- print("Missing required items data for the recipe ", recipeItem.name);
54
- return;
55
- }
56
- /**
57
- * unique list of item types and their quantity and charges that we found on the unit
58
- */
59
- const matchingItems = [];
60
- //Loop through the units item slots
61
- for (let x = 0; x < 6; x++) {
62
- const currItem = unit?.getItemInSlot(x);
63
- //Check that the current item matches at least one of the item types in the requirement list
64
- if (currItem && requiredItems.some((req) => req.itemTypeId === currItem.typeId)) {
65
- const alreadyStoredItemIndex = matchingItems.findIndex((itemReq) => itemReq.itemTypeId === currItem.typeId);
66
- //If we already came across this item in the unit inventory then increment the quantity
67
- if (alreadyStoredItemIndex && matchingItems[alreadyStoredItemIndex]) {
68
- matchingItems[alreadyStoredItemIndex].quantity++;
69
- }
70
- //otherwise it is our first match with this item type, so add it to our array of matching items
71
- else {
72
- matchingItems.push({ itemTypeId: currItem.typeId, quantity: 1, charges: 0 });
73
- }
74
- }
75
- }
76
- //Check that every item required is found in the units inventory satisfies the quantity requirement for the recipe
77
- const satisfiesRecipe = requiredItems.every((reqItemData) => {
78
- const matching = matchingItems?.find((matchingItemData) => matchingItemData.itemTypeId === reqItemData.itemTypeId);
79
- if (matching) {
80
- return matching.quantity >= reqItemData.quantity;
81
- }
82
- return false;
83
- }) && matchingItems.length > 0;
84
- if (!itemToCreateId) {
85
- print("Missing the item type id of the item to create for this recipe: ", recipeItem.name);
86
- }
87
- //destroys more items than it needds to
88
- if (satisfiesRecipe && itemToCreateId) {
89
- //add the item
90
- requiredItems.forEach((req) => {
91
- for (let x = 0; x < req.quantity; x++) {
92
- for (let x = 0; x < 6; x++) {
93
- const currItem = unit?.getItemInSlot(x);
94
- if (currItem?.typeId === req.itemTypeId) {
95
- currItem?.destroy();
96
- break;
97
- }
98
- }
99
- }
100
- });
101
- recipeItem.destroy();
102
- unit.addItemById(itemToCreateId);
103
- (0, misc_1.useTempEffect)(w3ts_1.Effect.create("Abilities\\Spells\\Other\\Monsoon\\MonsoonBoltTarget.mdl", unit.x, unit.y));
104
- const clap = w3ts_1.Effect.create("Abilities\\Spells\\Human\\Thunderclap\\ThunderClapCaster.mdl", unit.x, unit.y);
105
- clap?.setScaleMatrix(0.5, 0.5, 0.5);
106
- (0, misc_1.useTempEffect)(clap);
107
- }
108
- if (!satisfiesRecipe) {
109
- //refund the gold
110
- (0, misc_1.notifyPlayer)(`Missing recipe requirements for: ${recipeItem.name}.`);
111
- }
112
- //use if or rf to store item gold cost in the world editor
113
- }
114
- }
115
- const itemRecipesMap = new Map([
116
- // [
117
- // { recipeId: ITEMS.recipe_blinkTreads, itemId: ITEMS.blinkTreads },
118
- // [
119
- // { itemTypeId: ITEMS.bootsOfSpeed, quantity: 1, charges: 0 }, //
120
- // { itemTypeId: ITEMS.blinkDagger, quantity: 1, charges: 0 }, //
121
- // ],
122
- // ],
123
- ]);
124
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXRlbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9pdGVtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBU0Esa0NBUUM7QUFHRCxzREFzQkM7QUExQ0QsK0JBQW1EO0FBQ25ELGlDQUFxRDtBQUVyRDs7Ozs7R0FLRztBQUNILFNBQWdCLFdBQVcsQ0FBQyxDQUFPLEVBQUUsVUFBa0I7SUFDbkQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDNUMsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQztJQUNMLENBQUM7SUFFRCxPQUFPLEtBQUssQ0FBQztBQUNqQixDQUFDO0FBRUQsd0dBQXdHO0FBQ3hHLFNBQWdCLHFCQUFxQjtJQUNqQyxzQkFBc0I7SUFDdEIscUJBQXFCO0lBQ3JCLE1BQU0sQ0FBQyxHQUFHLGNBQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUUzQixDQUFDLENBQUMsb0JBQW9CLENBQUMsNkJBQTZCLENBQUMsQ0FBQztJQUN0RCxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtRQUNiLE1BQU0sVUFBVSxHQUFHLFdBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNwQyxNQUFNLElBQUksR0FBRyxXQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUM7UUFFL0MsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3ZCLE9BQU87UUFDWCxDQUFDO1FBRUQsZ0lBQWdJO1FBQ2hJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUN6QixNQUFNLFFBQVEsR0FBRyxJQUFJLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3hDLElBQUksUUFBUSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztnQkFDbEQsMkJBQTJCLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ2hELENBQUM7UUFDTCxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDO0FBRUQsU0FBUywyQkFBMkIsQ0FBQyxJQUFVLEVBQUUsVUFBZ0I7SUFDN0QsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1FBQ25ELElBQUksYUFBYSxHQUFtQyxJQUFJLENBQUM7UUFDekQsSUFBSSxjQUFjLEdBQWtCLElBQUksQ0FBQztRQUV6QyxLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksY0FBYyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7WUFDbEQsSUFBSSxHQUFHLENBQUMsUUFBUSxLQUFLLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDckMsYUFBYSxHQUFHLEtBQUssQ0FBQztnQkFDdEIsY0FBYyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUM7WUFDaEMsQ0FBQztRQUNMLENBQUM7UUFFRCxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDakIsS0FBSyxDQUFDLDZDQUE2QyxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN0RSxPQUFPO1FBQ1gsQ0FBQztRQUVEOztXQUVHO1FBQ0gsTUFBTSxhQUFhLEdBQTRCLEVBQUUsQ0FBQztRQUVsRCxtQ0FBbUM7UUFDbkMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ3pCLE1BQU0sUUFBUSxHQUFHLElBQUksRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFeEMsNEZBQTRGO1lBQzVGLElBQUksUUFBUSxJQUFJLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEtBQUssUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQzlFLE1BQU0sc0JBQXNCLEdBQUcsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLFVBQVUsS0FBSyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBRTVHLHVGQUF1RjtnQkFDdkYsSUFBSSxzQkFBc0IsSUFBSSxhQUFhLENBQUMsc0JBQXNCLENBQUMsRUFBRSxDQUFDO29CQUNsRSxhQUFhLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDckQsQ0FBQztnQkFDRCwrRkFBK0Y7cUJBQzFGLENBQUM7b0JBQ0YsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFLFVBQVUsRUFBRSxRQUFRLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ2pGLENBQUM7WUFDTCxDQUFDO1FBQ0wsQ0FBQztRQUVELGtIQUFrSDtRQUNsSCxNQUFNLGVBQWUsR0FDakIsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFO1lBQ2hDLE1BQU0sUUFBUSxHQUFHLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxLQUFLLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUVuSCxJQUFJLFFBQVEsRUFBRSxDQUFDO2dCQUNYLE9BQU8sUUFBUSxDQUFDLFFBQVEsSUFBSSxXQUFXLENBQUMsUUFBUSxDQUFDO1lBQ3JELENBQUM7WUFFRCxPQUFPLEtBQUssQ0FBQztRQUNqQixDQUFDLENBQUMsSUFBSSxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUVuQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDbEIsS0FBSyxDQUFDLGtFQUFrRSxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMvRixDQUFDO1FBRUQsdUNBQXVDO1FBQ3ZDLElBQUksZUFBZSxJQUFJLGNBQWMsRUFBRSxDQUFDO1lBQ3BDLGNBQWM7WUFDZCxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBMEIsRUFBRSxFQUFFO2dCQUNqRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO29CQUNwQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7d0JBQ3pCLE1BQU0sUUFBUSxHQUFHLElBQUksRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ3hDLElBQUksUUFBUSxFQUFFLE1BQU0sS0FBSyxHQUFHLENBQUMsVUFBVSxFQUFFLENBQUM7NEJBQ3RDLFFBQVEsRUFBRSxPQUFPLEVBQUUsQ0FBQzs0QkFDcEIsTUFBTTt3QkFDVixDQUFDO29CQUNMLENBQUM7Z0JBQ0wsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1lBRUgsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBRXJCLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLENBQUM7WUFFakMsSUFBQSxvQkFBYSxFQUFDLGFBQU0sQ0FBQyxNQUFNLENBQUMsMERBQTBELEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN6RyxNQUFNLElBQUksR0FBRyxhQUFNLENBQUMsTUFBTSxDQUFDLDhEQUE4RCxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzNHLElBQUksRUFBRSxjQUFjLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNwQyxJQUFBLG9CQUFhLEVBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEIsQ0FBQztRQUVELElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUNuQixpQkFBaUI7WUFDakIsSUFBQSxtQkFBWSxFQUFDLG9DQUFvQyxVQUFVLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztRQUN6RSxDQUFDO1FBRUQsMERBQTBEO0lBQzlELENBQUM7QUFDTCxDQUFDO0FBYUQsTUFBTSxjQUFjLEdBQUcsSUFBSSxHQUFHLENBQXNDO0FBQ2hFLElBQUk7QUFDSix5RUFBeUU7QUFDekUsUUFBUTtBQUNSLDBFQUEwRTtBQUMxRSx5RUFBeUU7QUFDekUsU0FBUztBQUNULEtBQUs7Q0FDUixDQUFDLENBQUMifQ==
@@ -1,17 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.distanceBetweenCoords = distanceBetweenCoords;
4
- /**
5
- * @deprecated
6
- * @param a
7
- * @param b
8
- * @returns
9
- */
10
- function distanceBetweenCoords(a, b) {
11
- const deltaX = a.x - b.x;
12
- const deltaY = a.y - b.y;
13
- const squaredDist = Math.pow(deltaX, 2) + Math.pow(deltaY, 2);
14
- const dist = Math.sqrt(squaredDist);
15
- return dist;
16
- }
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9tYXRoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBTUEsc0RBT0M7QUFiRDs7Ozs7R0FLRztBQUNILFNBQWdCLHFCQUFxQixDQUFDLENBQTJCLEVBQUUsQ0FBMkI7SUFDMUYsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pCLE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6QixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM5RCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBRXBDLE9BQU8sSUFBSSxDQUFDO0FBQ2hCLENBQUMifQ==
@@ -1,27 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.minimapIconPathsSet = exports.MinimapIconPath = void 0;
4
- var MinimapIconPath;
5
- (function (MinimapIconPath) {
6
- MinimapIconPath["controlPoint"] = "UI\\Minimap\\MiniMap-ControlPoint.mdl";
7
- MinimapIconPath["questGiver"] = "UI\\Minimap\\MiniMap-QuestGiver.mdl";
8
- MinimapIconPath["questObjectiveBonus"] = "UI\\Minimap\\Minimap-QuestObjectiveBonus.mdl";
9
- MinimapIconPath["questObjectivePrimary"] = "UI\\Minimap\\Minimap-QuestObjectivePrimary.mdl";
10
- MinimapIconPath["questTurnIn"] = "UI\\Minimap\\Minimap-QuestTurnIn.mdl";
11
- MinimapIconPath["hero"] = "UI\\Minimap\\MiniMap-Hero.mdl";
12
- MinimapIconPath["item"] = "UI\\Minimap\\MiniMap-Item.mdl";
13
- MinimapIconPath["neutralBuilding"] = "UI\\Minimap\\MiniMap-NeutralBuilding.mdl";
14
- MinimapIconPath["ping"] = "UI\\Minimap\\Minimap-Ping.mdl";
15
- })(MinimapIconPath || (exports.MinimapIconPath = MinimapIconPath = {}));
16
- exports.minimapIconPathsSet = new Set([
17
- "UI\\Minimap\\MiniMap-ControlPoint.mdl",
18
- "UI\\Minimap\\MiniMap-Hero.mdl",
19
- "UI\\Minimap\\MiniMap-Item.mdl",
20
- "UI\\Minimap\\MiniMap-NeutralBuilding.mdl",
21
- "UI\\Minimap\\MiniMap-QuestGiver.mdl",
22
- "UI\\Minimap\\Minimap-Ping.mdl",
23
- "UI\\Minimap\\Minimap-QuestObjectiveBonus.mdl",
24
- "UI\\Minimap\\Minimap-QuestObjectivePrimary.mdl",
25
- "UI\\Minimap\\Minimap-QuestTurnIn.mdl",
26
- ]);
27
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWluaW1hcEljb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL21pbmltYXBJY29ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFXQSxJQUFZLGVBVVg7QUFWRCxXQUFZLGVBQWU7SUFDdkIseUVBQXNELENBQUE7SUFDdEQscUVBQWtELENBQUE7SUFDbEQsdUZBQW9FLENBQUE7SUFDcEUsMkZBQXdFLENBQUE7SUFDeEUsdUVBQW9ELENBQUE7SUFDcEQseURBQXNDLENBQUE7SUFDdEMseURBQXNDLENBQUE7SUFDdEMsK0VBQTRELENBQUE7SUFDNUQseURBQXNDLENBQUE7QUFDMUMsQ0FBQyxFQVZXLGVBQWUsK0JBQWYsZUFBZSxRQVUxQjtBQUVZLFFBQUEsbUJBQW1CLEdBQUcsSUFBSSxHQUFHLENBQWdCO0lBQ3RELHVDQUF1QztJQUN2QywrQkFBK0I7SUFDL0IsK0JBQStCO0lBQy9CLDBDQUEwQztJQUMxQyxxQ0FBcUM7SUFDckMsK0JBQStCO0lBQy9CLDhDQUE4QztJQUM5QyxnREFBZ0Q7SUFDaEQsc0NBQXNDO0NBQ3pDLENBQUMsQ0FBQyJ9
@@ -1,175 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.PlayerColorHex = void 0;
4
- exports.tColor = tColor;
5
- exports.ptColor = ptColor;
6
- exports.notifyPlayer = notifyPlayer;
7
- exports.displayError = displayError;
8
- exports.getRelativeAngleToUnit = getRelativeAngleToUnit;
9
- exports.useEffects = useEffects;
10
- exports.useTempEffect = useTempEffect;
11
- const w3ts_1 = require("w3ts");
12
- function tColor(text, color, hex, alpha) {
13
- if (color) {
14
- return `|cff${properColorHexes.get(color) || "FFFFFF"}${alpha || ""}${text}|r`;
15
- }
16
- else if (hex) {
17
- return `|cff${hex}${alpha || ""}${text}|r`;
18
- }
19
- return String(text);
20
- }
21
- /**
22
- * Colorizes the string according to the map player
23
- */
24
- function ptColor(player, text) {
25
- return `${tColor(text, undefined, playerColors[player.id])}`;
26
- }
27
- const properColorHexes = new Map([
28
- ["goldenrod", "ffcc00"],
29
- ["green", "00FF00"],
30
- ["yellow", "FFFF00"],
31
- ["red", "FF0000"],
32
- ["magenta", "FF00FF"],
33
- ["player1-red", "ff0303"],
34
- ["player2-blue", "0042ff"],
35
- ["player3-teal", "1ce6b9"],
36
- ["player4-purple", "540081"],
37
- ["player5-yellow", "fffc00"],
38
- ["player6-orange", "fe8a0e"],
39
- ]);
40
- // enum PlayerColors {
41
- // Player1 = "ff0303", // Red
42
- // Player2 = "0042ff", // Blue
43
- // Player3 = "1be7ba", // Teal
44
- // Player4 = "550081", // Purple
45
- // Player5 = "fefc00", // Yellow
46
- // Player6 = "fe890d", // Orange
47
- // Player7 = "21bf00", // Green
48
- // Player8 = "e45caf", // Pink
49
- // Player9 = "939596", // Gray
50
- // Player10 = "7ebff1", // Light Blue
51
- // Player11 = "106247", // Dark Green
52
- // Player12 = "4f2b05", // Brown
53
- // Player13 = "9c0000", // Maroon
54
- // Player14 = "0000c3", // Navy
55
- // Player15 = "00ebff", // Turquoise
56
- // Player16 = "bd00ff", // Violet
57
- // Player17 = "ecce87", // Wheat
58
- // Player18 = "f7a58b", // Peach
59
- // Player19 = "bfff81", // Mint
60
- // Player20 = "dbb8eb", // Lavender
61
- // Player21 = "4f5055", // Coal
62
- // Player22 = "ecf0ff", // Snow
63
- // Player23 = "00781e", // Emerald
64
- // Player24 = "a56f34", // Peanut
65
- // PlayerNeutral = "2e2d2e", // Black
66
- // }
67
- var PlayerColorHex;
68
- (function (PlayerColorHex) {
69
- PlayerColorHex["Red"] = "ff0303";
70
- PlayerColorHex["Blue"] = "0042ff";
71
- PlayerColorHex["Teal"] = "1be7ba";
72
- PlayerColorHex["Purple"] = "550081";
73
- PlayerColorHex["Yellow"] = "fefc00";
74
- PlayerColorHex["Orange"] = "fe890d";
75
- PlayerColorHex["Green"] = "21bf00";
76
- PlayerColorHex["Pink"] = "e45caf";
77
- PlayerColorHex["Gray"] = "939596";
78
- PlayerColorHex["LightBlue"] = "7ebff1";
79
- PlayerColorHex["DarkGreen"] = "106247";
80
- PlayerColorHex["Brown"] = "4f2b05";
81
- PlayerColorHex["Maroon"] = "9c0000";
82
- PlayerColorHex["Navy"] = "0000c3";
83
- PlayerColorHex["Turquoise"] = "00ebff";
84
- PlayerColorHex["Violet"] = "bd00ff";
85
- PlayerColorHex["Wheat"] = "ecce87";
86
- PlayerColorHex["Peach"] = "f7a58b";
87
- PlayerColorHex["Mint"] = "bfff81";
88
- PlayerColorHex["Lavender"] = "dbb8eb";
89
- PlayerColorHex["Coal"] = "4f5055";
90
- PlayerColorHex["Snow"] = "ecf0ff";
91
- PlayerColorHex["Emerald"] = "00781e";
92
- PlayerColorHex["Peanut"] = "a56f34";
93
- PlayerColorHex["Black"] = "2e2d2e";
94
- })(PlayerColorHex || (exports.PlayerColorHex = PlayerColorHex = {}));
95
- const playerColors = [
96
- "ff0303", // Player 1: Red
97
- "0042ff", // Player 2: Blue
98
- "1be7ba", // Player 3: Teal
99
- "550081", // Player 4: Purple
100
- "fefc00", // Player 5: Yellow
101
- "fe890d", // Player 6: Orange
102
- "21bf00", // Player 7: Green
103
- "e45caf", // Player 8: Pink
104
- "939596", // Player 9: Gray
105
- "7ebff1", // Player 10: Light Blue
106
- "106247", // Player 11: Dark Green
107
- "4f2b05", // Player 12: Brown
108
- "9c0000", // Player 13: Maroon
109
- "0000c3", // Player 14: Navy
110
- "00ebff", // Player 15: Turquoise
111
- "bd00ff", // Player 16: Violet
112
- "ecce87", // Player 17: Wheat
113
- "f7a58b", // Player 18: Peach
114
- "bfff81", // Player 19: Mint
115
- "dbb8eb", // Player 20: Lavender
116
- "4f5055", // Player 21: Coal
117
- "ecf0ff", // Player 22: Snow
118
- "00781e", // Player 23: Emerald
119
- "a56f34", // Player 24: Peanut
120
- "2e2d2e", // Player Neutral: Black
121
- ];
122
- /**
123
- * Standardized format for notifying player of events.
124
- */
125
- function notifyPlayer(msg) {
126
- print(`${tColor("!", "goldenrod")} - ${msg}`);
127
- }
128
- function displayError(msg) {
129
- print(`[ ${tColor("WARNING", "red")} ]: ${msg}`);
130
- }
131
- /**
132
- * Returns degrees or radians?
133
- */
134
- function getRelativeAngleToUnit(unit, relativeUnit) {
135
- const locA = GetUnitLoc(unit.handle);
136
- const locB = GetUnitLoc(relativeUnit.handle);
137
- const angle = AngleBetweenPoints(locA, locB);
138
- RemoveLocation(locA);
139
- RemoveLocation(locB);
140
- return angle;
141
- }
142
- /**
143
- * Manages state of effects in this context so you don't have to!
144
- */
145
- function useEffects() {
146
- const effects = [];
147
- return {
148
- addEffect: (effect) => {
149
- if (effect) {
150
- effects.push(effect);
151
- }
152
- },
153
- /**
154
- * @returns reference to effects array
155
- */
156
- getEffects: () => {
157
- return effects;
158
- },
159
- destroyAllEffects: () => {
160
- effects.forEach((e) => {
161
- e.destroy();
162
- });
163
- },
164
- };
165
- }
166
- function useTempEffect(effect, duration = 1.5) {
167
- if (effect) {
168
- const timer = w3ts_1.Timer.create();
169
- timer.start(duration, false, () => {
170
- effect.destroy();
171
- timer.destroy();
172
- });
173
- }
174
- }
175
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlzYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9taXNjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUlBLHdCQVFDO0FBS0QsMEJBRUM7QUFzR0Qsb0NBRUM7QUFFRCxvQ0FFQztBQUtELHdEQVNDO0FBS0QsZ0NBcUJDO0FBRUQsc0NBU0M7QUFsTEQsK0JBQXNEO0FBSXRELFNBQWdCLE1BQU0sQ0FBQyxJQUFxQixFQUFFLEtBQTJCLEVBQUUsR0FBb0MsRUFBRSxLQUFjO0lBQzNILElBQUksS0FBSyxFQUFFLENBQUM7UUFDUixPQUFPLE9BQU8sZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLFFBQVEsR0FBRyxLQUFLLElBQUksRUFBRSxHQUFHLElBQUksSUFBSSxDQUFDO0lBQ25GLENBQUM7U0FBTSxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ2IsT0FBTyxPQUFPLEdBQUcsR0FBRyxLQUFLLElBQUksRUFBRSxHQUFHLElBQUksSUFBSSxDQUFDO0lBQy9DLENBQUM7SUFFRCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN4QixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixPQUFPLENBQUMsTUFBaUIsRUFBRSxJQUFZO0lBQ25ELE9BQU8sR0FBRyxNQUFNLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxZQUFZLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUNqRSxDQUFDO0FBRUQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsQ0FBdUI7SUFDbkQsQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDO0lBQ3ZCLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQztJQUNuQixDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUM7SUFDcEIsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDO0lBQ2pCLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQztJQUNyQixDQUFDLGFBQWEsRUFB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
@@ -1,194 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.applyForce = applyForce;
4
- exports.applyForceForEffect = applyForceForEffect;
5
- // import { WTS_Units } from "src/enums/WTS_Enums";
6
- // import { PlayerIndex } from "src/player/player-data";
7
- const w3ts_1 = require("w3ts");
8
- const globals_1 = require("w3ts/globals");
9
- /**
10
- * @param angle degrees
11
- * @param unit
12
- * @param initialSpeed meters per second
13
- * @param affectHeight determines whether or not to change unit height whilst force is applied
14
- */
15
- function applyForce(angle, unit, initialSpeed, config) {
16
- const timer = w3ts_1.Timer.create();
17
- const refreshInterval = 0.01;
18
- const updatesPerSecond = 1 / refreshInterval;
19
- const frictionConstant = 4800; //meters per second friction decay
20
- let currentSpeed = initialSpeed;
21
- let timeElapsed = 0;
22
- const clickMoveOrder = 851971;
23
- const moveOrders = [
24
- 851986 /* OrderId.Move */,
25
- 851984 /* OrderId.Attackground */,
26
- 851990 /* OrderId.Patrol */,
27
- 851983 /* OrderId.Attack */,
28
- clickMoveOrder,
29
- ];
30
- let forceDummyUnit = undefined;
31
- const defaultX = 11800;
32
- const defaultY = -5700;
33
- //Cancel unit commands - if a unit already has a move command and are applied a force, they will bug out sometimes and walk in the opposite direction
34
- // unit.issueImmediateOrder(OrderId.Stop);
35
- /**
36
- * Prematurely end the force effect
37
- */
38
- function destroyForceEffect(runOnEnd = false) {
39
- if (runOnEnd && config?.onEnd) {
40
- config.onEnd();
41
- }
42
- ResetUnitAnimation(unit.handle);
43
- forceDummyUnit?.destroy();
44
- timer.destroy();
45
- }
46
- /**
47
- * These are the positions the unit would be if there were no minor disturbances
48
- */
49
- let theoreticalX = unit.x;
50
- let theoreticalY = unit.y;
51
- /**
52
- * The distance the true unit position can be from the theoretical position. Helps stop sliding against walls, etc.
53
- */
54
- // const BREAK_DISTANCE = 100;
55
- if (!forceDummyUnit) {
56
- forceDummyUnit = w3ts_1.Unit.create(globals_1.Players[config.dummyUnitPlayerIndex], config.dummyUnitPlayerIndex, defaultX, defaultY);
57
- }
58
- // unit.issueImmediateOrder(OrderId.Stop);
59
- if (config?.animationIndexNumber) {
60
- ResetUnitAnimation(unit.handle);
61
- SetUnitAnimationByIndex(unit.handle, config.animationIndexNumber);
62
- }
63
- timer.start(refreshInterval, true, () => {
64
- //If for whatever reason the unit no longer exists.
65
- if (!unit) {
66
- destroyForceEffect();
67
- return destroyForceEffect;
68
- }
69
- // if (distanceBetweenPoints(unit.x, unit.y, theoreticalX, theoreticalY) > BREAK_DISTANCE) {
70
- // print("unit was to far away from theoretical distance");
71
- // const e = Effect.create("Abilities\\Spells\\Other\\TalkToMe\\TalkToMe", theoreticalX, theoreticalY);
72
- // e?.setScaleMatrix(2, 2, 2);
73
- // unit.issueImmediateOrder(OrderId.Stop);
74
- // destroyForceEffect(true);
75
- // return;
76
- // }
77
- //if the unit's move speed vector is greater than the remaining applied force vector then we may stop the applied force function; should only run while the unit has the move order
78
- // if (config?.obeyPathing && !config.strictPathing && currentSpeed > unit.moveSpeed) {
79
- // unit.issueImmediateOrder(OrderId.Stop);
80
- // }
81
- //should probably only do strict pathing so nothing else interfers with the unit moving
82
- if (forceDummyUnit && config?.strictPathing) {
83
- const isWindWalked = UnitHasBuffBJ(forceDummyUnit.handle, FourCC("BOwk"));
84
- if (!isWindWalked) {
85
- forceDummyUnit.issueImmediateOrder(852129 /* OrderId.Windwalk */);
86
- }
87
- // forceDummyUnit.issueImmediateOrder(OrderId.Stop);
88
- //Move dummy to the position we want the unit to be in
89
- forceDummyUnit.x = unit.x;
90
- forceDummyUnit.y = unit.y;
91
- forceDummyUnit.issueImmediateOrder(851972 /* OrderId.Stop */);
92
- //flooring values since it can be off sometimes by a thousandth
93
- if (Math.floor(forceDummyUnit.x) !== Math.floor(unit.x) ||
94
- Math.floor(forceDummyUnit.y) !== Math.floor(unit.y)) {
95
- // print(`Collision detected! Dummy x: ${forceDummyUnit.x} y: ${forceDummyUnit.y} Unit x: ${unit.x} y: ${unit.y}`);
96
- const e = w3ts_1.Effect.create("Abilities\\Spells\\Other\\TalkToMe\\TalkToMe", forceDummyUnit.x, forceDummyUnit.y);
97
- e?.setScaleMatrix(2, 2, 2);
98
- destroyForceEffect(true);
99
- return;
100
- }
101
- }
102
- const xVelocity = (currentSpeed / updatesPerSecond) * Math.cos(Deg2Rad(angle));
103
- const yVelocity = (currentSpeed / updatesPerSecond) * Math.sin(Deg2Rad(angle));
104
- //Complete execution when current speed of the initial force has decayed
105
- if (currentSpeed <= 0) {
106
- destroyForceEffect(true);
107
- return;
108
- }
109
- //Runs when the force is first applied
110
- if (config?.onStart && currentSpeed === initialSpeed) {
111
- config.onStart(currentSpeed, timeElapsed);
112
- }
113
- //Runs at any point while the function is executing
114
- if (config?.whileActive) {
115
- config.whileActive(currentSpeed, timeElapsed);
116
- }
117
- theoreticalX += xVelocity;
118
- theoreticalY += yVelocity;
119
- //basically the same thing now since we are no longer issuing the stop command on the unit.
120
- //also the moment another force is applied to the unit the previous force will stop being applied.
121
- if (config?.strictPathing) {
122
- unit.x = theoreticalX;
123
- unit.y = theoreticalY;
124
- }
125
- else {
126
- unit.x += xVelocity;
127
- unit.y += yVelocity;
128
- }
129
- timeElapsed += refreshInterval;
130
- if (config?.sustainedForceDuration &&
131
- timeElapsed <= config.sustainedForceDuration) {
132
- return;
133
- }
134
- currentSpeed -= frictionConstant / updatesPerSecond;
135
- });
136
- return { destroyForceEffect };
137
- }
138
- /**
139
- * @param angle degrees
140
- * @param effect
141
- * @param initialSpeed meters per second
142
- * @param affectHeight determines whether or not to change unit height whilst force is applied
143
- */
144
- function applyForceForEffect(angle, effect, initialSpeed, config) {
145
- const timer = w3ts_1.Timer.create();
146
- const refreshInterval = 0.01;
147
- const updatesPerSecond = 1 / refreshInterval;
148
- const frictionConstant = 1200; //meters per second friction decay
149
- let currentSpeed = initialSpeed;
150
- let timeElapsed = 0;
151
- //Cancel unit commands - if a unit already has a move command and are applied a force, they will bug out sometimes and walk in the opposite direction
152
- timer.start(refreshInterval, true, () => {
153
- //if the unit's move speed vector is greater than the remaining applied force vector then we may stop the applied force function; should only run while the unit has the move order
154
- const xVelocity = (currentSpeed / updatesPerSecond) * Math.cos(Deg2Rad(angle));
155
- const yVelocity = (currentSpeed / updatesPerSecond) * Math.sin(Deg2Rad(angle));
156
- //On end hook runs before the timer is destroyed and the function ends
157
- if (config?.onEnd && currentSpeed <= 0) {
158
- config.onEnd(currentSpeed, timeElapsed);
159
- }
160
- //Complete execution when current speed of the initial force has decayed
161
- if (currentSpeed <= 0) {
162
- timer.destroy();
163
- return;
164
- }
165
- //Runs when the force is first applied
166
- if (config?.onStart && currentSpeed === initialSpeed) {
167
- config.onStart(currentSpeed, timeElapsed);
168
- }
169
- //Runs at any point while the function is executing
170
- if (config?.whileActive) {
171
- config.whileActive(currentSpeed, timeElapsed);
172
- }
173
- effect.x += xVelocity;
174
- effect.y += yVelocity;
175
- timeElapsed += refreshInterval;
176
- if (config?.sustainedForceDuration &&
177
- timeElapsed <= config.sustainedForceDuration) {
178
- return;
179
- }
180
- currentSpeed -= frictionConstant / updatesPerSecond;
181
- });
182
- function destroyForceEffect() {
183
- timer.destroy();
184
- }
185
- return { destroyForceEffect };
186
- }
187
- // const unitIsMovingVector_x = (unit.moveSpeed / updatesPerSecond) * Math.cos(Deg2Rad(unit.facing));
188
- // const unitIsMovingVector_y = (unit.moveSpeed / updatesPerSecond) * Math.sin(Deg2Rad(unit.facing));
189
- // if ((moveOrders.includes(unit.currentOrder) && unitIsMovingVector_x > xVelocity) || unitIsMovingVector_y > yVelocity) {
190
- // print("moving velocity exceeded applied force velocity");
191
- // timer.destroy();
192
- // return;
193
- // }
194
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGh5c2ljcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9waHlzaWNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBNENBLGdDQTBLQztBQVFELGtEQStEQztBQTdSRCxtREFBbUQ7QUFDbkQsd0RBQXdEO0FBQ3hELCtCQUEyQztBQUMzQywwQ0FBZ0Q7QUFtQ2hEOzs7OztHQUtHO0FBQ0gsU0FBZ0IsVUFBVSxDQUN4QixLQUFhLEVBQ2IsSUFBVSxFQUNWLFlBQW9CLEVBQ3BCLE1BQXdCO0lBRXhCLE1BQU0sS0FBSyxHQUFHLFlBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUM3QixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUM7SUFDN0IsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLEdBQUcsZUFBZSxDQUFDO0lBQzdDLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLENBQUMsa0NBQWtDO0lBQ2pFLElBQUksWUFBWSxHQUFHLFlBQVksQ0FBQztJQUNoQyxJQUFJLFdBQVcsR0FBRyxDQUFDLENBQUM7SUFFcEIsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDO0lBQzlCLE1BQU0sVUFBVSxHQUFHOzs7OztRQUtqQixjQUFjO0tBQ2YsQ0FBQztJQUVGLElBQUksY0FBYyxHQUFxQixTQUFTLENBQUM7SUFDakQsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDO0lBQ3ZCLE1BQU0sUUFBUSxHQUFHLENBQUMsSUFBSSxDQUFDO0lBRXZCLHFKQUFxSjtJQUNySiwwQ0FBMEM7SUFFMUM7O09BRUc7SUFDSCxTQUFTLGtCQUFrQixDQUFDLFdBQW9CLEtBQUs7UUFDbkQsSUFBSSxRQUFRLElBQUksTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDO1lBQzlCLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNqQixDQUFDO1FBRUQsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2hDLGNBQWMsRUFBRSxPQUFPLEVBQUUsQ0FB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