warscript 0.0.1-dev.46e7a52 → 0.0.1-dev.4724d95

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 (124) hide show
  1. package/core/types/frame.d.ts +1 -0
  2. package/core/types/frame.lua +112 -37
  3. package/core/types/handle.lua +6 -9
  4. package/core/types/item.d.ts +1 -0
  5. package/core/types/item.lua +1 -0
  6. package/core/types/player.d.ts +2 -1
  7. package/core/types/player.lua +16 -12
  8. package/core/types/sound.lua +1 -1
  9. package/core/types/tileCell.d.ts +2 -1
  10. package/core/types/tileCell.lua +5 -0
  11. package/destroyable.d.ts +1 -0
  12. package/destroyable.lua +9 -0
  13. package/engine/behavior.d.ts +10 -2
  14. package/engine/behavior.lua +157 -76
  15. package/engine/behaviour/ability/apply-buff.lua +4 -4
  16. package/engine/behaviour/ability/damage.d.ts +3 -0
  17. package/engine/behaviour/ability/damage.lua +8 -2
  18. package/engine/behaviour/ability/emulate-impact.lua +5 -4
  19. package/engine/behaviour/ability.d.ts +11 -6
  20. package/engine/behaviour/ability.lua +31 -1
  21. package/engine/behaviour/unit/stun-immunity.d.ts +7 -5
  22. package/engine/behaviour/unit/stun-immunity.lua +6 -5
  23. package/engine/behaviour/unit.d.ts +7 -3
  24. package/engine/behaviour/unit.lua +101 -24
  25. package/engine/buff.d.ts +65 -18
  26. package/engine/buff.lua +351 -147
  27. package/engine/internal/ability.lua +15 -15
  28. package/engine/internal/item/fields.d.ts +12 -0
  29. package/engine/internal/item/fields.lua +33 -0
  30. package/engine/internal/item.d.ts +4 -5
  31. package/engine/internal/item.lua +37 -40
  32. package/engine/internal/mechanics/cast-ability.lua +6 -3
  33. package/engine/internal/object-data/attribute-bonus.lua +2 -2
  34. package/engine/internal/object-data/health-bonus.d.ts +2 -0
  35. package/engine/internal/object-data/health-bonus.lua +16 -0
  36. package/engine/internal/object-data/mana-bonus.d.ts +2 -0
  37. package/engine/internal/object-data/mana-bonus.lua +16 -0
  38. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.d.ts +2 -0
  39. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.lua +16 -0
  40. package/engine/internal/unit/ability.lua +12 -2
  41. package/engine/internal/unit/attributes.d.ts +17 -0
  42. package/engine/internal/unit/attributes.lua +46 -0
  43. package/engine/internal/unit/bonus.d.ts +6 -0
  44. package/engine/internal/unit/bonus.lua +33 -3
  45. package/engine/internal/unit/fly-height.d.ts +7 -0
  46. package/engine/internal/unit/fly-height.lua +20 -0
  47. package/engine/internal/unit/interrupts.d.ts +12 -0
  48. package/engine/internal/unit/interrupts.lua +28 -0
  49. package/engine/internal/unit/pseudo-passive-abilities.d.ts +2 -0
  50. package/engine/internal/unit/pseudo-passive-abilities.lua +8 -0
  51. package/engine/internal/unit/range-event.d.ts +12 -0
  52. package/engine/internal/unit/range-event.lua +90 -0
  53. package/engine/internal/unit/scale.d.ts +7 -0
  54. package/engine/internal/unit/scale.lua +20 -0
  55. package/engine/internal/unit+bonus.lua +3 -3
  56. package/engine/internal/unit-missile-launch.lua +12 -5
  57. package/engine/internal/unit.d.ts +2 -13
  58. package/engine/internal/unit.lua +79 -148
  59. package/engine/local-client.d.ts +6 -1
  60. package/engine/local-client.lua +60 -5
  61. package/engine/object-data/auxiliary/health-regeneration-type.d.ts +8 -0
  62. package/engine/object-data/auxiliary/health-regeneration-type.lua +2 -0
  63. package/engine/object-data/auxiliary/unit-attribute.lua +1 -1
  64. package/engine/object-data/entry/ability-type/{armor-increase.d.ts → armor-bonus.d.ts} +3 -3
  65. package/engine/object-data/entry/ability-type/{armor-increase.lua → armor-bonus.lua} +9 -9
  66. package/engine/object-data/entry/ability-type/blank-configurable.d.ts +3 -0
  67. package/engine/object-data/entry/ability-type/blank-configurable.lua +29 -0
  68. package/engine/object-data/entry/ability-type/health-bonus.d.ts +8 -0
  69. package/engine/object-data/entry/ability-type/health-bonus.lua +26 -0
  70. package/engine/object-data/entry/ability-type/mana-bonus.d.ts +8 -0
  71. package/engine/object-data/entry/ability-type/mana-bonus.lua +26 -0
  72. package/engine/object-data/entry/ability-type/mana-regeneration.d.ts +8 -0
  73. package/engine/object-data/entry/ability-type/mana-regeneration.lua +26 -0
  74. package/engine/object-data/entry/ability-type/reincarnation.d.ts +8 -0
  75. package/engine/object-data/entry/ability-type/reincarnation.lua +26 -0
  76. package/engine/object-data/entry/ability-type.d.ts +2 -0
  77. package/engine/object-data/entry/ability-type.lua +84 -4
  78. package/engine/object-data/entry/buff-type/applicable.lua +113 -109
  79. package/engine/object-data/entry/destructible-type.d.ts +27 -1
  80. package/engine/object-data/entry/destructible-type.lua +155 -0
  81. package/engine/object-data/entry/unit-type.d.ts +4 -0
  82. package/engine/object-data/entry/unit-type.lua +76 -32
  83. package/engine/object-field/ability.lua +2 -2
  84. package/engine/object-field/item.d.ts +22 -0
  85. package/engine/object-field/item.lua +118 -0
  86. package/engine/object-field/unit.d.ts +20 -5
  87. package/engine/object-field/unit.lua +61 -0
  88. package/engine/object-field.d.ts +10 -2
  89. package/engine/object-field.lua +268 -123
  90. package/engine/random.d.ts +1 -0
  91. package/engine/random.lua +8 -0
  92. package/engine/standard/fields/ability.d.ts +2 -2
  93. package/engine/standard/fields/ability.lua +2 -2
  94. package/engine/standard/fields/item.d.ts +4 -0
  95. package/engine/standard/fields/item.lua +6 -0
  96. package/engine/standard/fields/unit.d.ts +11 -3
  97. package/engine/standard/fields/unit.lua +15 -2
  98. package/engine/text-tag.lua +2 -1
  99. package/engine/unit.d.ts +5 -0
  100. package/engine/unit.lua +5 -0
  101. package/event.d.ts +1 -1
  102. package/lualib_bundle.lua +1 -1
  103. package/math.d.ts +2 -0
  104. package/math.lua +14 -0
  105. package/network.lua +25 -1
  106. package/objutil/buff.lua +9 -7
  107. package/objutil/object.lua +1 -1
  108. package/operation.d.ts +8 -1
  109. package/operation.lua +38 -18
  110. package/package.json +5 -5
  111. package/patch-lua.lua +15 -0
  112. package/utility/linked-map.d.ts +35 -0
  113. package/utility/linked-map.lua +107 -0
  114. package/utility/linked-set.d.ts +3 -1
  115. package/utility/linked-set.lua +27 -0
  116. package/utility/random.d.ts +102 -0
  117. package/utility/random.lua +273 -0
  118. package/utility/records.lua +20 -1
  119. package/utility/unordered-map.d.ts +27 -0
  120. package/utility/unordered-map.lua +99 -0
  121. /package/engine/internal/object-data/{armor-increase.d.ts → armor-bonus.d.ts} +0 -0
  122. /package/engine/internal/object-data/{armor-increase.lua → armor-bonus.lua} +0 -0
  123. /package/engine/object-data/entry/ability-type/{attribute-increase.d.ts → attribute-bonus.d.ts} +0 -0
  124. /package/engine/object-data/entry/ability-type/{attribute-increase.lua → attribute-bonus.lua} +0 -0
@@ -80,6 +80,7 @@ export declare class Frame extends Handle<jframehandle> {
80
80
  get onMouseLeave(): FrameEvent;
81
81
  get onMouseUp(): FrameEvent;
82
82
  get onMouseWheel(): FrameEvent<[number]>;
83
+ private trackMouseLocally;
83
84
  get mouseEnterLocalEvent(): Event;
84
85
  get mouseLeaveLocalEvent(): Event;
85
86
  get popupMenuItemChangeEvent(): FrameEvent<[
@@ -24,11 +24,23 @@ local frameCoordinatesToWorld = ____playerCamera.frameCoordinatesToWorld
24
24
  local worldCoordinatesToFrame = ____playerCamera.worldCoordinatesToFrame
25
25
  local ____get_2Dterrain_2Dz = require("engine.internal.misc.get-terrain-z")
26
26
  local getTerrainZ = ____get_2Dterrain_2Dz.getTerrainZ
27
+ local ____lua_2Dsets = require("utility.lua-sets")
28
+ local mutableLuaSet = ____lua_2Dsets.mutableLuaSet
29
+ local ____socket = require("net.socket")
30
+ local Socket = ____socket.Socket
31
+ local ____lua_2Dmaps = require("utility.lua-maps")
32
+ local getOrPut = ____lua_2Dmaps.getOrPut
33
+ local luaMapInvert = ____lua_2Dmaps.luaMapInvert
34
+ local luaMapOf = ____lua_2Dmaps.luaMapOf
35
+ local mutableLuaMap = ____lua_2Dmaps.mutableLuaMap
27
36
  local frameClick = BlzFrameClick
28
37
  local frameGetEnable = BlzFrameGetEnable
29
38
  local frameIsVisible = BlzFrameIsVisible
30
39
  local frameSetEnable = BlzFrameSetEnable
31
40
  local frameSetScale = BlzFrameSetScale
41
+ local getHandleId = GetHandleId
42
+ local getOriginFrame = BlzGetOriginFrame
43
+ local location = Location
32
44
  local ____rawget = _G.rawget
33
45
  local rawset = _G.rawset
34
46
  local invoke = Event.invoke
@@ -130,6 +142,79 @@ do
130
142
  FramePoint.BOTTOM_RIGHT = FRAMEPOINT_BOTTOMRIGHT
131
143
  end
132
144
  local tooltipByFrame = setmetatable({}, {__mode = "k"})
145
+ local isMouseInsideLocallyByFrame = mutableLuaMap()
146
+ local mouseEnterLocalEventByFrame = mutableLuaMap()
147
+ local mouseLeaveLocalEventByFrame = mutableLuaMap()
148
+ local isLocalMouseTrackingStarted = false
149
+ --- Reused across ticks to avoid per-tick allocations: only the first `leftFrameCount` /
150
+ -- `enteredFrameCount` entries are meaningful, stale entries beyond them are never read and are
151
+ -- kept collectable by the weak values mode.
152
+ local leftFrames = setmetatable({}, {__mode = "v"})
153
+ local enteredFrames = setmetatable({}, {__mode = "v"})
154
+ --- All frames share a single poll which invokes every mouse leave event before any mouse enter
155
+ -- event within the same tick. With a poll per event, the invocation order would depend on the
156
+ -- event creation order instead, breaking listeners relying on the natural "leave the old frame,
157
+ -- then enter the new frame" order.
158
+ local function startLocalMouseTracking()
159
+ if isLocalMouseTrackingStarted then
160
+ return
161
+ end
162
+ isLocalMouseTrackingStarted = true
163
+ Timer.onPeriod[1 / 64]:addListener(function()
164
+ local leftFrameCount = 0
165
+ local enteredFrameCount = 0
166
+ for frame, wasMouseInside in pairs(isMouseInsideLocallyByFrame) do
167
+ local tooltip = tooltipByFrame[frame]
168
+ local isMouseInside = tooltip ~= nil and tooltip.visible
169
+ if isMouseInside ~= wasMouseInside then
170
+ isMouseInsideLocallyByFrame[frame] = isMouseInside
171
+ if isMouseInside then
172
+ enteredFrames[enteredFrameCount + 1] = frame
173
+ enteredFrameCount = enteredFrameCount + 1
174
+ else
175
+ leftFrames[leftFrameCount + 1] = frame
176
+ leftFrameCount = leftFrameCount + 1
177
+ end
178
+ end
179
+ end
180
+ for i = 1, leftFrameCount do
181
+ local event = mouseLeaveLocalEventByFrame[leftFrames[i]]
182
+ if event ~= nil then
183
+ Event.invoke(event)
184
+ end
185
+ end
186
+ for i = 1, enteredFrameCount do
187
+ local event = mouseEnterLocalEventByFrame[enteredFrames[i]]
188
+ if event ~= nil then
189
+ Event.invoke(event)
190
+ end
191
+ end
192
+ end)
193
+ end
194
+ local keyByAsyncInitOriginFrameType = luaMapOf(ORIGIN_FRAME_PORTRAIT_HP_TEXT, "hp", ORIGIN_FRAME_PORTRAIT_MANA_TEXT, "mana")
195
+ local asyncInitOriginFrameTypeByKey = luaMapInvert(keyByAsyncInitOriginFrameType)
196
+ local seenAsyncInitOriginFrameTypes = mutableLuaSet()
197
+ local seenAsyncInitOriginFrameTypesSocket = __TS__New(Socket)
198
+ local seenPlayersByAsyncInitOriginFrameType = mutableLuaMap()
199
+ seenAsyncInitOriginFrameTypesSocket.onMessage:addListener(function(player, key)
200
+ local asyncInitOriginFrameType = asyncInitOriginFrameTypeByKey[key]
201
+ if asyncInitOriginFrameType ~= nil then
202
+ getOrPut(seenPlayersByAsyncInitOriginFrameType, asyncInitOriginFrameType, mutableLuaSet)[player] = true
203
+ end
204
+ end)
205
+ local function haveAllPlayersSeenAsyncInitOriginFrameType(frame)
206
+ local players = seenPlayersByAsyncInitOriginFrameType[frame]
207
+ if players == nil then
208
+ return false
209
+ end
210
+ for ____, player in ipairs(Player.all) do
211
+ if player.isUser and player.isPlaying and not (players[player] ~= nil) then
212
+ return false
213
+ end
214
+ end
215
+ keyByAsyncInitOriginFrameType[frame] = nil
216
+ return true
217
+ end
133
218
  ____exports.Frame = __TS__Class()
134
219
  local Frame = ____exports.Frame
135
220
  Frame.name = "Frame"
@@ -162,6 +247,18 @@ function Frame.prototype.getEvent(self, eventType, c)
162
247
  end
163
248
  return self.events[eventId]
164
249
  end
250
+ function Frame.prototype.trackMouseLocally(self)
251
+ if not (tooltipByFrame[self] ~= nil) then
252
+ ____exports.Frame.SIMPLE_FRAME_TEST_CHILD.parent = self
253
+ local tooltip = ____exports.Frame.SIMPLE_FRAME_TEST_CHILD.parent == self and ____exports.Frame:createByType("SIMPLEFRAME", "", ____exports.Frame.CONSOLE_UI) or ____exports.Frame:createByType("FRAME", "", ____exports.Frame.GAME_UI)
254
+ ____exports.Frame.SIMPLE_FRAME_TEST_CHILD.parent = ____exports.Frame.CONSOLE_UI
255
+ self:setTooltip(tooltip)
256
+ end
257
+ if not (isMouseInsideLocallyByFrame[self] ~= nil) then
258
+ isMouseInsideLocallyByFrame[self] = false
259
+ startLocalMouseTracking()
260
+ end
261
+ end
165
262
  function Frame.prototype.hide(self)
166
263
  self.hideCounter = self.hideCounter + 1
167
264
  if self.hideCounter > 0 then
@@ -308,7 +405,17 @@ function Frame.byOrigin(self, frameType, index)
308
405
  if index == nil then
309
406
  index = 0
310
407
  end
311
- return self:of(BlzGetOriginFrame(frameType, index))
408
+ local frame = getOriginFrame(frameType, index)
409
+ local asyncInitOriginFrameTypeKey = keyByAsyncInitOriginFrameType[frameType]
410
+ if index == 0 and asyncInitOriginFrameTypeKey ~= nil and not haveAllPlayersSeenAsyncInitOriginFrameType(frameType) then
411
+ if getHandleId(frame) == 0 or seenAsyncInitOriginFrameTypes[frameType] ~= nil then
412
+ location(0, 0)
413
+ else
414
+ seenAsyncInitOriginFrameTypes[frameType] = true
415
+ seenAsyncInitOriginFrameTypesSocket:send(asyncInitOriginFrameTypeKey)
416
+ end
417
+ end
418
+ return self:of(frame)
312
419
  end
313
420
  Frame.GAME_UI = ____exports.Frame:byOrigin(ORIGIN_FRAME_GAME_UI)
314
421
  Frame.CONSOLE_UI = ____exports.Frame:byOrigin(ORIGIN_FRAME_SIMPLE_UI_PARENT)
@@ -627,24 +734,8 @@ __TS__SetDescriptor(
627
734
  "mouseEnterLocalEvent",
628
735
  {get = function(self)
629
736
  local event = __TS__New(Event)
630
- if not (tooltipByFrame[self] ~= nil) then
631
- ____exports.Frame.SIMPLE_FRAME_TEST_CHILD.parent = self
632
- local tooltip = ____exports.Frame.SIMPLE_FRAME_TEST_CHILD.parent == self and ____exports.Frame:createByType("SIMPLEFRAME", "", ____exports.Frame.CONSOLE_UI) or ____exports.Frame:createByType("FRAME", "", ____exports.Frame.GAME_UI)
633
- ____exports.Frame.SIMPLE_FRAME_TEST_CHILD.parent = ____exports.Frame.CONSOLE_UI
634
- self:setTooltip(tooltip)
635
- end
636
- local isMouseInside = false
637
- Timer.onPeriod[1 / 64]:addListener(function()
638
- local tooltip = tooltipByFrame[self]
639
- if tooltip and tooltip.visible then
640
- if not isMouseInside then
641
- isMouseInside = true
642
- Event.invoke(event)
643
- end
644
- else
645
- isMouseInside = false
646
- end
647
- end)
737
+ self:trackMouseLocally()
738
+ mouseEnterLocalEventByFrame[self] = event
648
739
  rawset(self, "mouseEnterLocalEvent", event)
649
740
  return event
650
741
  end},
@@ -655,24 +746,8 @@ __TS__SetDescriptor(
655
746
  "mouseLeaveLocalEvent",
656
747
  {get = function(self)
657
748
  local event = __TS__New(Event)
658
- if not (tooltipByFrame[self] ~= nil) then
659
- ____exports.Frame.SIMPLE_FRAME_TEST_CHILD.parent = self
660
- local tooltip = ____exports.Frame.SIMPLE_FRAME_TEST_CHILD.parent == self and ____exports.Frame:createByType("SIMPLEFRAME", "", ____exports.Frame.CONSOLE_UI) or ____exports.Frame:createByType("FRAME", "", ____exports.Frame.GAME_UI)
661
- ____exports.Frame.SIMPLE_FRAME_TEST_CHILD.parent = ____exports.Frame.CONSOLE_UI
662
- self:setTooltip(tooltip)
663
- end
664
- local isMouseInside = false
665
- Timer.onPeriod[1 / 64]:addListener(function()
666
- local tooltip = tooltipByFrame[self]
667
- if tooltip and tooltip.visible then
668
- isMouseInside = true
669
- else
670
- if isMouseInside then
671
- isMouseInside = false
672
- Event.invoke(event)
673
- end
674
- end
675
- end)
749
+ self:trackMouseLocally()
750
+ mouseLeaveLocalEventByFrame[self] = event
676
751
  rawset(self, "mouseLeaveLocalEvent", event)
677
752
  return event
678
753
  end},
@@ -15,6 +15,8 @@ local ____exception = require("exception")
15
15
  local IllegalStateException = ____exception.IllegalStateException
16
16
  local ____attributes = require("attributes")
17
17
  local AttributesHolder = ____attributes.AttributesHolder
18
+ local ____preconditions = require("utility.preconditions")
19
+ local checkNotNull = ____preconditions.checkNotNull
18
20
  local getHandleId = GetHandleId
19
21
  local onCreateEventByHandleConstructor = {}
20
22
  local onDestroyEventByHandleConstructor = {}
@@ -66,17 +68,12 @@ function Handle.prototype.onDestroy(self, ...)
66
68
  return nil
67
69
  end
68
70
  function Handle.prototype.destroy(self, ...)
71
+ if self[0] == 2 or self[0] == 3 then
72
+ return nil
73
+ end
69
74
  local clazz = self.constructor
70
75
  local id = getHandleId(self.handle)
71
- if not clazz.memoized[id] then
72
- error(
73
- __TS__New(
74
- IllegalStateException,
75
- "Double-destroy run for handle " .. tostring(id)
76
- ),
77
- 0
78
- )
79
- end
76
+ checkNotNull(clazz.memoized[id])
80
77
  self[0] = 2
81
78
  if self.onDestroyEvent then
82
79
  Event.invoke(self.onDestroyEvent)
@@ -1,4 +1,5 @@
1
1
  /** @noSelfInFile */
2
2
  import { Item } from "../../engine/internal/item";
3
3
  import "../../engine/internal/item+owner";
4
+ import "../../engine/internal/item/fields";
4
5
  export { Item };
@@ -2,5 +2,6 @@ local ____exports = {}
2
2
  local ____item = require("engine.internal.item")
3
3
  local Item = ____item.Item
4
4
  require("engine.internal.item+owner")
5
+ require("engine.internal.item.fields")
5
6
  ____exports.Item = Item
6
7
  return ____exports
@@ -28,6 +28,7 @@ export declare class Player extends Handle<jplayer> {
28
28
  static readonly neutralExtra: Player;
29
29
  private static events;
30
30
  readonly id: number;
31
+ readonly slotState: jplayerslotstate;
31
32
  constructor(handle: jplayer);
32
33
  onDestroy(): HandleDestructor;
33
34
  toString(): string;
@@ -45,7 +46,6 @@ export declare class Player extends Handle<jplayer> {
45
46
  get isUser(): boolean;
46
47
  get isPlaying(): boolean;
47
48
  get controller(): jmapcontrol;
48
- get slotState(): jplayerslotstate;
49
49
  clearSelection(): void;
50
50
  selectSingle(unit: Unit): void;
51
51
  select(unit: Unit): void;
@@ -81,6 +81,7 @@ export declare class Player extends Handle<jplayer> {
81
81
  };
82
82
  };
83
83
  static get onChat(): Event<[player: Player, message: string]>;
84
+ static readonly colorChangedEvent: Event<[Player]>;
84
85
  static byId(id: number): Player | undefined;
85
86
  }
86
87
  export {};
@@ -1,7 +1,7 @@
1
1
  local ____lualib = require("lualib_bundle")
2
+ local __TS__New = ____lualib.__TS__New
2
3
  local __TS__Class = ____lualib.__TS__Class
3
4
  local __TS__ClassExtends = ____lualib.__TS__ClassExtends
4
- local __TS__New = ____lualib.__TS__New
5
5
  local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
6
6
  local __TS__ObjectDefineProperty = ____lualib.__TS__ObjectDefineProperty
7
7
  local ____exports = {}
@@ -49,12 +49,14 @@ local nativeByPlayerAllianceType = {
49
49
  [8] = ALLIANCE_SHARED_CONTROL,
50
50
  [9] = ALLIANCE_SHARED_ADVANCED_CONTROL
51
51
  }
52
+ local playerColorChangedEvent = __TS__New(Event)
52
53
  ____exports.Player = __TS__Class()
53
54
  local Player = ____exports.Player
54
55
  Player.name = "Player"
55
56
  __TS__ClassExtends(Player, Handle)
56
57
  function Player.prototype.____constructor(self, handle)
57
58
  Handle.prototype.____constructor(self, handle)
59
+ self.slotState = GetPlayerSlotState(self.handle)
58
60
  self.id = GetPlayerId(handle)
59
61
  end
60
62
  function Player.prototype.onDestroy(self)
@@ -300,6 +302,7 @@ __TS__SetDescriptor(
300
302
  end,
301
303
  set = function(self, color)
302
304
  SetPlayerColor(self.handle, color.handle)
305
+ Event.invoke(playerColorChangedEvent, self)
303
306
  end
304
307
  },
305
308
  true
@@ -362,7 +365,7 @@ __TS__SetDescriptor(
362
365
  Player.prototype,
363
366
  "isUser",
364
367
  {get = function(self)
365
- return GetPlayerController(self.handle) == MAP_CONTROL_USER
368
+ return self.controller == MAP_CONTROL_USER
366
369
  end},
367
370
  true
368
371
  )
@@ -370,7 +373,7 @@ __TS__SetDescriptor(
370
373
  Player.prototype,
371
374
  "isPlaying",
372
375
  {get = function(self)
373
- return GetPlayerSlotState(self.handle) == PLAYER_SLOT_STATE_PLAYING
376
+ return self.slotState == PLAYER_SLOT_STATE_PLAYING
374
377
  end},
375
378
  true
376
379
  )
@@ -378,15 +381,9 @@ __TS__SetDescriptor(
378
381
  Player.prototype,
379
382
  "controller",
380
383
  {get = function(self)
381
- return GetPlayerController(self.handle)
382
- end},
383
- true
384
- )
385
- __TS__SetDescriptor(
386
- Player.prototype,
387
- "slotState",
388
- {get = function(self)
389
- return GetPlayerSlotState(self.handle)
384
+ local controller = GetPlayerController(self.handle)
385
+ rawset(self, "controller", controller)
386
+ return controller
390
387
  end},
391
388
  true
392
389
  )
@@ -487,4 +484,11 @@ __TS__ObjectDefineProperty(
487
484
  return event
488
485
  end}
489
486
  )
487
+ Player.colorChangedEvent = playerColorChangedEvent
488
+ ____exports.Player.onLeave:addListener(
489
+ 999999,
490
+ function(player)
491
+ rawset(player, "slotState", PLAYER_SLOT_STATE_LEFT)
492
+ end
493
+ )
490
494
  return ____exports
@@ -22,7 +22,7 @@ local setSoundPlayPosition = SetSoundPlayPosition
22
22
  local stopSound = StopSound
23
23
  local attachSoundToUnit = AttachSoundToUnit
24
24
  local killSoundWhenDone = KillSoundWhenDone
25
- ____exports.SoundChannel = SoundChannel or ({})
25
+ ____exports.SoundChannel = ____exports.SoundChannel or ({})
26
26
  ____exports.SoundChannel.General = 0
27
27
  ____exports.SoundChannel[____exports.SoundChannel.General] = "General"
28
28
  ____exports.SoundChannel.UnitSelection = 1
@@ -1,5 +1,6 @@
1
1
  /** @noSelfInFile */
2
- export declare class TileCell implements Readonly<Vec2> {
2
+ import { AttributesHolder } from "../../attributes";
3
+ export declare class TileCell extends AttributesHolder implements Readonly<Vec2> {
3
4
  private readonly id;
4
5
  readonly x: number;
5
6
  readonly y: number;
@@ -1,8 +1,11 @@
1
1
  local ____lualib = require("lualib_bundle")
2
2
  local __TS__Class = ____lualib.__TS__Class
3
+ local __TS__ClassExtends = ____lualib.__TS__ClassExtends
3
4
  local __TS__New = ____lualib.__TS__New
4
5
  local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
5
6
  local ____exports = {}
7
+ local ____attributes = require("attributes")
8
+ local AttributesHolder = ____attributes.AttributesHolder
6
9
  local getTerrainType = GetTerrainType
7
10
  local setTerrainType = SetTerrainType
8
11
  local getTerrainVariance = GetTerrainVariance
@@ -13,7 +16,9 @@ local tileCellById = {}
13
16
  ____exports.TileCell = __TS__Class()
14
17
  local TileCell = ____exports.TileCell
15
18
  TileCell.name = "TileCell"
19
+ __TS__ClassExtends(TileCell, AttributesHolder)
16
20
  function TileCell.prototype.____constructor(self, id, x, y, z)
21
+ AttributesHolder.prototype.____constructor(self)
17
22
  self.id = id
18
23
  self.x = x
19
24
  self.y = y
package/destroyable.d.ts CHANGED
@@ -10,6 +10,7 @@ export interface Destroyable {
10
10
  destroy(): void;
11
11
  }
12
12
  export declare abstract class AbstractDestroyable implements Destroyable {
13
+ get isDestroyed(): boolean;
13
14
  /**
14
15
  * An overriding function should always call the super one at the end of it,
15
16
  * in the following manner: `return super.onDestroy()`.
package/destroyable.lua CHANGED
@@ -1,6 +1,7 @@
1
1
  local ____lualib = require("lualib_bundle")
2
2
  local __TS__Class = ____lualib.__TS__Class
3
3
  local __TS__New = ____lualib.__TS__New
4
+ local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
4
5
  local ____exports = {}
5
6
  local ____exception = require("exception")
6
7
  local IllegalStateException = ____exception.IllegalStateException
@@ -28,4 +29,12 @@ function AbstractDestroyable.prototype.destroy(self)
28
29
  end
29
30
  return true
30
31
  end
32
+ __TS__SetDescriptor(
33
+ AbstractDestroyable.prototype,
34
+ "isDestroyed",
35
+ {get = function(self)
36
+ return stateByDestroyable[self] ~= nil
37
+ end},
38
+ true
39
+ )
31
40
  return ____exports
@@ -1,6 +1,11 @@
1
1
  /** @noSelfInFile */
2
2
  import { AbstractDestroyable, Destructor } from "../destroyable";
3
3
  import { Event } from "../event";
4
+ export declare const enum BehaviorPriority {
5
+ HIGH = 0,
6
+ MEDIUM = 1,
7
+ LOW = 2
8
+ }
4
9
  export type BehaviorConstructor<T extends Behavior<AnyNotNil>, Parameters extends any[] = any[]> = OmitConstructor<typeof Behavior<any>> & (abstract new (...parameters: Parameters) => T);
5
10
  declare const enum BehaviorPropertyKey {
6
11
  PREVIOUS_BEHAVIOR = 0,
@@ -9,12 +14,15 @@ declare const enum BehaviorPropertyKey {
9
14
  }
10
15
  export declare abstract class Behavior<T extends AnyNotNil, PeriodicActionParameters extends any[] = any[]> extends AbstractDestroyable {
11
16
  protected readonly object: T;
17
+ readonly priority: BehaviorPriority;
12
18
  private [BehaviorPropertyKey.PREVIOUS_BEHAVIOR]?;
13
19
  private [BehaviorPropertyKey.NEXT_BEHAVIOR]?;
14
20
  private [BehaviorPropertyKey.TIMER]?;
15
- protected constructor(object: T);
21
+ constructor(object: T, priority?: BehaviorPriority);
16
22
  protected onDestroy(): Destructor;
17
- protected registerEvent<K extends string, Args extends any[]>(this: Behavior<any, PeriodicActionParameters> & Record<K, (this: this, ...args: Args) => unknown>, event: Event<[...Args]>, listener: K): void;
23
+ protected registerGlobalEvent<K extends string, Args extends any[]>(this: Behavior<any, PeriodicActionParameters> & Record<K, (this: this, ...args: Args) => unknown>, event: Event<[...Args]>, listener: K): void;
24
+ protected deregisterGlobalEvent(event: Event<any>): boolean;
25
+ protected registerEvent<K extends string, Args extends any[]>(this: Behavior<any, PeriodicActionParameters> & Record<K, (this: this, ...args: Args) => unknown>, event: Event<[...Args]>, extractObject: (...args: Args) => T | undefined, listener: K): void;
18
26
  protected deregisterEvent(event: Event<any>): boolean;
19
27
  protected onPeriod(...parameters: PeriodicActionParameters): void;
20
28
  protected startPeriodicAction(interval: number, ...parameters: PeriodicActionParameters): void;