warscript 0.0.1-dev.c826fde → 0.0.1-dev.c86de6d

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 (137) hide show
  1. package/attributes.d.ts +1 -0
  2. package/attributes.lua +9 -0
  3. package/core/types/frame.lua +61 -10
  4. package/core/types/handle.lua +6 -9
  5. package/core/types/item.d.ts +1 -0
  6. package/core/types/item.lua +1 -0
  7. package/core/types/player.d.ts +17 -1
  8. package/core/types/player.lua +67 -23
  9. package/core/types/playerCamera.lua +44 -0
  10. package/core/types/sound.lua +1 -1
  11. package/core/types/tileCell.d.ts +11 -1
  12. package/core/types/tileCell.lua +97 -0
  13. package/core/types/timer.d.ts +3 -2
  14. package/core/types/timer.lua +8 -2
  15. package/destroyable.d.ts +1 -0
  16. package/destroyable.lua +9 -0
  17. package/engine/behavior.d.ts +10 -2
  18. package/engine/behavior.lua +157 -76
  19. package/engine/behaviour/ability/apply-buff.lua +4 -4
  20. package/engine/behaviour/ability/damage.d.ts +3 -0
  21. package/engine/behaviour/ability/damage.lua +8 -2
  22. package/engine/behaviour/ability/emulate-impact.lua +5 -4
  23. package/engine/behaviour/ability/remove-buffs.d.ts +9 -0
  24. package/engine/behaviour/ability/remove-buffs.lua +21 -0
  25. package/engine/behaviour/ability.d.ts +11 -6
  26. package/engine/behaviour/ability.lua +31 -1
  27. package/engine/behaviour/unit/stun-immunity.d.ts +9 -5
  28. package/engine/behaviour/unit/stun-immunity.lua +17 -7
  29. package/engine/behaviour/unit.d.ts +9 -3
  30. package/engine/behaviour/unit.lua +106 -24
  31. package/engine/buff.d.ts +65 -18
  32. package/engine/buff.lua +356 -152
  33. package/engine/internal/ability.lua +15 -15
  34. package/engine/internal/item/fields.d.ts +12 -0
  35. package/engine/internal/item/fields.lua +33 -0
  36. package/engine/internal/item.d.ts +12 -13
  37. package/engine/internal/item.lua +59 -47
  38. package/engine/internal/mechanics/cast-ability.lua +6 -3
  39. package/engine/internal/object-data/attribute-bonus.lua +2 -2
  40. package/engine/internal/object-data/health-bonus.d.ts +2 -0
  41. package/engine/internal/object-data/health-bonus.lua +16 -0
  42. package/engine/internal/object-data/mana-bonus.d.ts +2 -0
  43. package/engine/internal/object-data/mana-bonus.lua +16 -0
  44. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.d.ts +2 -0
  45. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.lua +16 -0
  46. package/engine/internal/unit/ability.d.ts +14 -14
  47. package/engine/internal/unit/ability.lua +72 -45
  48. package/engine/internal/unit/attributes.d.ts +17 -0
  49. package/engine/internal/unit/attributes.lua +46 -0
  50. package/engine/internal/unit/bonus.d.ts +6 -0
  51. package/engine/internal/unit/bonus.lua +33 -3
  52. package/engine/internal/unit/fly-height.d.ts +7 -0
  53. package/engine/internal/unit/fly-height.lua +20 -0
  54. package/engine/internal/unit/interrupts.d.ts +12 -0
  55. package/engine/internal/unit/interrupts.lua +28 -0
  56. package/engine/internal/unit/main-selected.lua +12 -27
  57. package/engine/internal/unit/range-event.d.ts +12 -0
  58. package/engine/internal/unit/range-event.lua +90 -0
  59. package/engine/internal/unit/scale.d.ts +7 -0
  60. package/engine/internal/unit/scale.lua +20 -0
  61. package/engine/internal/unit+bonus.lua +3 -3
  62. package/engine/internal/unit-missile-launch.lua +51 -20
  63. package/engine/internal/unit.d.ts +15 -19
  64. package/engine/internal/unit.lua +160 -183
  65. package/engine/local-client.d.ts +7 -0
  66. package/engine/local-client.lua +86 -1
  67. package/engine/object-data/auxiliary/health-regeneration-type.d.ts +8 -0
  68. package/engine/object-data/auxiliary/health-regeneration-type.lua +2 -0
  69. package/engine/object-data/auxiliary/unit-attribute.lua +1 -1
  70. package/engine/object-data/entry/ability-type/{armor-increase.d.ts → armor-bonus.d.ts} +3 -3
  71. package/engine/object-data/entry/ability-type/{armor-increase.lua → armor-bonus.lua} +9 -9
  72. package/engine/object-data/entry/ability-type/health-bonus.d.ts +8 -0
  73. package/engine/object-data/entry/ability-type/health-bonus.lua +26 -0
  74. package/engine/object-data/entry/ability-type/mana-bonus.d.ts +8 -0
  75. package/engine/object-data/entry/ability-type/mana-bonus.lua +26 -0
  76. package/engine/object-data/entry/ability-type/mana-regeneration.d.ts +8 -0
  77. package/engine/object-data/entry/ability-type/mana-regeneration.lua +26 -0
  78. package/engine/object-data/entry/ability-type/reincarnation.d.ts +8 -0
  79. package/engine/object-data/entry/ability-type/reincarnation.lua +26 -0
  80. package/engine/object-data/entry/ability-type.d.ts +2 -0
  81. package/engine/object-data/entry/ability-type.lua +88 -5
  82. package/engine/object-data/entry/buff-type/applicable.lua +113 -109
  83. package/engine/object-data/entry/destructible-type.d.ts +27 -1
  84. package/engine/object-data/entry/destructible-type.lua +155 -0
  85. package/engine/object-data/entry/unit-type.d.ts +4 -0
  86. package/engine/object-data/entry/unit-type.lua +76 -32
  87. package/engine/object-field/ability.lua +2 -2
  88. package/engine/object-field/item.d.ts +22 -0
  89. package/engine/object-field/item.lua +118 -0
  90. package/engine/object-field/unit.d.ts +20 -5
  91. package/engine/object-field/unit.lua +61 -0
  92. package/engine/object-field.d.ts +10 -2
  93. package/engine/object-field.lua +268 -123
  94. package/engine/random.d.ts +10 -0
  95. package/engine/random.lua +21 -0
  96. package/engine/standard/fields/ability.d.ts +2 -2
  97. package/engine/standard/fields/ability.lua +2 -2
  98. package/engine/standard/fields/item.d.ts +4 -0
  99. package/engine/standard/fields/item.lua +6 -0
  100. package/engine/standard/fields/unit.d.ts +11 -3
  101. package/engine/standard/fields/unit.lua +15 -2
  102. package/engine/synchronization.d.ts +11 -0
  103. package/engine/synchronization.lua +77 -0
  104. package/engine/text-tag.lua +3 -2
  105. package/engine/unit.d.ts +5 -0
  106. package/engine/unit.lua +5 -0
  107. package/lualib_bundle.lua +1 -1
  108. package/math.d.ts +2 -0
  109. package/math.lua +14 -0
  110. package/net/socket.lua +1 -1
  111. package/network.lua +25 -1
  112. package/objutil/buff.lua +10 -8
  113. package/objutil/object.lua +1 -1
  114. package/operation.d.ts +8 -1
  115. package/operation.lua +38 -18
  116. package/package.json +5 -5
  117. package/patch-lua.lua +15 -0
  118. package/utility/arrays.d.ts +1 -0
  119. package/utility/arrays.lua +8 -0
  120. package/utility/callback-array.d.ts +5 -1
  121. package/utility/callback-array.lua +16 -1
  122. package/utility/linked-map.d.ts +35 -0
  123. package/utility/linked-map.lua +107 -0
  124. package/utility/linked-set.d.ts +4 -1
  125. package/utility/linked-set.lua +46 -1
  126. package/utility/lua-maps.d.ts +11 -2
  127. package/utility/lua-maps.lua +33 -2
  128. package/utility/random.d.ts +102 -0
  129. package/utility/random.lua +273 -0
  130. package/utility/records.lua +20 -1
  131. package/utility/types.d.ts +3 -0
  132. package/utility/unordered-map.d.ts +27 -0
  133. package/utility/unordered-map.lua +99 -0
  134. /package/engine/internal/object-data/{armor-increase.d.ts → armor-bonus.d.ts} +0 -0
  135. /package/engine/internal/object-data/{armor-increase.lua → armor-bonus.lua} +0 -0
  136. /package/engine/object-data/entry/ability-type/{attribute-increase.d.ts → attribute-bonus.d.ts} +0 -0
  137. /package/engine/object-data/entry/ability-type/{attribute-increase.lua → attribute-bonus.lua} +0 -0
@@ -1,7 +1,20 @@
1
1
  local ____exports = {}
2
2
  local ____unit = require("engine.object-field.unit")
3
3
  local UnitClassificationsField = ____unit.UnitClassificationsField
4
+ local UnitFloatField = ____unit.UnitFloatField
5
+ local UnitFlyHeightField = ____unit.UnitFlyHeightField
6
+ local UnitHealthRegenerationTypeField = ____unit.UnitHealthRegenerationTypeField
7
+ local UnitIntegerField = ____unit.UnitIntegerField
4
8
  local UnitPropulsionWindowField = ____unit.UnitPropulsionWindowField
5
- ____exports.PROPULSION_WINDOW_UNIT_FLOAT_FIELD = UnitPropulsionWindowField:create(fourCC("urpw"))
6
- ____exports.UNIT_CLASSIFICATIONS_FIELD = UnitClassificationsField:create(fourCC("utyp"))
9
+ local UnitScalingValueField = ____unit.UnitScalingValueField
10
+ ____exports.PROPULSION_WINDOW_UNIT_FIELD = UnitPropulsionWindowField:create(fourCC("urpw"))
11
+ ____exports.CLASSIFICATIONS_UNIT_FIELD = UnitClassificationsField:create(fourCC("utyp"))
12
+ ____exports.FLY_HEIGHT_UNIT_FIELD = UnitFlyHeightField:create(fourCC("ufyh"))
13
+ ____exports.SCALING_VALUE_UNIT_FIELD = UnitScalingValueField:create(fourCC("usca"))
14
+ ____exports.HEALTH_REGENERATION_RATE_UNIT_FIELD = UnitFloatField:create(fourCC("uhpr"))
15
+ ____exports.MANA_REGENERATION_RATE_UNIT_FIELD = UnitFloatField:create(fourCC("umpr"))
16
+ ____exports.HEALTH_REGENERATION_TYPE_UNIT_FIELD = UnitHealthRegenerationTypeField:create(fourCC("uhrt"))
17
+ ____exports.STRENGTH_UNIT_FIELD = UnitIntegerField:create(fourCC("ustc"))
18
+ ____exports.AGILITY_UNIT_FIELD = UnitIntegerField:create(fourCC("uagc"))
19
+ ____exports.INTELLIGENCE_UNIT_FIELD = UnitIntegerField:create(fourCC("uinc"))
7
20
  return ____exports
@@ -0,0 +1,11 @@
1
+ /** @noSelfInFile */
2
+ import { Player } from "../core/types/player";
3
+ import { Event } from "../event";
4
+ export declare const synchronizer: <T, K extends number>(getSyncId: (object: T) => K, getObject: (syncId: K) => T | undefined) => ((player: Player, object: T | undefined) => Promise<T | undefined>);
5
+ export declare class ObjectBus<T, K extends number> {
6
+ private readonly getSyncId;
7
+ readonly event: Event<[Player, T | undefined]>;
8
+ private readonly syncSlider;
9
+ constructor(getSyncId: (object: T) => K, getObject: (syncId: K) => T | undefined);
10
+ send(object: T | undefined): void;
11
+ }
@@ -0,0 +1,77 @@
1
+ local ____lualib = require("lualib_bundle")
2
+ local __TS__New = ____lualib.__TS__New
3
+ local __TS__Promise = ____lualib.__TS__Promise
4
+ local __TS__Class = ____lualib.__TS__Class
5
+ local ____exports = {}
6
+ local ____player = require("core.types.player")
7
+ local Player = ____player.Player
8
+ local ____math = require("math")
9
+ local MAXIMUM_INTEGER = ____math.MAXIMUM_INTEGER
10
+ local MINIMUM_INTEGER = ____math.MINIMUM_INTEGER
11
+ local ____linked_2Dset = require("utility.linked-set")
12
+ local LinkedSet = ____linked_2Dset.LinkedSet
13
+ local ____event = require("event")
14
+ local Event = ____event.Event
15
+ local eventInvoke = Event.invoke
16
+ local createFrameByType = BlzCreateFrameByType
17
+ local createTrigger = CreateTrigger
18
+ local getOriginFrame = BlzGetOriginFrame
19
+ local getTriggerFrameValue = BlzGetTriggerFrameValue
20
+ local getTriggerPlayer = GetTriggerPlayer
21
+ local frameSetMinMaxValue = BlzFrameSetMinMaxValue
22
+ local frameSetValue = BlzFrameSetValue
23
+ local triggerAddAction = TriggerAddAction
24
+ local triggerRegisterFrameEvent = BlzTriggerRegisterFrameEvent
25
+ ____exports.synchronizer = function(getSyncId, getObject)
26
+ local queue = __TS__New(LinkedSet)
27
+ local socket = __TS__New(____exports.ObjectBus, getSyncId, getObject)
28
+ socket.event:addListener(function(_, object)
29
+ local ____opt_0 = queue:pop()
30
+ if ____opt_0 ~= nil then
31
+ ____opt_0(object)
32
+ end
33
+ end)
34
+ local function executor(____, resolve)
35
+ queue:add(resolve)
36
+ end
37
+ return function(player, object)
38
+ if player.isLocal then
39
+ socket:send(object)
40
+ end
41
+ return __TS__New(__TS__Promise, executor)
42
+ end
43
+ end
44
+ ____exports.ObjectBus = __TS__Class()
45
+ local ObjectBus = ____exports.ObjectBus
46
+ ObjectBus.name = "ObjectBus"
47
+ function ObjectBus.prototype.____constructor(self, getSyncId, getObject)
48
+ self.getSyncId = getSyncId
49
+ local syncSlider = createFrameByType(
50
+ "SLIDER",
51
+ "Synchronizer",
52
+ getOriginFrame(ORIGIN_FRAME_WORLD_FRAME, 0),
53
+ "",
54
+ 0
55
+ )
56
+ frameSetMinMaxValue(syncSlider, MINIMUM_INTEGER, MAXIMUM_INTEGER)
57
+ self.syncSlider = syncSlider
58
+ local event = __TS__New(Event)
59
+ local trigger = createTrigger()
60
+ triggerRegisterFrameEvent(trigger, syncSlider, FRAMEEVENT_SLIDER_VALUE_CHANGED)
61
+ triggerAddAction(
62
+ trigger,
63
+ function()
64
+ eventInvoke(
65
+ event,
66
+ Player:of(getTriggerPlayer()),
67
+ getObject(getTriggerFrameValue())
68
+ )
69
+ end
70
+ )
71
+ self.event = event
72
+ end
73
+ function ObjectBus.prototype.send(self, object)
74
+ local syncId = object ~= nil and self.getSyncId(object) or 0
75
+ frameSetValue(self.syncSlider, syncId)
76
+ end
77
+ return ____exports
@@ -36,6 +36,7 @@ local isUnitVisible = IsUnitVisible
36
36
  local getUnitFlyHeight = GetUnitFlyHeight
37
37
  local getUnitX = GetUnitX
38
38
  local getUnitY = GetUnitY
39
+ local unitAlive = UnitAlive
39
40
  local DEFAULT_FONT_SIZE = 0.024
40
41
  local function applyConfiguration(textTag, configuration)
41
42
  setTextTagFadepoint(textTag, configuration.fadepoint)
@@ -141,7 +142,7 @@ __TS__SetDescriptor(
141
142
  setTextTagText(
142
143
  ensureHandle(self),
143
144
  self[103] or "",
144
- DEFAULT_FONT_SIZE
145
+ fontSize
145
146
  )
146
147
  self[104] = fontSize
147
148
  end
@@ -333,7 +334,7 @@ Timer.onPeriod[1 / 64]:addListener(function()
333
334
  y,
334
335
  getUnitFlyHeight(unit) + getTerrainZ(x, y)
335
336
  )
336
- if isInView and not isUnitHidden(unit) and not isUnitLoaded(unit) and isUnitVisible(unit, PLAYER_LOCAL_HANDLE) then
337
+ if isInView and not isUnitHidden(unit) and not isUnitLoaded(unit) and isUnitVisible(unit, PLAYER_LOCAL_HANDLE) and unitAlive(unit) then
337
338
  setTextTagPosUnit(
338
339
  ensureHandle(textTag),
339
340
  unit,
package/engine/unit.d.ts CHANGED
@@ -19,6 +19,11 @@ import "./internal/unit/invulnerability-counter";
19
19
  import "./internal/unit/detach-missiles";
20
20
  import "./internal/unit/main-selected";
21
21
  import "./internal/unit/add-item-to-slot-init";
22
+ import "./internal/unit/attributes";
23
+ import "./internal/unit/fly-height";
24
+ import "./internal/unit/scale";
25
+ import "./internal/unit/interrupts";
26
+ import "./internal/unit/range-event";
22
27
  import "./internal/unit/band-aids/ancestral-spirit-cannibalize";
23
28
  export { Unit, DamagingEvent, DamageEvent } from "./internal/unit";
24
29
  export * from "./internal/unit+damage";
package/engine/unit.lua CHANGED
@@ -19,6 +19,11 @@ require("engine.internal.unit.invulnerability-counter")
19
19
  require("engine.internal.unit.detach-missiles")
20
20
  require("engine.internal.unit.main-selected")
21
21
  require("engine.internal.unit.add-item-to-slot-init")
22
+ require("engine.internal.unit.attributes")
23
+ require("engine.internal.unit.fly-height")
24
+ require("engine.internal.unit.scale")
25
+ require("engine.internal.unit.interrupts")
26
+ require("engine.internal.unit.range-event")
22
27
  require("engine.internal.unit.band-aids.ancestral-spirit-cannibalize")
23
28
  do
24
29
  local ____unit = require("engine.internal.unit")
package/lualib_bundle.lua CHANGED
@@ -2241,7 +2241,7 @@ local function __TS__SourceMapTraceBack(fileName, sourceMap)
2241
2241
  end
2242
2242
  local result = string.gsub(
2243
2243
  trace,
2244
- "(%S+)%.lua:(%d+)",
2244
+ "([^%s<]+)%.lua:(%d+)",
2245
2245
  function(file, line) return replacer(nil, file .. ".lua", file .. ".ts", line) end
2246
2246
  )
2247
2247
  local function stringReplacer(____, file, line)
package/math.d.ts CHANGED
@@ -23,6 +23,8 @@ export declare const floor: typeof math.floor;
23
23
  export declare const log: typeof math.log;
24
24
  export declare const max: typeof math.max;
25
25
  export declare const min: typeof math.min;
26
+ export declare const sum: (x: number, ...numbers: number[]) => number;
27
+ export declare const product: (x: number, ...numbers: number[]) => number;
26
28
  /** Returns the signum function of the argument;
27
29
  * zero if the argument is zero,
28
30
  * 1.0 if the argument is greater than zero,
package/math.lua CHANGED
@@ -39,6 +39,20 @@ ____exports.floor = math.floor
39
39
  ____exports.log = math.log
40
40
  ____exports.max = math.max
41
41
  ____exports.min = math.min
42
+ ____exports.sum = function(x, ...)
43
+ for i = 1, select("#", ...) do
44
+ local number = select(i, ...)
45
+ x = x + number
46
+ end
47
+ return x
48
+ end
49
+ ____exports.product = function(x, ...)
50
+ for i = 1, select("#", ...) do
51
+ local number = select(i, ...)
52
+ x = x * number
53
+ end
54
+ return x
55
+ end
42
56
  --- Returns the signum function of the argument;
43
57
  -- zero if the argument is zero,
44
58
  -- 1.0 if the argument is greater than zero,
package/net/socket.lua CHANGED
@@ -28,13 +28,13 @@ function Socket.prototype.____constructor(self)
28
28
  onReceive[self[0]]:addListener(function(sender, data)
29
29
  local chunks = chunksByPlayer[sender]
30
30
  if chunks ~= nil then
31
+ chunksByPlayer[sender] = nil
31
32
  chunks[#chunks + 1] = data
32
33
  Event.invoke(
33
34
  self.onMessage,
34
35
  sender,
35
36
  tableConcat(chunks)
36
37
  )
37
- chunksByPlayer[sender] = nil
38
38
  else
39
39
  Event.invoke(self.onMessage, sender, data)
40
40
  end
package/network.lua CHANGED
@@ -8,6 +8,7 @@ local ____exports = {}
8
8
  local ____event = require("event")
9
9
  local TriggerEvent = ____event.TriggerEvent
10
10
  local ____exception = require("exception")
11
+ local CancellationException = ____exception.CancellationException
11
12
  local IllegalArgumentException = ____exception.IllegalArgumentException
12
13
  local ____player = require("core.types.player")
13
14
  local Player = ____player.Player
@@ -86,6 +87,9 @@ function SyncOperation.prototype.____constructor(self, player, data)
86
87
  self.l = #self.d
87
88
  end
88
89
  function SyncOperation.prototype.estimate(self)
90
+ if self.isCanceled or not self.player.isPlaying then
91
+ return __TS__Promise.reject(__TS__New(CancellationException))
92
+ end
89
93
  if self.player.isLocal then
90
94
  sendSyncData(
91
95
  "__oh",
@@ -98,6 +102,7 @@ function SyncOperation.prototype.estimate(self)
98
102
  end
99
103
  function SyncOperation.prototype.work(self)
100
104
  if self.progress >= self.maximum then
105
+ syncOperationById[self.x] = nil
101
106
  return decode(concat(self.c))
102
107
  end
103
108
  self.s = packetsPerRound
@@ -116,7 +121,18 @@ function SyncOperation.prototype.work(self)
116
121
  return __TS__New(__TS__Promise, syncPromiseExecutor)
117
122
  end
118
123
  function SyncOperation.prototype.doCancel(self)
119
- return false
124
+ if not (syncOperationById[self.x] ~= nil) then
125
+ return false
126
+ end
127
+ syncOperationById[self.x] = nil
128
+ local ____opt_1 = self.r
129
+ if ____opt_1 ~= nil then
130
+ ____opt_1(
131
+ self,
132
+ __TS__New(CancellationException)
133
+ )
134
+ end
135
+ return true
120
136
  end
121
137
  __TS__ObjectDefineProperty(
122
138
  SyncOperation,
@@ -178,6 +194,7 @@ SyncOperation._ = (function()
178
194
  local resolveWork = syncOperation.w
179
195
  if resolveWork then
180
196
  if syncOperation.progress >= syncOperation.maximum then
197
+ syncOperationById[id] = nil
181
198
  resolveWork(
182
199
  nil,
183
200
  decode(concat(chunks))
@@ -188,6 +205,13 @@ SyncOperation._ = (function()
188
205
  end
189
206
  end
190
207
  end)
208
+ Player.onLeave:addListener(function(player)
209
+ for ____, operation in pairs(syncOperationById) do
210
+ if operation.player == player then
211
+ operation:cancel()
212
+ end
213
+ end
214
+ end)
191
215
  end)()
192
216
  function ____exports.synchronize(player, data)
193
217
  return __TS__New(____exports.SyncOperation, player, data):execute()
package/objutil/buff.lua CHANGED
@@ -29,6 +29,8 @@ local ____timer = require("core.types.timer")
29
29
  local Timer = ____timer.Timer
30
30
  local ____exception = require("exception")
31
31
  local IllegalStateException = ____exception.IllegalStateException
32
+ local ____linked_2Dmap = require("utility.linked-map")
33
+ local LinkedMap = ____linked_2Dmap.LinkedMap
32
34
  local ____assert = _G.assert
33
35
  local ____pairs = _G.pairs
34
36
  ____exports.BuffDefinition = __TS__Class()
@@ -461,7 +463,7 @@ local buffs = setmetatable(
461
463
  {
462
464
  __mode = "k",
463
465
  __index = function(self, unit)
464
- local ____table = {}
466
+ local ____table = __TS__New(LinkedMap)
465
467
  self[unit] = ____table
466
468
  return ____table
467
469
  end
@@ -494,7 +496,7 @@ function Buff.prototype.____constructor(self, unit, source, duration, level, pre
494
496
  end
495
497
  local constructor = self.constructor
496
498
  local instances = buffs[unit]
497
- local instance = instances[constructor]
499
+ local instance = instances:get(constructor)
498
500
  if instance then
499
501
  instance:destroy()
500
502
  if not instance.destroyed then
@@ -507,7 +509,7 @@ function Buff.prototype.____constructor(self, unit, source, duration, level, pre
507
509
  )
508
510
  end
509
511
  end
510
- instances[constructor] = self
512
+ instances:put(constructor, self)
511
513
  if preset then
512
514
  local unitHandle = unit.handle
513
515
  local slowPoisonMethod = not preset.positive and not preset.magic
@@ -586,13 +588,13 @@ function Buff.apply(self, ...)
586
588
  end
587
589
  end
588
590
  function Buff.getInstance(self, unit)
589
- return buffs[unit][self]
591
+ return buffs[unit]:get(self)
590
592
  end
591
593
  function Buff.isApplied(self, unit)
592
- return buffs[unit][self] ~= nil
594
+ return buffs[unit]:get(self) ~= nil
593
595
  end
594
596
  function Buff.ifApplied(self, unit, action)
595
- local instance = buffs[unit][self]
597
+ local instance = buffs[unit]:get(self)
596
598
  if instance then
597
599
  ____assert(__TS__InstanceOf(instance, self))
598
600
  action(instance)
@@ -615,7 +617,7 @@ function Buff.prototype.destroy(self)
615
617
  if self.preset then
616
618
  self.unit:removeAbility(self.preset.buffId)
617
619
  end
618
- buffs[self.unit][self.constructor] = nil
620
+ buffs[self.unit]:remove(self.constructor)
619
621
  self.destroyed = true
620
622
  end
621
623
  function Buff.prototype.onDispel(self, source)
@@ -762,7 +764,7 @@ Unit.onDamaging:addListener(function(source, target, event)
762
764
  end
763
765
  end)
764
766
  Unit.itemPickedUpEvent:addListener(function(unit, item)
765
- if item.powerup and item:hasAbility(fourCC("APdi")) then
767
+ if item.isPowerUp and item:hasAbility(fourCC("APdi")) then
766
768
  end
767
769
  end)
768
770
  return ____exports
@@ -153,7 +153,7 @@ end
153
153
  function ObjectDefinition.getLevelArrayFieldValue(self, level, value, values)
154
154
  return type(values) == "function" and values(level, value) or (__TS__ArrayIsArray(values[1]) and values[1] or values)
155
155
  end
156
- ____exports.ObjectType = ObjectType or ({})
156
+ ____exports.ObjectType = ____exports.ObjectType or ({})
157
157
  ____exports.ObjectType.ABILITY = 0
158
158
  ____exports.ObjectType[____exports.ObjectType.ABILITY] = "ABILITY"
159
159
  ____exports.ObjectType.ITEM = 1
package/operation.d.ts CHANGED
@@ -16,9 +16,11 @@ export { OperationContinue };
16
16
  export declare abstract class Operation<T> {
17
17
  protected constructor();
18
18
  private started;
19
+ private settled;
20
+ private canceled;
19
21
  protected progress: number;
20
22
  protected maximum: number;
21
- isCanceled: boolean;
23
+ get isCanceled(): boolean;
22
24
  get isStarted(): boolean;
23
25
  execute(): OperationMonitor<T>;
24
26
  protected abstract estimate(): number | Promise<number>;
@@ -30,6 +32,11 @@ export declare abstract class Operation<T> {
30
32
  ...result: [success: true, result: T] | [success: false, reason?: any]
31
33
  ]>;
32
34
  get onProgress(): Event<[operation: Operation<T>]>;
35
+ /**
36
+ * Invoked with `isCanceled` already set. Should unblock any pending `estimate`/`work` promise
37
+ * (e.g. by rejecting it) and return whether cancellation is possible; on `false` the canceled
38
+ * state is reverted.
39
+ */
33
40
  protected abstract doCancel(): boolean;
34
41
  cancel(): boolean;
35
42
  }
package/operation.lua CHANGED
@@ -22,10 +22,7 @@ OperationMonitor.name = "OperationMonitor"
22
22
  __TS__ClassExtends(OperationMonitor, __TS__Promise)
23
23
  function OperationMonitor.prototype.____constructor(self, operation, ...)
24
24
  local args = {...}
25
- __TS__Promise.prototype.____constructor(
26
- self,
27
- table.unpack(args)
28
- )
25
+ __TS__Promise.prototype.____constructor(self, ...)
29
26
  self.o = operation
30
27
  end
31
28
  function OperationMonitor.prototype.cancel(self)
@@ -38,9 +35,10 @@ local Operation = ____exports.Operation
38
35
  Operation.name = "Operation"
39
36
  function Operation.prototype.____constructor(self)
40
37
  self.started = false
38
+ self.settled = false
39
+ self.canceled = false
41
40
  self.progress = 0
42
41
  self.maximum = 0
43
- self.isCanceled = false
44
42
  end
45
43
  function Operation.prototype.execute(self)
46
44
  if self.started then
@@ -58,6 +56,12 @@ function Operation.prototype.execute(self)
58
56
  local result
59
57
  local progress = self.progress
60
58
  local ____try = __TS__AsyncAwaiter(function()
59
+ if self.canceled then
60
+ error(
61
+ __TS__New(CancellationException),
62
+ 0
63
+ )
64
+ end
61
65
  local maximum = __TS__Await(self:estimate())
62
66
  self.maximum = maximum
63
67
  if maximum ~= 0 then
@@ -68,20 +72,19 @@ function Operation.prototype.execute(self)
68
72
  end
69
73
  repeat
70
74
  do
71
- if self.isCanceled then
72
- local reason = __TS__New(CancellationException)
73
- reject(nil, reason)
74
- local onFailure = ____rawget(self, "onFailure")
75
- if onFailure ~= nil then
76
- Event.invoke(onFailure, self, reason)
77
- end
78
- local onComplete = ____rawget(self, "onComplete")
79
- if onComplete ~= nil then
80
- Event.invoke(onComplete, self, false, reason)
81
- end
82
- return ____awaiter_resolve(nil)
75
+ if self.canceled then
76
+ error(
77
+ __TS__New(CancellationException),
78
+ 0
79
+ )
83
80
  end
84
81
  result = __TS__Await(self:work())
82
+ if self.canceled then
83
+ error(
84
+ __TS__New(CancellationException),
85
+ 0
86
+ )
87
+ end
85
88
  if self.progress ~= progress or self.maximum ~= maximum then
86
89
  progress = self.progress
87
90
  maximum = self.maximum
@@ -96,6 +99,7 @@ function Operation.prototype.execute(self)
96
99
  __TS__Await(____try.catch(
97
100
  ____try,
98
101
  function(____, reason)
102
+ self.settled = true
99
103
  reject(nil, reason)
100
104
  local onFailure = ____rawget(self, "onFailure")
101
105
  if onFailure ~= nil then
@@ -108,6 +112,7 @@ function Operation.prototype.execute(self)
108
112
  return ____awaiter_resolve(nil)
109
113
  end
110
114
  ))
115
+ self.settled = true
111
116
  resolve(nil, result)
112
117
  local onSuccess = ____rawget(self, "onSuccess")
113
118
  if onSuccess ~= nil then
@@ -122,12 +127,27 @@ function Operation.prototype.execute(self)
122
127
  )
123
128
  end
124
129
  function Operation.prototype.cancel(self)
130
+ if self.canceled then
131
+ return true
132
+ end
133
+ if self.settled then
134
+ return false
135
+ end
136
+ self.canceled = true
125
137
  if self:doCancel() then
126
- self.isCanceled = true
127
138
  return true
128
139
  end
140
+ self.canceled = false
129
141
  return false
130
142
  end
143
+ __TS__SetDescriptor(
144
+ Operation.prototype,
145
+ "isCanceled",
146
+ {get = function(self)
147
+ return self.canceled
148
+ end},
149
+ true
150
+ )
131
151
  __TS__SetDescriptor(
132
152
  Operation.prototype,
133
153
  "isStarted",
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json.schemastore.org/package",
3
3
  "name": "warscript",
4
- "version": "0.0.1-dev.c826fde",
4
+ "version": "0.0.1-dev.c86de6d",
5
5
  "description": "A typescript library for Warcraft III using Warpack.",
6
6
  "keywords": [
7
7
  "warcraft",
@@ -22,13 +22,13 @@
22
22
  },
23
23
  "peerDependencies": {
24
24
  "@warscript/language-extensions": "^0.0.1",
25
- "@warscript/tstl-plugin": "^0.0.4",
25
+ "@warscript/tstl-plugin": "^0.0.6",
26
26
  "lua-types": "^2.13.1",
27
- "warpack": "0.0.1-dev.78d2c64"
27
+ "warpack": "0.0.1-dev.e490aaf"
28
28
  },
29
29
  "devDependencies": {
30
- "@typescript-eslint/eslint-plugin": "^8.13.0",
31
- "@typescript-eslint/parser": "^8.13.0",
30
+ "@typescript-eslint/eslint-plugin": "^8.61.1",
31
+ "@typescript-eslint/parser": "^8.61.1",
32
32
  "async": "^3.2.6",
33
33
  "copyfiles": "^2.4.1",
34
34
  "eslint": "^9.14.0",
package/patch-lua.lua CHANGED
@@ -1,5 +1,9 @@
1
+ local error = _G.error
1
2
  local getmetatable = _G.getmetatable
2
3
  local ipairs = _G.ipairs
4
+ local select = _G.select
5
+ local tostring = _G.tostring
6
+ local tableconcat = table.concat
3
7
 
4
8
  _G.ipairs = function(t)
5
9
  local metatable = getmetatable(t)
@@ -8,3 +12,14 @@ _G.ipairs = function(t)
8
12
  end
9
13
  return ipairs(t)
10
14
  end
15
+
16
+ _G.assert = function(v, ...)
17
+ if not v then
18
+ local args = {}
19
+ for i = 1, select("#", ...) do
20
+ args[i] = tostring(select(i, ...))
21
+ end
22
+ error(tableconcat(args, " "))
23
+ end
24
+ return v, ...
25
+ end
@@ -5,6 +5,7 @@ export declare const joinToString: <T>(array: readonly T[], separator: string, t
5
5
  export declare const arrayOfNotNull: <T>(...elements: readonly (T | undefined | null)[]) => T[];
6
6
  export declare const array: <T, N extends number>(length: N, initialize: (index: number) => T) => TupleOf<T, N>;
7
7
  export declare const toLuaSet: <T extends AnyNotNil>(array: readonly T[]) => LuaSet<T>;
8
+ export declare const contains: <T>(array: readonly T[], element: T) => boolean;
8
9
  export declare const forEach: <T, Args extends any[]>(array: readonly T[], consumerOrKey: ((value: T, ...args: Args) => void) | KeysOfType<T, (this: T, ...args: Args) => void>, ...args: Args) => void;
9
10
  export declare const all: {
10
11
  <T>(array: readonly T[], transform: (value: T) => boolean): boolean;
@@ -49,6 +49,14 @@ ____exports.toLuaSet = function(array)
49
49
  end
50
50
  return result
51
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
52
60
  ____exports.forEach = function(array, consumerOrKey, ...)
53
61
  if type(consumerOrKey) == "function" then
54
62
  for i = 1, #array do
@@ -2,12 +2,16 @@
2
2
  type Callback = {
3
3
  readonly __callback: unique symbol;
4
4
  };
5
+ export type CallbackId = number & {
6
+ readonly __callbackId: unique symbol;
7
+ };
5
8
  export type CallbackArray = {
6
9
  readonly __callbackArray: unique symbol;
7
10
  } & Callback[];
8
11
  export declare const callbackArray: () => CallbackArray;
9
- export declare function addCallback<Args extends any[]>(this: void, array: CallbackArray, callback: (...args: Args) => unknown, ...args: Args): void;
12
+ export declare function addCallback<Args extends any[]>(this: void, array: CallbackArray, callback: (...args: Args) => unknown, ...args: Args): CallbackId;
10
13
  export declare function clearCallbacks(this: void, array: CallbackArray): void;
14
+ export declare function consumeCallback(this: void, array: CallbackArray, id: CallbackId): void;
11
15
  export declare function consumeCallbacks(this: void, array: CallbackArray): void;
12
16
  export declare function invokeCallbacks(this: void, array: CallbackArray): void;
13
17
  export {};
@@ -20,8 +20,11 @@ local select = _G.select
20
20
  local tableMove = table.move
21
21
  tableUnpack = table.unpack
22
22
  ____exports.callbackArray = function() return {} end
23
+ local function doNothing()
24
+ end
23
25
  function ____exports.addCallback(array, callback, ...)
24
- local i = array[1] or 2
26
+ local id = array[1] or 2
27
+ local i = id
25
28
  array[i] = callback
26
29
  local argsCount = select("#", ...)
27
30
  i = i + 1
@@ -31,11 +34,23 @@ function ____exports.addCallback(array, callback, ...)
31
34
  array[i] = (select(j, ...))
32
35
  end
33
36
  array[1] = i + 1
37
+ return id
34
38
  end
35
39
  function ____exports.clearCallbacks(array)
36
40
  local length = array[1] or 2
37
41
  tableMove(array, length, length + length - 2, 1)
38
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
39
54
  function ____exports.consumeCallbacks(array)
40
55
  local length = array[1] or 2
41
56
  ____exports.invokeCallbacks(array)