warscript 0.0.1-dev.ee2345e → 0.0.1-dev.ef189a5

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 (261) hide show
  1. package/attributes.d.ts +6 -1
  2. package/attributes.lua +17 -1
  3. package/binaryreader.d.ts +1 -0
  4. package/binaryreader.lua +3 -0
  5. package/config.d.ts +5 -0
  6. package/config.lua +10 -0
  7. package/core/types/effect.d.ts +14 -6
  8. package/core/types/effect.lua +131 -35
  9. package/core/types/frame.d.ts +8 -1
  10. package/core/types/frame.lua +117 -22
  11. package/core/types/group.d.ts +0 -1
  12. package/core/types/image.d.ts +0 -1
  13. package/core/types/missile.d.ts +2 -2
  14. package/core/types/missile.lua +8 -2
  15. package/core/types/player.d.ts +16 -0
  16. package/core/types/player.lua +60 -15
  17. package/core/types/playerCamera.d.ts +2 -0
  18. package/core/types/playerCamera.lua +123 -5
  19. package/core/types/sound.d.ts +17 -24
  20. package/core/types/sound.lua +99 -24
  21. package/core/types/tileCell.d.ts +11 -1
  22. package/core/types/tileCell.lua +97 -0
  23. package/core/types/timer.d.ts +9 -8
  24. package/core/types/timer.lua +45 -23
  25. package/core/types/unit.lua +8 -0
  26. package/core/util.d.ts +1 -1
  27. package/core/util.lua +18 -1
  28. package/decl/index.d.ts +1 -0
  29. package/decl/native.d.ts +846 -790
  30. package/engine/ability.d.ts +1 -1
  31. package/engine/behavior.d.ts +22 -11
  32. package/engine/behavior.lua +175 -73
  33. package/engine/behaviour/ability/always-enabled.d.ts +7 -0
  34. package/engine/behaviour/ability/always-enabled.lua +31 -0
  35. package/engine/behaviour/ability/apply-buff.d.ts +8 -5
  36. package/engine/behaviour/ability/apply-buff.lua +36 -4
  37. package/engine/behaviour/ability/apply-unit-behavior.d.ts +6 -1
  38. package/engine/behaviour/ability/apply-unit-behavior.lua +1 -0
  39. package/engine/behaviour/ability/damage.d.ts +39 -11
  40. package/engine/behaviour/ability/damage.lua +83 -37
  41. package/engine/behaviour/ability/emulate-impact.d.ts +6 -0
  42. package/engine/behaviour/ability/emulate-impact.lua +43 -0
  43. package/engine/behaviour/ability/heal.d.ts +33 -6
  44. package/engine/behaviour/ability/heal.lua +89 -10
  45. package/engine/behaviour/ability/instant-impact.d.ts +2 -2
  46. package/engine/behaviour/ability/instant-impact.lua +4 -15
  47. package/engine/behaviour/ability/on-command-impact.d.ts +8 -0
  48. package/engine/behaviour/ability/on-command-impact.lua +25 -0
  49. package/engine/behaviour/ability/remove-buffs.d.ts +25 -0
  50. package/engine/behaviour/ability/remove-buffs.lua +49 -0
  51. package/engine/behaviour/ability/restore-mana.d.ts +15 -0
  52. package/engine/behaviour/ability/restore-mana.lua +29 -0
  53. package/engine/behaviour/ability.d.ts +29 -5
  54. package/engine/behaviour/ability.lua +154 -27
  55. package/engine/behaviour/unit/stun-immunity.d.ts +11 -6
  56. package/engine/behaviour/unit/stun-immunity.lua +53 -28
  57. package/engine/behaviour/unit.d.ts +48 -4
  58. package/engine/behaviour/unit.lua +282 -2
  59. package/engine/buff.d.ts +114 -44
  60. package/engine/buff.lua +525 -224
  61. package/engine/game-map.d.ts +7 -0
  62. package/engine/game-map.lua +32 -0
  63. package/engine/internal/ability.d.ts +23 -14
  64. package/engine/internal/ability.lua +129 -85
  65. package/engine/internal/item/ability.lua +162 -4
  66. package/engine/internal/item+owner.lua +12 -6
  67. package/engine/internal/item.d.ts +20 -19
  68. package/engine/internal/item.lua +191 -74
  69. package/engine/internal/mechanics/ability-duration.lua +1 -1
  70. package/engine/internal/misc/ability-disable-counter.d.ts +2 -0
  71. package/engine/internal/misc/ability-disable-counter.lua +13 -0
  72. package/engine/internal/misc/damage-metadata-by-target.d.ts +2 -0
  73. package/engine/internal/misc/damage-metadata-by-target.lua +5 -0
  74. package/engine/internal/misc/frame-coordinates.d.ts +2 -0
  75. package/engine/internal/misc/frame-coordinates.lua +21 -0
  76. package/engine/internal/misc/get-terrain-z.d.ts +2 -0
  77. package/engine/internal/misc/get-terrain-z.lua +11 -0
  78. package/engine/internal/misc/player-local-handle.d.ts +2 -0
  79. package/engine/internal/misc/player-local-handle.lua +5 -0
  80. package/engine/internal/object-data/auto-attack-speed-increase.d.ts +1 -1
  81. package/engine/internal/object-data/auto-attack-speed-increase.lua +2 -0
  82. package/engine/internal/object-data/evasion-probability.d.ts +2 -0
  83. package/engine/internal/object-data/evasion-probability.lua +16 -0
  84. package/engine/internal/unit/ability.d.ts +45 -1
  85. package/engine/internal/unit/ability.lua +128 -17
  86. package/engine/internal/unit/add-item-to-slot-init.d.ts +2 -0
  87. package/engine/internal/unit/add-item-to-slot-init.lua +23 -0
  88. package/engine/internal/unit/add-item-to-slot.d.ts +2 -0
  89. package/engine/internal/unit/add-item-to-slot.lua +52 -0
  90. package/engine/internal/unit/allowed-targets.d.ts +1 -1
  91. package/engine/internal/unit/allowed-targets.lua +9 -1
  92. package/engine/internal/unit/bonus.d.ts +11 -8
  93. package/engine/internal/unit/bonus.lua +23 -1
  94. package/engine/internal/unit/fly-height.d.ts +7 -0
  95. package/engine/internal/unit/fly-height.lua +20 -0
  96. package/engine/internal/unit/ignore-events-items.d.ts +2 -0
  97. package/engine/internal/unit/ignore-events-items.lua +5 -0
  98. package/engine/internal/unit/item.d.ts +24 -0
  99. package/engine/internal/unit/item.lua +78 -0
  100. package/engine/internal/unit/main-selected.d.ts +13 -0
  101. package/engine/internal/unit/main-selected.lua +36 -0
  102. package/engine/internal/unit/order.d.ts +20 -0
  103. package/engine/internal/unit/order.lua +136 -0
  104. package/engine/internal/unit/scale.d.ts +7 -0
  105. package/engine/internal/unit/scale.lua +20 -0
  106. package/engine/internal/unit+ability.lua +12 -3
  107. package/engine/internal/unit+damage.d.ts +2 -11
  108. package/engine/internal/unit+damage.lua +10 -14
  109. package/engine/internal/unit+spellSteal.lua +1 -2
  110. package/engine/internal/unit+transport.lua +4 -10
  111. package/engine/internal/unit-missile-launch.lua +63 -13
  112. package/engine/internal/unit.d.ts +96 -28
  113. package/engine/internal/unit.lua +648 -241
  114. package/engine/internal/utility.lua +12 -0
  115. package/engine/lightning.d.ts +12 -5
  116. package/engine/lightning.lua +48 -14
  117. package/engine/local-client.d.ts +9 -2
  118. package/engine/local-client.lua +112 -0
  119. package/engine/object-data/auxiliary/animation-name.d.ts +1 -0
  120. package/engine/object-data/auxiliary/animation-name.lua +16 -0
  121. package/engine/object-data/auxiliary/armor-type.d.ts +11 -0
  122. package/engine/object-data/auxiliary/armor-type.lua +46 -0
  123. package/engine/object-data/auxiliary/attachment-preset.d.ts +7 -3
  124. package/engine/object-data/auxiliary/attachment-preset.lua +4 -3
  125. package/engine/object-data/auxiliary/attack-type.d.ts +7 -8
  126. package/engine/object-data/auxiliary/attack-type.lua +42 -0
  127. package/engine/object-data/auxiliary/combat-classification.d.ts +0 -2
  128. package/engine/object-data/auxiliary/movement-type.d.ts +7 -7
  129. package/engine/object-data/auxiliary/movement-type.lua +22 -0
  130. package/engine/object-data/auxiliary/sound-eax.d.ts +10 -0
  131. package/engine/object-data/auxiliary/sound-eax.lua +2 -0
  132. package/engine/object-data/auxiliary/sound-preset-name.d.ts +5 -1
  133. package/engine/object-data/auxiliary/tech-tree-dependency.d.ts +1 -1
  134. package/engine/object-data/auxiliary/unit-attribute.d.ts +6 -0
  135. package/engine/object-data/auxiliary/unit-attribute.lua +9 -0
  136. package/engine/object-data/entry/ability-type/berserk.d.ts +2 -0
  137. package/engine/object-data/entry/ability-type/berserk.lua +13 -0
  138. package/engine/object-data/entry/ability-type/blank-configurable.d.ts +0 -1
  139. package/engine/object-data/entry/ability-type/blank-configurable.lua +12 -1
  140. package/engine/object-data/entry/ability-type/blank-passive.d.ts +0 -1
  141. package/engine/object-data/entry/ability-type/carrion-swarm.d.ts +14 -0
  142. package/engine/object-data/entry/ability-type/carrion-swarm.lua +65 -0
  143. package/engine/object-data/entry/ability-type/channel.d.ts +0 -1
  144. package/engine/object-data/entry/ability-type/disease-cloud.lua +2 -2
  145. package/engine/object-data/entry/ability-type/engineering-upgrade.lua +2 -2
  146. package/engine/object-data/entry/ability-type/ensnare.d.ts +12 -0
  147. package/engine/object-data/entry/ability-type/ensnare.lua +52 -0
  148. package/engine/object-data/entry/ability-type/feral-spirit.lua +2 -2
  149. package/engine/object-data/entry/ability-type/mine.d.ts +10 -0
  150. package/engine/object-data/entry/ability-type/mine.lua +39 -0
  151. package/engine/object-data/entry/ability-type/permanent-invisibility.d.ts +8 -0
  152. package/engine/object-data/entry/ability-type/permanent-invisibility.lua +26 -0
  153. package/engine/object-data/entry/ability-type/phase-shift.d.ts +10 -0
  154. package/engine/object-data/entry/ability-type/phase-shift.lua +39 -0
  155. package/engine/object-data/entry/ability-type/phoenix-morph.lua +4 -4
  156. package/engine/object-data/entry/ability-type/raise-dead.d.ts +17 -0
  157. package/engine/object-data/entry/ability-type/raise-dead.lua +78 -0
  158. package/engine/object-data/entry/ability-type/shock-wave.d.ts +4 -0
  159. package/engine/object-data/entry/ability-type/shock-wave.lua +26 -0
  160. package/engine/object-data/entry/ability-type/slow-poison.d.ts +10 -0
  161. package/engine/object-data/entry/ability-type/slow-poison.lua +58 -0
  162. package/engine/object-data/entry/ability-type/spirit-touch.d.ts +2 -2
  163. package/engine/object-data/entry/ability-type/spirit-touch.lua +6 -6
  164. package/engine/object-data/entry/ability-type/summon-quilbeast.lua +2 -2
  165. package/engine/object-data/entry/ability-type/summon-water-elemental.lua +2 -2
  166. package/engine/object-data/entry/ability-type/web.d.ts +12 -0
  167. package/engine/object-data/entry/ability-type/web.lua +52 -0
  168. package/engine/object-data/entry/ability-type.d.ts +19 -18
  169. package/engine/object-data/entry/ability-type.lua +93 -36
  170. package/engine/object-data/entry/buff-type/applicable.d.ts +0 -1
  171. package/engine/object-data/entry/buff-type/applicable.lua +18 -37
  172. package/engine/object-data/entry/buff-type/blank.d.ts +0 -1
  173. package/engine/object-data/entry/buff-type.d.ts +6 -13
  174. package/engine/object-data/entry/buff-type.lua +13 -29
  175. package/engine/object-data/entry/destructible-type.d.ts +6 -3
  176. package/engine/object-data/entry/destructible-type.lua +12 -0
  177. package/engine/object-data/entry/item-type/blank.d.ts +0 -1
  178. package/engine/object-data/entry/item-type.d.ts +15 -2
  179. package/engine/object-data/entry/item-type.lua +93 -2
  180. package/engine/object-data/entry/lightning-type.d.ts +1 -2
  181. package/engine/object-data/entry/sound-preset.d.ts +33 -0
  182. package/engine/object-data/entry/sound-preset.lua +140 -0
  183. package/engine/object-data/entry/unit-type.d.ts +62 -7
  184. package/engine/object-data/entry/unit-type.lua +524 -75
  185. package/engine/object-data/entry/upgrade/blank.d.ts +0 -1
  186. package/engine/object-data/entry/upgrade.d.ts +1 -2
  187. package/engine/object-data/entry/upgrade.lua +4 -4
  188. package/engine/object-data/entry.d.ts +18 -17
  189. package/engine/object-data/entry.lua +60 -32
  190. package/engine/object-data/utility/object-data-entry-id-generator.lua +7 -0
  191. package/engine/object-field/ability.d.ts +28 -5
  192. package/engine/object-field/ability.lua +59 -5
  193. package/engine/object-field/unit.d.ts +69 -3
  194. package/engine/object-field/unit.lua +264 -7
  195. package/engine/object-field.d.ts +23 -7
  196. package/engine/object-field.lua +311 -124
  197. package/engine/random.d.ts +10 -0
  198. package/engine/random.lua +22 -0
  199. package/engine/standard/entries/buff-type.d.ts +3 -0
  200. package/engine/standard/entries/buff-type.lua +3 -0
  201. package/engine/standard/entries/sound-preset.d.ts +10 -0
  202. package/engine/standard/entries/sound-preset.lua +10 -0
  203. package/engine/standard/entries/unit-type.d.ts +39 -1
  204. package/engine/standard/entries/unit-type.lua +39 -1
  205. package/engine/standard/fields/ability.d.ts +5 -3
  206. package/engine/standard/fields/ability.lua +5 -3
  207. package/engine/standard/fields/unit.d.ts +6 -0
  208. package/engine/standard/fields/unit.lua +11 -0
  209. package/engine/synchronization.d.ts +11 -0
  210. package/engine/synchronization.lua +77 -0
  211. package/engine/text-tag.d.ts +36 -2
  212. package/engine/text-tag.lua +250 -10
  213. package/engine/unit.d.ts +6 -0
  214. package/engine/unit.lua +15 -2
  215. package/event.d.ts +2 -3
  216. package/event.lua +9 -5
  217. package/index.d.ts +1 -0
  218. package/index.lua +1 -0
  219. package/lualib_bundle.lua +146 -42
  220. package/math/vec2.d.ts +2 -9
  221. package/math.d.ts +0 -2
  222. package/net/socket.d.ts +7 -1
  223. package/net/socket.lua +45 -4
  224. package/network.d.ts +1 -0
  225. package/network.lua +3 -2
  226. package/objutil/ability.d.ts +0 -1
  227. package/objutil/buff.d.ts +0 -1
  228. package/objutil/buff.lua +3 -4
  229. package/objutil/object.d.ts +0 -1
  230. package/objutil/unit.d.ts +0 -1
  231. package/objutil/unit.lua +8 -0
  232. package/package.json +13 -14
  233. package/patch-lua.d.ts +0 -0
  234. package/patch-lua.lua +10 -0
  235. package/patch-lualib.lua +1 -1
  236. package/property.d.ts +55 -0
  237. package/property.lua +374 -0
  238. package/string.d.ts +30 -0
  239. package/string.lua +14 -0
  240. package/util/stream.d.ts +0 -1
  241. package/utility/arrays.d.ts +13 -5
  242. package/utility/arrays.lua +45 -3
  243. package/utility/bit-set.d.ts +0 -2
  244. package/utility/callback-array.d.ts +17 -0
  245. package/utility/callback-array.lua +61 -0
  246. package/utility/functions.d.ts +8 -0
  247. package/utility/functions.lua +13 -0
  248. package/utility/lazy.d.ts +2 -0
  249. package/utility/lazy.lua +14 -0
  250. package/utility/linked-set.d.ts +13 -3
  251. package/utility/linked-set.lua +27 -3
  252. package/utility/lua-maps.d.ts +16 -4
  253. package/utility/lua-maps.lua +53 -2
  254. package/utility/lua-sets.d.ts +3 -2
  255. package/utility/lua-sets.lua +7 -0
  256. package/utility/reflection.lua +11 -7
  257. package/utility/types.d.ts +4 -0
  258. package/core/mapbounds.d.ts +0 -8
  259. package/core/mapbounds.lua +0 -12
  260. package/core/types/order.d.ts +0 -25
  261. package/core/types/order.lua +0 -55
@@ -3,6 +3,8 @@ local __TS__New = ____lualib.__TS__New
3
3
  local ____exports = {}
4
4
  local ____exception = require("exception")
5
5
  local IllegalArgumentException = ____exception.IllegalArgumentException
6
+ local ____functions = require("utility.functions")
7
+ local identity = ____functions.identity
6
8
  local mathMax = math.max
7
9
  local mathMin = math.min
8
10
  local select = _G.select
@@ -47,6 +49,14 @@ ____exports.toLuaSet = function(array)
47
49
  end
48
50
  return result
49
51
  end
52
+ ____exports.contains = function(array, element)
53
+ for i = 1, #array do
54
+ if array[i] == element then
55
+ return true
56
+ end
57
+ end
58
+ return false
59
+ end
50
60
  ____exports.forEach = function(array, consumerOrKey, ...)
51
61
  if type(consumerOrKey) == "function" then
52
62
  for i = 1, #array do
@@ -120,6 +130,7 @@ ____exports.mapToLuaSet = function(array, transform)
120
130
  end
121
131
  return result
122
132
  end
133
+ ____exports.flatten = function(array) return ____exports.flatMap(array, identity) end
123
134
  ____exports.flatMap = function(array, transform)
124
135
  local result = {}
125
136
  local k = 1
@@ -178,9 +189,16 @@ ____exports.associate = function(array, keySelector, valueSelector)
178
189
  end
179
190
  ____exports.associateBy = function(array, keySelector)
180
191
  local result = {}
181
- for i = 1, #array do
182
- local value = array[i]
183
- result[keySelector(value)] = value
192
+ if type(keySelector) == "function" then
193
+ for i = 1, #array do
194
+ local value = array[i]
195
+ result[keySelector(value)] = value
196
+ end
197
+ else
198
+ for i = 1, #array do
199
+ local value = array[i]
200
+ result[value[keySelector]] = value
201
+ end
184
202
  end
185
203
  return result
186
204
  end
@@ -251,6 +269,30 @@ ____exports.max = function(array)
251
269
  end
252
270
  return mathMax(table.unpack(array))
253
271
  end
272
+ ____exports.maxBy = function(array, selector, ...)
273
+ local result = nil
274
+ local maxValue = -math.huge
275
+ if type(selector) == "function" then
276
+ for i = 1, #array do
277
+ local element = array[i]
278
+ local value = selector(element, ...)
279
+ if value > maxValue then
280
+ result = element
281
+ maxValue = value
282
+ end
283
+ end
284
+ else
285
+ for i = 1, #array do
286
+ local element = array[i]
287
+ local value = element[selector]
288
+ if value > maxValue then
289
+ result = element
290
+ maxValue = value
291
+ end
292
+ end
293
+ end
294
+ return result
295
+ end
254
296
  ____exports.intersperse = function(array, delimiter)
255
297
  local result = {}
256
298
  local length = #array
@@ -1,5 +1,3 @@
1
- /// <reference types="@warscript/language-extensions" />
2
- /// <reference types="@typescript-to-lua/language-extensions" />
3
1
  /** @noSelfInFile */
4
2
  interface IBitSet<T extends number> {
5
3
  readonly has: LuaBitwiseAndEqualsRightMethod<T>;
@@ -0,0 +1,17 @@
1
+ /** @noSelfInFile */
2
+ type Callback = {
3
+ readonly __callback: unique symbol;
4
+ };
5
+ export type CallbackId = number & {
6
+ readonly __callbackId: unique symbol;
7
+ };
8
+ export type CallbackArray = {
9
+ readonly __callbackArray: unique symbol;
10
+ } & Callback[];
11
+ export declare const callbackArray: () => CallbackArray;
12
+ export declare function addCallback<Args extends any[]>(this: void, array: CallbackArray, callback: (...args: Args) => unknown, ...args: Args): CallbackId;
13
+ export declare function clearCallbacks(this: void, array: CallbackArray): void;
14
+ export declare function consumeCallback(this: void, array: CallbackArray, id: CallbackId): void;
15
+ export declare function consumeCallbacks(this: void, array: CallbackArray): void;
16
+ export declare function invokeCallbacks(this: void, array: CallbackArray): void;
17
+ export {};
@@ -0,0 +1,61 @@
1
+ local ____exports = {}
2
+ local safeCall, tableUnpack
3
+ function ____exports.invokeCallbacks(array)
4
+ local length = array[1] or 2
5
+ local i = 2
6
+ while i ~= length do
7
+ local callback = array[i]
8
+ i = i + 1
9
+ local argsCount = array[i]
10
+ i = i + 1
11
+ safeCall(
12
+ callback,
13
+ tableUnpack(array, i, i + argsCount - 1)
14
+ )
15
+ i = i + argsCount
16
+ end
17
+ end
18
+ safeCall = warpack.safeCall
19
+ local select = _G.select
20
+ local tableMove = table.move
21
+ tableUnpack = table.unpack
22
+ ____exports.callbackArray = function() return {} end
23
+ local function doNothing()
24
+ end
25
+ function ____exports.addCallback(array, callback, ...)
26
+ local id = array[1] or 2
27
+ local i = id
28
+ array[i] = callback
29
+ local argsCount = select("#", ...)
30
+ i = i + 1
31
+ array[i] = argsCount
32
+ for j = 1, argsCount do
33
+ i = i + 1
34
+ array[i] = (select(j, ...))
35
+ end
36
+ array[1] = i + 1
37
+ return id
38
+ end
39
+ function ____exports.clearCallbacks(array)
40
+ local length = array[1] or 2
41
+ tableMove(array, length, length + length - 2, 1)
42
+ end
43
+ function ____exports.consumeCallback(array, id)
44
+ local callback = array[id]
45
+ array[id] = doNothing
46
+ id = id + 1
47
+ local argsCount = array[id]
48
+ id = id + 1
49
+ safeCall(
50
+ callback,
51
+ tableUnpack(array, id, id + argsCount - 1)
52
+ )
53
+ end
54
+ function ____exports.consumeCallbacks(array)
55
+ local length = array[1] or 2
56
+ ____exports.invokeCallbacks(array)
57
+ local newLength = array[1] or 2
58
+ tableMove(array, length, length + newLength - 3, 2)
59
+ array[1] = newLength - length + 2
60
+ end
61
+ return ____exports
@@ -3,3 +3,11 @@ export declare const apply: {
3
3
  <T, ConsumerParameters extends any[]>(object: T, consumer: (value: T, ...parameters: ConsumerParameters) => void, ...parameters: ConsumerParameters): T;
4
4
  <T, ConsumerParameters extends any[], K extends KeysOfType<T, (...parameters: ConsumerParameters) => void>>(object: T, key: K, ...parameters: ConsumerParameters): T;
5
5
  };
6
+ export declare const identity: <T>(value: T) => T;
7
+ export declare const firstArgument: <T>(value: T) => T;
8
+ export declare const secondArgument: <T>(_: unknown, value: T) => T;
9
+ export declare const thirdArgument: <T>(_first: unknown, _second: unknown, value: T) => T;
10
+ export declare const increment: (value: number) => number;
11
+ export declare const or: (lhs: boolean, rhs: boolean) => boolean;
12
+ export type Transform<T, R> = (<T, R>(value: T) => R) | KeysOfType<T, R>;
13
+ export declare const transform: <T, R>(object: T, transform: Transform<T, R>) => R;
@@ -87,4 +87,17 @@ ____exports.apply = function(object, transform, ...)
87
87
  end
88
88
  return object
89
89
  end
90
+ ____exports.identity = function(value) return value end
91
+ ____exports.firstArgument = ____exports.identity
92
+ ____exports.secondArgument = function(_, value) return value end
93
+ ____exports.thirdArgument = function(_first, _second, value) return value end
94
+ ____exports.increment = function(value) return value + 1 end
95
+ ____exports["or"] = function(lhs, rhs) return lhs or rhs end
96
+ ____exports.transform = function(object, transform)
97
+ if type(transform) == "function" then
98
+ return transform(object)
99
+ else
100
+ return object[transform]
101
+ end
102
+ end
90
103
  return ____exports
@@ -0,0 +1,2 @@
1
+ /** @noSelfInFile */
2
+ export declare const lazyRecord: <K extends keyof any, V>(initializer: (key: K) => V) => Readonly<Record<K, V>>;
@@ -0,0 +1,14 @@
1
+ local ____exports = {}
2
+ local rawset = _G.rawset
3
+ local setmetatable = _G.setmetatable
4
+ ____exports.lazyRecord = function(initializer)
5
+ return setmetatable(
6
+ {},
7
+ {__index = function(self, key)
8
+ local value = initializer(key)
9
+ rawset(self, key, value)
10
+ return value
11
+ end}
12
+ )
13
+ end
14
+ return ____exports
@@ -1,5 +1,5 @@
1
- /// <reference types="@typescript-to-lua/language-extensions" />
2
1
  /** @noSelfInFile */
2
+ import { NonEmptyArray, ReadonlyNonEmptyArray } from "./types";
3
3
  type IteratorState<T extends AnyNotNil> = {
4
4
  t: LuaMap<T, T>;
5
5
  n?: T;
@@ -19,6 +19,11 @@ export interface ReadonlyLinkedSet<T extends AnyNotNil> extends LuaPairsKeyItera
19
19
  toArray(): T[];
20
20
  sumOf(selector: ((value: T) => number) | KeysOfType<T, number>): number;
21
21
  }
22
+ export interface ReadonlyNonEmptyLinkedSet<T extends AnyNotNil> extends ReadonlyLinkedSet<T> {
23
+ first(): T;
24
+ last(): T;
25
+ toArray(): NonEmptyArray<T>;
26
+ }
22
27
  export interface LinkedSet<T extends AnyNotNil> extends LuaPairsKeyIterable<T> {
23
28
  readonly __linkedSet: unique symbol;
24
29
  }
@@ -31,6 +36,7 @@ export declare class LinkedSet<T extends AnyNotNil> implements ReadonlyLinkedSet
31
36
  copyOf(): LinkedSet<T>;
32
37
  first(): T | undefined;
33
38
  last(): T | undefined;
39
+ pop(): T | undefined;
34
40
  next(key: T): T | undefined;
35
41
  previous(key: T): T | undefined;
36
42
  add(key: T): boolean;
@@ -45,6 +51,10 @@ export declare class LinkedSet<T extends AnyNotNil> implements ReadonlyLinkedSet
45
51
  protected __pairs(this: LinkedSet<T>): LuaIterator<T | undefined, IteratorState<T>>;
46
52
  }
47
53
  export declare const emptyLinkedSet: <T extends AnyNotNil>() => ReadonlyLinkedSet<T>;
48
- export declare const linkedSetOf: <T extends AnyNotNil>(...elements: readonly T[]) => LinkedSet<T>;
49
- export declare const linkedSetOfNotNull: <T extends AnyNotNil>(...elements: readonly (T | null | undefined)[]) => LinkedSet<T>;
54
+ export declare const mutableLinkedSet: <T extends AnyNotNil>() => LinkedSet<T>;
55
+ export declare const mutableLinkedSetOf: <T extends AnyNotNil>(...elements: ReadonlyArray<T>) => LinkedSet<T>;
56
+ export declare const mutableLinkedSetOfNotNull: <T extends AnyNotNil>(...elements: readonly (T | undefined | null)[]) => LinkedSet<T>;
57
+ export declare const linkedSetOf: <T extends AnyNotNil>(...elements: ReadonlyArray<T>) => ReadonlyLinkedSet<T>;
58
+ export declare const linkedSetOfNotNull: <T extends AnyNotNil>(...elements: ReadonlyArray<T>) => ReadonlyLinkedSet<T>;
59
+ export declare const nonEmptyLinkedSetOf: <T extends AnyNotNil>(...elements: ReadonlyNonEmptyArray<T>) => ReadonlyNonEmptyLinkedSet<T>;
50
60
  export {};
@@ -42,6 +42,23 @@ end
42
42
  function LinkedSet.prototype.last(self)
43
43
  return self.l
44
44
  end
45
+ function LinkedSet.prototype.pop(self)
46
+ local f = self.f
47
+ if f == nil then
48
+ return nil
49
+ end
50
+ local n = self.n
51
+ local next = n[f]
52
+ n[f] = nil
53
+ self.f = next
54
+ if next ~= nil then
55
+ self.p[next] = nil
56
+ else
57
+ self.l = nil
58
+ end
59
+ self.s = self.s - 1
60
+ return f
61
+ end
45
62
  function LinkedSet.prototype.next(self, key)
46
63
  return self.n[key]
47
64
  end
@@ -107,8 +124,9 @@ function LinkedSet.prototype.forEach(self, action, ...)
107
124
  local n = self.n
108
125
  local c = self.f
109
126
  while c ~= nil do
127
+ local next = n[c]
110
128
  action(c, ...)
111
- c = n[c]
129
+ c = next
112
130
  end
113
131
  end
114
132
  function LinkedSet.prototype.toArray(self)
@@ -177,14 +195,17 @@ local EMPTY_LINKED_SET = __TS__New(EmptyLinkedSet)
177
195
  ____exports.emptyLinkedSet = function()
178
196
  return EMPTY_LINKED_SET
179
197
  end
180
- ____exports.linkedSetOf = function(...)
198
+ ____exports.mutableLinkedSet = function()
199
+ return __TS__New(____exports.LinkedSet)
200
+ end
201
+ ____exports.mutableLinkedSetOf = function(...)
181
202
  local linkedSet = __TS__New(____exports.LinkedSet)
182
203
  for i = 1, select("#", ...) do
183
204
  linkedSet:add((select(i, ...)))
184
205
  end
185
206
  return linkedSet
186
207
  end
187
- ____exports.linkedSetOfNotNull = function(...)
208
+ ____exports.mutableLinkedSetOfNotNull = function(...)
188
209
  local linkedSet = __TS__New(____exports.LinkedSet)
189
210
  for i = 1, select("#", ...) do
190
211
  local element = (select(i, ...))
@@ -194,4 +215,7 @@ ____exports.linkedSetOfNotNull = function(...)
194
215
  end
195
216
  return linkedSet
196
217
  end
218
+ ____exports.linkedSetOf = function(...) return ____exports.mutableLinkedSetOf(...) end
219
+ ____exports.linkedSetOfNotNull = function(...) return ____exports.mutableLinkedSetOfNotNull(...) end
220
+ ____exports.nonEmptyLinkedSetOf = function(...) return ____exports.linkedSetOf(...) end
197
221
  return ____exports
@@ -1,6 +1,18 @@
1
- /// <reference types="@typescript-to-lua/language-extensions" />
2
1
  /** @noSelfInFile */
3
2
  import { Flatten, TupleOf } from "./types";
4
- export declare const luaMapOf: <K extends AnyNotNil, V>(...pairs: Flatten<TupleOf<[K, V], 0 | 2 | 1 | 22 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 27 | 31 | 40 | 30 | 32 | 23 | 24 | 25 | 26 | 28 | 29 | 33 | 34 | 35 | 36 | 37 | 38 | 39>>) => LuaMap<K, V>;
5
- export declare const luaMapInvert: <K extends AnyNotNil, V extends AnyNotNil>(luaMap: LuaMap<K, V>) => LuaMap<V, K>;
6
- export declare const mapValues: <K extends AnyNotNil, V1, V2>(luaMap: LuaMap<K, V1>, transform: (value: V1) => V2) => LuaMap<K, V2>;
3
+ export declare const emptyLuaMap: <K extends AnyNotNil, V>() => ReadonlyLuaMap<K, V>;
4
+ export declare const mutableLuaMap: <K extends AnyNotNil, V>() => LuaMap<K, V>;
5
+ export declare const mutableWeakLuaMap: <K extends AnyNotNil, V>() => LuaMap<K, V>;
6
+ export declare const luaMapOf: <K extends AnyNotNil, V>(...pairs: Flatten<TupleOf<[K, V], 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40>>) => LuaMap<K, V>;
7
+ export declare const luaMapInvert: <K extends AnyNotNil, V extends AnyNotNil>(luaMap: ReadonlyLuaMap<K, V | undefined | null>) => LuaMap<V, K>;
8
+ export declare const toLuaMap: <K extends PropertyKey, V>(record: Record<K, V>) => LuaMap<K, V>;
9
+ export declare const flattenKeys: <K extends AnyNotNil, V>(luaMap: ReadonlyLuaMap<readonly K[], V> | ReadonlyLuaMap<K[], V>) => LuaMap<K, V>;
10
+ export declare const mapKeys: {
11
+ <K1 extends AnyNotNil, K2 extends AnyNotNil, V>(luaMap: ReadonlyLuaMap<K1, V>, transform: (value: K1) => K2): LuaMap<K2, V>;
12
+ <K1 extends AnyNotNil, K2 extends keyof K1, V>(luaMap: ReadonlyLuaMap<K1, V>, key: K2): K1[K2] extends AnyNotNil ? LuaMap<K1[K2], V> : never;
13
+ };
14
+ export declare const mapValues: {
15
+ <K extends AnyNotNil, V1, V2>(luaMap: ReadonlyLuaMap<K, V1>, transform: (value: V1) => V2): LuaMap<K, V2>;
16
+ <K extends AnyNotNil, V1, V2 extends keyof V1>(luaMap: ReadonlyLuaMap<K, V1>, key: V2): LuaMap<K, V1[V2]>;
17
+ };
18
+ export declare const getOrPut: <K extends AnyNotNil, V>(luaMap: LuaMap<K, V>, key: K, defaultValue: () => V) => V;
@@ -1,5 +1,17 @@
1
1
  local ____exports = {}
2
2
  local select = _G.select
3
+ local setmetatable = _G.setmetatable
4
+ local weakKeysMetatable = {__mode = "k"}
5
+ local EMPTY_LUA_MAP = {}
6
+ ____exports.emptyLuaMap = function()
7
+ return EMPTY_LUA_MAP
8
+ end
9
+ ____exports.mutableLuaMap = function()
10
+ return {}
11
+ end
12
+ ____exports.mutableWeakLuaMap = function()
13
+ return setmetatable({}, weakKeysMetatable)
14
+ end
3
15
  ____exports.luaMapOf = function(...)
4
16
  local luaMap = {}
5
17
  for i = 1, select("#", ...), 2 do
@@ -15,11 +27,50 @@ ____exports.luaMapInvert = function(luaMap)
15
27
  end
16
28
  return invertLuaMap
17
29
  end
30
+ ____exports.toLuaMap = function(record)
31
+ return record
32
+ end
33
+ ____exports.flattenKeys = function(luaMap)
34
+ local result = {}
35
+ for keys, value in pairs(luaMap) do
36
+ for ____, key in ipairs(keys) do
37
+ result[key] = value
38
+ end
39
+ end
40
+ return result
41
+ end
42
+ ____exports.mapKeys = function(luaMap, transform)
43
+ local result = {}
44
+ if type(transform) == "function" then
45
+ for key, value in pairs(luaMap) do
46
+ result[transform(key)] = value
47
+ end
48
+ else
49
+ for key, value in pairs(luaMap) do
50
+ result[key[transform]] = value
51
+ end
52
+ end
53
+ return result
54
+ end
18
55
  ____exports.mapValues = function(luaMap, transform)
19
56
  local result = {}
20
- for key, value in pairs(luaMap) do
21
- result[key] = transform(value)
57
+ if type(transform) == "function" then
58
+ for key, value in pairs(luaMap) do
59
+ result[key] = transform(value)
60
+ end
61
+ else
62
+ for key, value in pairs(luaMap) do
63
+ result[key] = value[transform]
64
+ end
22
65
  end
23
66
  return result
24
67
  end
68
+ ____exports.getOrPut = function(luaMap, key, defaultValue)
69
+ local value = luaMap[key]
70
+ if value == nil then
71
+ value = defaultValue()
72
+ luaMap[key] = value
73
+ end
74
+ return value
75
+ end
25
76
  return ____exports
@@ -1,6 +1,7 @@
1
- /// <reference types="@typescript-to-lua/language-extensions" />
2
1
  /** @noSelfInFile */
2
+ export declare const emptyLuaSet: <T extends AnyNotNil>() => ReadonlyLuaSet<T>;
3
+ export declare const mutableLuaSet: <T extends AnyNotNil>() => LuaSet<T>;
3
4
  export declare const luaSetOf: <T extends AnyNotNil>(...elements: readonly T[]) => LuaSet<T>;
4
- export declare const luaSetOfNotNull: <T extends AnyNotNil>(...elements: readonly (T | null | undefined)[]) => LuaSet<T>;
5
+ export declare const luaSetOfNotNull: <T extends AnyNotNil>(...elements: readonly (T | undefined | null)[]) => LuaSet<T>;
5
6
  export declare const luaSetIntersection: <T extends AnyNotNil>(firstLuaSet: ReadonlyLuaSet<T>, secondLuaSet: ReadonlyLuaSet<T>) => LuaSet<T>;
6
7
  export declare const luaSetContainsAnyOf: <T extends AnyNotNil>(luaSet: ReadonlyLuaSet<T>, ...elements: readonly T[]) => boolean;
@@ -1,5 +1,12 @@
1
1
  local ____exports = {}
2
2
  local select = _G.select
3
+ local EMPTY_LUA_SET = {}
4
+ ____exports.emptyLuaSet = function()
5
+ return EMPTY_LUA_SET
6
+ end
7
+ ____exports.mutableLuaSet = function()
8
+ return {}
9
+ end
3
10
  ____exports.luaSetOf = function(...)
4
11
  local luaSet = {}
5
12
  for i = 1, select("#", ...) do
@@ -5,21 +5,25 @@ local checkNotNull = ____preconditions.checkNotNull
5
5
  -- @internal For use by internal systems only.
6
6
  ____exports.implementReadonlyNumberIndexSupplier = function(clazz, supplier)
7
7
  local metatable = checkNotNull(getmetatable(clazz))
8
- local originalIndex = checkNotNull(metatable.__index)
8
+ local originalIndex = checkNotNull(rawget(metatable, "__index"))
9
9
  local memoizedValueByKey = {}
10
- metatable.__index = setmetatable(
11
- memoizedValueByKey,
12
- {__index = function(self, key)
10
+ rawset(
11
+ metatable,
12
+ "__index",
13
+ function(self, key)
13
14
  if type(key) == "number" then
14
- local value = supplier(key)
15
- memoizedValueByKey[key] = value
15
+ local value = memoizedValueByKey[key]
16
+ if value == nil then
17
+ value = supplier(key)
18
+ memoizedValueByKey[key] = value
19
+ end
16
20
  return value
17
21
  end
18
22
  if type(originalIndex) == "function" then
19
23
  return originalIndex(self, key)
20
24
  end
21
25
  return originalIndex[key]
22
- end}
26
+ end
23
27
  )
24
28
  end
25
29
  ____exports.getClass = function(object)
@@ -2,6 +2,7 @@
2
2
  export type AnyNonNullable = {};
3
3
  export type IsExactlyAny<T> = boolean extends (T extends never ? true : false) ? true : false;
4
4
  export type NonEmptyArray<T> = [T, ...T[]];
5
+ export type ReadonlyNonEmptyArray<T> = readonly [T, ...T[]];
5
6
  export type InvertRecordType<T extends Record<PropertyKey, PropertyKey | null | undefined>> = {
6
7
  [P in keyof T as NonNullable<T[P]>]: P;
7
8
  };
@@ -36,4 +37,7 @@ export type Flatten<T extends readonly any[], A extends readonly any[] = []> = T
36
37
  export type Prohibit<T, K extends keyof any> = T & {
37
38
  [P in K]?: never;
38
39
  };
40
+ type TupleSplit<T, N extends number, O extends readonly any[] = readonly []> = O["length"] extends N ? [O, T] : T extends readonly [infer F, ...infer R] ? TupleSplit<readonly [...R], N, readonly [...O, F]> : [O, T];
41
+ export type TakeFirst<T extends readonly any[], N extends number> = TupleSplit<T, N>[0];
42
+ export type SkipFirst<T extends readonly any[], N extends number> = TupleSplit<T, N>[1];
39
43
  export {};
@@ -1,8 +0,0 @@
1
- /** @noSelfInFile */
2
- import { Rect } from "./types/rect";
3
- import { Region } from "./types/region";
4
- export declare const boundRect: Rect;
5
- export declare const boundRegion: Region;
6
- export declare const boundMin: Readonly<Vec2>;
7
- export declare const boundMax: Readonly<Vec2>;
8
- export declare const boundCenter: Readonly<Vec2>;
@@ -1,12 +0,0 @@
1
- local ____exports = {}
2
- local ____rect = require("core.types.rect")
3
- local Rect = ____rect.Rect
4
- local ____region = require("core.types.region")
5
- local Region = ____region.Region
6
- ____exports.boundRect = Rect:of(GetWorldBounds())
7
- ____exports.boundRegion = Region:create()
8
- ____exports.boundRegion:addRect(____exports.boundRect)
9
- ____exports.boundMin = vec2(____exports.boundRect.minX, ____exports.boundRect.minY)
10
- ____exports.boundMax = vec2(____exports.boundRect.maxX, ____exports.boundRect.maxY)
11
- ____exports.boundCenter = (____exports.boundMin + ____exports.boundMax) * 0.5
12
- return ____exports
@@ -1,25 +0,0 @@
1
- /** @noSelfInFile */
2
- import { Unit } from "./unit";
3
- import { Item } from "./item";
4
- import { Destructable } from "./destructable";
5
- export type Order = {
6
- id: number;
7
- startX: number;
8
- startY: number;
9
- } & ({
10
- type: "immediate";
11
- } | {
12
- type: "point";
13
- targetX: number;
14
- targetY: number;
15
- } | {
16
- type: "target";
17
- target: Unit | Item | Destructable;
18
- });
19
- declare module "../../engine/internal/unit" {
20
- interface Unit {
21
- readonly currentOrder: Order;
22
- readonly lastOrder: Order;
23
- issueOrder(order: Order): void;
24
- }
25
- }
@@ -1,55 +0,0 @@
1
- local ____lualib = require("lualib_bundle")
2
- local __TS__ObjectDefineProperty = ____lualib.__TS__ObjectDefineProperty
3
- local ____exports = {}
4
- local ____unit = require("core.types.unit")
5
- local Unit = ____unit.Unit
6
- local getUnitCurrentOrder = GetUnitCurrentOrder
7
- local orders = setmetatable({}, {__mode = "k"})
8
- Unit.onImmediateOrder:addListener(function(unit, orderId)
9
- orders[unit] = {id = orderId, startX = unit.x, startY = unit.y, type = "immediate"}
10
- end)
11
- Unit.onPointOrder:addListener(function(unit, orderId, x, y)
12
- orders[unit] = {
13
- id = orderId,
14
- startX = unit.x,
15
- startY = unit.y,
16
- type = "point",
17
- targetX = x,
18
- targetY = y
19
- }
20
- end)
21
- Unit.onTargetOrder:addListener(function(unit, orderId, target)
22
- orders[unit] = {
23
- id = orderId,
24
- startX = unit.x,
25
- startY = unit.y,
26
- type = "target",
27
- target = target
28
- }
29
- end)
30
- __TS__ObjectDefineProperty(
31
- Unit.prototype,
32
- "currentOrder",
33
- {get = function(self)
34
- local currentOrderId = getUnitCurrentOrder(self.handle)
35
- local lastOrder = orders[self]
36
- return lastOrder and (lastOrder.id == currentOrderId or currentOrderId == orderId("patrolAI") and lastOrder.id == orderId("patrol")) and lastOrder or ({id = 0, type = "immediate"})
37
- end}
38
- )
39
- __TS__ObjectDefineProperty(
40
- Unit.prototype,
41
- "lastOrder",
42
- {get = function(self)
43
- return orders[self] or ({id = 0, type = "immediate"})
44
- end}
45
- )
46
- Unit.prototype.issueOrder = function(self, order)
47
- if order.type == "immediate" then
48
- IssueImmediateOrderById(self.handle, order.id)
49
- elseif order.type == "point" then
50
- IssuePointOrderById(self.handle, order.id, order.targetX, order.targetY)
51
- else
52
- IssueTargetOrderById(self.handle, order.id, order.target.handle)
53
- end
54
- end
55
- return ____exports