warscript 0.0.1-dev.d842bb6 → 0.0.1-dev.db137e7

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 (158) hide show
  1. package/attributes.d.ts +5 -0
  2. package/attributes.lua +8 -1
  3. package/binarywriter.lua +12 -0
  4. package/config.d.ts +5 -0
  5. package/config.lua +10 -0
  6. package/core/types/effect.d.ts +1 -3
  7. package/core/types/effect.lua +26 -29
  8. package/core/types/frame.lua +24 -21
  9. package/core/types/player.lua +3 -1
  10. package/core/types/playerCamera.d.ts +2 -0
  11. package/core/types/playerCamera.lua +123 -5
  12. package/core/types/sound.d.ts +17 -25
  13. package/core/types/sound.lua +91 -46
  14. package/core/types/tileCell.d.ts +9 -0
  15. package/core/types/tileCell.lua +92 -0
  16. package/core/types/timer.d.ts +8 -8
  17. package/core/types/timer.lua +39 -23
  18. package/core/util.lua +6 -1
  19. package/decl/native.d.ts +846 -790
  20. package/engine/behavior.d.ts +5 -0
  21. package/engine/behavior.lua +106 -27
  22. package/engine/behaviour/ability/apply-buff.lua +1 -1
  23. package/engine/behaviour/ability/apply-unit-behavior.lua +1 -0
  24. package/engine/behaviour/ability/damage.d.ts +9 -3
  25. package/engine/behaviour/ability/damage.lua +26 -38
  26. package/engine/behaviour/ability/emulate-impact.d.ts +1 -1
  27. package/engine/behaviour/ability/emulate-impact.lua +18 -3
  28. package/engine/behaviour/ability/restore-mana.d.ts +1 -1
  29. package/engine/behaviour/ability/restore-mana.lua +6 -6
  30. package/engine/behaviour/ability.d.ts +5 -1
  31. package/engine/behaviour/ability.lua +26 -21
  32. package/engine/behaviour/unit/stun-immunity.d.ts +7 -3
  33. package/engine/behaviour/unit/stun-immunity.lua +52 -27
  34. package/engine/behaviour/unit.d.ts +32 -0
  35. package/engine/behaviour/unit.lua +185 -4
  36. package/engine/buff.d.ts +15 -12
  37. package/engine/buff.lua +133 -117
  38. package/engine/internal/ability.d.ts +7 -1
  39. package/engine/internal/ability.lua +49 -9
  40. package/engine/internal/item/ability.lua +63 -11
  41. package/engine/internal/item+owner.lua +12 -6
  42. package/engine/internal/item.d.ts +6 -5
  43. package/engine/internal/item.lua +97 -26
  44. package/engine/internal/mechanics/ability-duration.lua +1 -1
  45. package/engine/internal/misc/damage-metadata-by-target.d.ts +2 -0
  46. package/engine/internal/misc/damage-metadata-by-target.lua +5 -0
  47. package/engine/internal/misc/frame-coordinates.d.ts +2 -0
  48. package/engine/internal/misc/frame-coordinates.lua +21 -0
  49. package/engine/internal/misc/get-terrain-z.d.ts +2 -0
  50. package/engine/internal/misc/get-terrain-z.lua +11 -0
  51. package/engine/internal/misc/player-local-handle.d.ts +2 -0
  52. package/engine/internal/misc/player-local-handle.lua +5 -0
  53. package/engine/internal/unit/ability.d.ts +35 -0
  54. package/engine/internal/unit/ability.lua +63 -1
  55. package/engine/internal/unit/allowed-targets.d.ts +1 -1
  56. package/engine/internal/unit/allowed-targets.lua +9 -1
  57. package/engine/internal/unit/order.d.ts +20 -0
  58. package/engine/internal/unit/order.lua +136 -0
  59. package/engine/internal/unit+ability.lua +10 -1
  60. package/engine/internal/unit+damage.d.ts +2 -11
  61. package/engine/internal/unit+damage.lua +10 -14
  62. package/engine/internal/unit+spellSteal.lua +1 -2
  63. package/engine/internal/unit-missile-launch.lua +9 -2
  64. package/engine/internal/unit.d.ts +32 -10
  65. package/engine/internal/unit.lua +257 -110
  66. package/engine/object-data/auxiliary/armor-type.d.ts +11 -0
  67. package/engine/object-data/auxiliary/armor-type.lua +46 -0
  68. package/engine/object-data/auxiliary/attachment-preset.d.ts +7 -2
  69. package/engine/object-data/auxiliary/attachment-preset.lua +4 -3
  70. package/engine/object-data/auxiliary/attack-type.d.ts +7 -8
  71. package/engine/object-data/auxiliary/attack-type.lua +42 -0
  72. package/engine/object-data/auxiliary/movement-type.d.ts +7 -7
  73. package/engine/object-data/auxiliary/movement-type.lua +22 -0
  74. package/engine/object-data/auxiliary/sound-eax.d.ts +10 -0
  75. package/engine/object-data/auxiliary/sound-eax.lua +2 -0
  76. package/engine/object-data/auxiliary/tech-tree-dependency.d.ts +1 -1
  77. package/engine/object-data/auxiliary/unit-attribute.d.ts +6 -0
  78. package/engine/object-data/auxiliary/unit-attribute.lua +9 -0
  79. package/engine/object-data/entry/ability-type/berserk.d.ts +2 -0
  80. package/engine/object-data/entry/ability-type/berserk.lua +13 -0
  81. package/engine/object-data/entry/ability-type/blank-configurable.lua +0 -9
  82. package/engine/object-data/entry/ability-type/carrion-swarm.d.ts +14 -0
  83. package/engine/object-data/entry/ability-type/carrion-swarm.lua +65 -0
  84. package/engine/object-data/entry/ability-type/curse.lua +2 -2
  85. package/engine/object-data/entry/ability-type/disease-cloud.lua +2 -2
  86. package/engine/object-data/entry/ability-type/engineering-upgrade.lua +2 -2
  87. package/engine/object-data/entry/ability-type/ensnare.d.ts +12 -0
  88. package/engine/object-data/entry/ability-type/ensnare.lua +52 -0
  89. package/engine/object-data/entry/ability-type/feral-spirit.lua +2 -2
  90. package/engine/object-data/entry/ability-type/permanent-invisibility.d.ts +8 -0
  91. package/engine/object-data/entry/ability-type/permanent-invisibility.lua +26 -0
  92. package/engine/object-data/entry/ability-type/phase-shift.d.ts +10 -0
  93. package/engine/object-data/entry/ability-type/phase-shift.lua +39 -0
  94. package/engine/object-data/entry/ability-type/phoenix-morph.lua +4 -4
  95. package/engine/object-data/entry/ability-type/raise-dead.d.ts +17 -0
  96. package/engine/object-data/entry/ability-type/raise-dead.lua +78 -0
  97. package/engine/object-data/entry/ability-type/shock-wave.d.ts +4 -0
  98. package/engine/object-data/entry/ability-type/shock-wave.lua +26 -0
  99. package/engine/object-data/entry/ability-type/slow-poison.d.ts +10 -0
  100. package/engine/object-data/entry/ability-type/slow-poison.lua +58 -0
  101. package/engine/object-data/entry/ability-type/summon-quilbeast.lua +2 -2
  102. package/engine/object-data/entry/ability-type/summon-water-elemental.lua +2 -2
  103. package/engine/object-data/entry/ability-type/web.d.ts +12 -0
  104. package/engine/object-data/entry/ability-type/web.lua +52 -0
  105. package/engine/object-data/entry/ability-type.d.ts +19 -17
  106. package/engine/object-data/entry/ability-type.lua +82 -24
  107. package/engine/object-data/entry/buff-type/applicable.lua +9 -4
  108. package/engine/object-data/entry/buff-type.d.ts +6 -12
  109. package/engine/object-data/entry/buff-type.lua +13 -29
  110. package/engine/object-data/entry/destructible-type.d.ts +1 -1
  111. package/engine/object-data/entry/item-type.d.ts +1 -1
  112. package/engine/object-data/entry/item-type.lua +4 -4
  113. package/engine/object-data/entry/lightning-type.d.ts +1 -1
  114. package/engine/object-data/entry/sound-preset.d.ts +33 -0
  115. package/engine/object-data/entry/sound-preset.lua +140 -0
  116. package/engine/object-data/entry/unit-type.d.ts +21 -5
  117. package/engine/object-data/entry/unit-type.lua +214 -93
  118. package/engine/object-data/entry/upgrade.d.ts +1 -1
  119. package/engine/object-data/entry/upgrade.lua +4 -4
  120. package/engine/object-data/entry.d.ts +16 -14
  121. package/engine/object-data/entry.lua +60 -32
  122. package/engine/object-field/ability.d.ts +4 -4
  123. package/engine/object-field/ability.lua +7 -6
  124. package/engine/object-field/unit.d.ts +57 -3
  125. package/engine/object-field/unit.lua +207 -7
  126. package/engine/object-field.d.ts +17 -6
  127. package/engine/object-field.lua +188 -92
  128. package/engine/random.d.ts +9 -0
  129. package/engine/random.lua +13 -0
  130. package/engine/standard/entries/buff-type.d.ts +3 -0
  131. package/engine/standard/entries/buff-type.lua +3 -0
  132. package/engine/standard/entries/sound-preset.d.ts +10 -0
  133. package/engine/standard/entries/sound-preset.lua +10 -0
  134. package/engine/standard/fields/unit.d.ts +4 -0
  135. package/engine/standard/fields/unit.lua +7 -0
  136. package/engine/text-tag.d.ts +36 -2
  137. package/engine/text-tag.lua +249 -10
  138. package/engine/unit.d.ts +1 -0
  139. package/engine/unit.lua +1 -0
  140. package/objutil/buff.lua +1 -2
  141. package/objutil/unit.lua +8 -0
  142. package/package.json +2 -2
  143. package/patch-lualib.lua +1 -1
  144. package/utility/arrays.d.ts +2 -0
  145. package/utility/arrays.lua +11 -0
  146. package/utility/callback-array.d.ts +13 -0
  147. package/utility/callback-array.lua +46 -0
  148. package/utility/functions.d.ts +8 -0
  149. package/utility/functions.lua +13 -0
  150. package/utility/linked-set.d.ts +1 -0
  151. package/utility/linked-set.lua +3 -0
  152. package/utility/lua-maps.d.ts +15 -2
  153. package/utility/lua-maps.lua +53 -2
  154. package/utility/lua-sets.d.ts +2 -0
  155. package/utility/lua-sets.lua +7 -0
  156. package/utility/reflection.lua +11 -7
  157. package/core/types/order.d.ts +0 -25
  158. package/core/types/order.lua +0 -55
@@ -5,6 +5,10 @@ local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
5
5
  local ____exports = {}
6
6
  local ____handle = require("core.types.handle")
7
7
  local Handle = ____handle.Handle
8
+ local ____sound_2Dpreset = require("engine.object-data.entry.sound-preset")
9
+ local SoundPreset = ____sound_2Dpreset.SoundPreset
10
+ local ____random = require("engine.random")
11
+ local randomInteger = ____random.randomInteger
8
12
  local createSound = CreateSound
9
13
  local createSoundFromLabel = CreateSoundFromLabel
10
14
  local setSoundPitch = SetSoundPitch
@@ -49,29 +53,21 @@ ____exports.SoundChannel.Birth = 13
49
53
  ____exports.SoundChannel[____exports.SoundChannel.Birth] = "Birth"
50
54
  ____exports.SoundChannel.Fire = 14
51
55
  ____exports.SoundChannel[____exports.SoundChannel.Fire] = "Fire"
52
- ____exports.SoundEax = SoundEax or ({})
53
- ____exports.SoundEax.Default = "DefaultEAXON"
54
- ____exports.SoundEax.Acknowledgements = "HeroAcksEAX"
55
- ____exports.SoundEax.Environment = "DoodadsEAX"
56
- ____exports.SoundEax.Drums = "KotoDrumsEAX"
57
- ____exports.SoundEax.Attacks = "CombatSoundsEAX"
58
- ____exports.SoundEax.Abilities = "SpellsEAX"
59
- ____exports.SoundEax.Missiles = "MissilesEAX"
60
- ____exports.SoundPreset = {}
61
- local SoundPreset = ____exports.SoundPreset
56
+ ____exports.SoundSettings = {}
57
+ local SoundSettings = ____exports.SoundSettings
62
58
  do
63
- SoundPreset.UI = {channel = ____exports.SoundChannel.UI, eax = ____exports.SoundEax.Default, fadeInRate = 12700, fadeOutRate = 12700}
64
- SoundPreset.Music = {
59
+ SoundSettings.UI = {channel = ____exports.SoundChannel.UI, eax = "DefaultEAXON", fadeInRate = 12700, fadeOutRate = 12700}
60
+ SoundSettings.Music = {
65
61
  channel = ____exports.SoundChannel.Music,
66
- eax = ____exports.SoundEax.Default,
62
+ eax = "DefaultEAXON",
67
63
  fadeInRate = 12700,
68
64
  fadeOutRate = 12700,
69
65
  looping = true
70
66
  }
71
- SoundPreset.Attack = {channel = ____exports.SoundChannel.Combat, eax = ____exports.SoundEax.Attacks, fadeInRate = 10, fadeOutRate = 10}
72
- SoundPreset.Ability = {
67
+ SoundSettings.Attack = {channel = ____exports.SoundChannel.Combat, eax = "CombatSoundsEAX", fadeInRate = 10, fadeOutRate = 10}
68
+ SoundSettings.Ability = {
73
69
  channel = ____exports.SoundChannel.Animations,
74
- eax = ____exports.SoundEax.Abilities,
70
+ eax = "SpellsEAX",
75
71
  stopWhenOutOfRange = true,
76
72
  volume = 127,
77
73
  fadeInRate = 1,
@@ -81,9 +77,9 @@ do
81
77
  maxDistance = 3500,
82
78
  distanceCutoff = 3000
83
79
  }
84
- SoundPreset.AbilityLooping = {
80
+ SoundSettings.AbilityLooping = {
85
81
  channel = ____exports.SoundChannel.Birth,
86
- eax = ____exports.SoundEax.Abilities,
82
+ eax = "SpellsEAX",
87
83
  looping = true,
88
84
  stopWhenOutOfRange = true,
89
85
  volume = 127,
@@ -94,9 +90,9 @@ do
94
90
  maxDistance = 3000,
95
91
  distanceCutoff = 3000
96
92
  }
97
- SoundPreset.Missile = {
93
+ SoundSettings.Missile = {
98
94
  channel = ____exports.SoundChannel.Animations,
99
- eax = ____exports.SoundEax.Missiles,
95
+ eax = "MissilesEAX",
100
96
  stopWhenOutOfRange = true,
101
97
  volume = 127,
102
98
  fadeInRate = 1,
@@ -107,6 +103,29 @@ do
107
103
  distanceCutoff = 3000
108
104
  }
109
105
  end
106
+ local customSoundPresetDataByLabel = postcompile(function()
107
+ local customSoundPresetDataByLabel = {}
108
+ for ____, soundPreset in ipairs(SoundPreset:getAll()) do
109
+ if soundPreset.isCustom then
110
+ customSoundPresetDataByLabel[soundPreset.id] = {
111
+ filePaths = soundPreset.filePaths,
112
+ volume = soundPreset.volume,
113
+ pitch = soundPreset.pitch,
114
+ channel = soundPreset.channel,
115
+ minimumDistance = soundPreset.minimumDistance,
116
+ maximumDistance = soundPreset.maximumDistance,
117
+ distanceCutoff = soundPreset.distanceCutoff,
118
+ eax = soundPreset.eax
119
+ }
120
+ end
121
+ end
122
+ return customSoundPresetDataByLabel
123
+ end)
124
+ ---
125
+ -- @internal For use by internal systems only.
126
+ ____exports.isSoundLabelCustom = function(label)
127
+ return customSoundPresetDataByLabel[label] ~= nil
128
+ end
110
129
  local function createPresetSound(fileName, preset)
111
130
  local ____fileName_1 = fileName
112
131
  local ____preset_looping_0 = preset.looping
@@ -120,7 +139,7 @@ local function createPresetSound(fileName, preset)
120
139
  true,
121
140
  preset.fadeInRate or 12700,
122
141
  preset.fadeOutRate or 12700,
123
- preset.eax or ____exports.SoundEax.Default
142
+ preset.eax or "DefaultEAXON"
124
143
  )
125
144
  setSoundChannel(sound, preset.channel or ____exports.SoundChannel.General)
126
145
  setSoundVolume(sound, preset.volume or 127)
@@ -143,7 +162,7 @@ local function createPreset3DSound(fileName, preset)
143
162
  ____preset_stopWhenOutOfRange_3,
144
163
  preset.fadeInRate or 12700,
145
164
  preset.fadeOutRate or 12700,
146
- preset.eax or ____exports.SoundEax.Default
165
+ preset.eax or "DefaultEAXON"
147
166
  )
148
167
  setSoundChannel(sound, preset.channel or ____exports.SoundChannel.General)
149
168
  setSoundVolume(sound, preset.volume or 127)
@@ -153,29 +172,51 @@ local function createPreset3DSound(fileName, preset)
153
172
  return sound
154
173
  end
155
174
  local function createPreset3DSoundFromLabel(label, preset)
156
- local ____label_7 = label
157
- local ____preset_looping_5 = preset.looping
158
- if ____preset_looping_5 == nil then
159
- ____preset_looping_5 = false
160
- end
161
- local ____preset_stopWhenOutOfRange_6 = preset.stopWhenOutOfRange
162
- if ____preset_stopWhenOutOfRange_6 == nil then
163
- ____preset_stopWhenOutOfRange_6 = true
175
+ local customSoundPresetData = customSoundPresetDataByLabel[label]
176
+ if customSoundPresetData == nil then
177
+ local ____label_7 = label
178
+ local ____preset_looping_5 = preset.looping
179
+ if ____preset_looping_5 == nil then
180
+ ____preset_looping_5 = false
181
+ end
182
+ local ____preset_stopWhenOutOfRange_6 = preset.stopWhenOutOfRange
183
+ if ____preset_stopWhenOutOfRange_6 == nil then
184
+ ____preset_stopWhenOutOfRange_6 = true
185
+ end
186
+ return createSoundFromLabel(
187
+ ____label_7,
188
+ ____preset_looping_5,
189
+ true,
190
+ ____preset_stopWhenOutOfRange_6,
191
+ preset.fadeInRate or 12700,
192
+ preset.fadeOutRate or 12700
193
+ )
194
+ else
195
+ local ____customSoundPresetData_filePaths_index_10 = customSoundPresetData.filePaths[randomInteger(#customSoundPresetData.filePaths - 1) + 1]
196
+ local ____preset_looping_8 = preset.looping
197
+ if ____preset_looping_8 == nil then
198
+ ____preset_looping_8 = false
199
+ end
200
+ local ____preset_stopWhenOutOfRange_9 = preset.stopWhenOutOfRange
201
+ if ____preset_stopWhenOutOfRange_9 == nil then
202
+ ____preset_stopWhenOutOfRange_9 = true
203
+ end
204
+ local sound = createSound(
205
+ ____customSoundPresetData_filePaths_index_10,
206
+ ____preset_looping_8,
207
+ true,
208
+ ____preset_stopWhenOutOfRange_9,
209
+ preset.fadeInRate or 12700,
210
+ preset.fadeOutRate or 12700,
211
+ customSoundPresetData.eax
212
+ )
213
+ setSoundChannel(sound, customSoundPresetData.channel)
214
+ setSoundVolume(sound, customSoundPresetData.volume)
215
+ setSoundPitch(sound, customSoundPresetData.pitch)
216
+ setSoundDistances(sound, customSoundPresetData.minimumDistance, customSoundPresetData.maximumDistance)
217
+ setSoundDistanceCutoff(sound, customSoundPresetData.distanceCutoff)
218
+ return sound
164
219
  end
165
- local sound = createSoundFromLabel(
166
- ____label_7,
167
- ____preset_looping_5,
168
- true,
169
- ____preset_stopWhenOutOfRange_6,
170
- preset.fadeInRate or 12700,
171
- preset.fadeOutRate or 12700
172
- )
173
- setSoundChannel(sound, preset.channel or ____exports.SoundChannel.General)
174
- setSoundVolume(sound, preset.volume or 127)
175
- setSoundPitch(sound, preset.pitch or 1)
176
- setSoundDistances(sound, preset.minDistance or 600, preset.maxDistance or 8000)
177
- setSoundDistanceCutoff(sound, preset.distanceCutoff or 1500)
178
- return sound
179
220
  end
180
221
  ____exports.Sound = __TS__Class()
181
222
  local Sound = ____exports.Sound
@@ -249,9 +290,13 @@ function Sound3D.playOnUnit(self, fileName, preset, unit)
249
290
  startSound(sound)
250
291
  killSoundWhenDone(sound)
251
292
  end
252
- function Sound3D.playFromLabel(self, label, preset, unit)
293
+ function Sound3D.playFromLabel(self, label, preset, unitOrX, y, z)
253
294
  local sound = createPreset3DSoundFromLabel(label, preset)
254
- attachSoundToUnit(sound, unit.handle)
295
+ if type(unitOrX) ~= "number" then
296
+ attachSoundToUnit(sound, unitOrX.handle)
297
+ else
298
+ setSoundPosition(sound, unitOrX, y or 0, z or 0)
299
+ end
255
300
  startSound(sound)
256
301
  killSoundWhenDone(sound)
257
302
  end
@@ -5,6 +5,15 @@ export declare class TileCell implements Readonly<Vec2> {
5
5
  readonly y: number;
6
6
  readonly z: undefined;
7
7
  protected constructor(id: number, x: number, y: number, z: undefined);
8
+ get up(): TileCell;
9
+ get down(): TileCell;
10
+ get left(): TileCell;
11
+ get right(): TileCell;
12
+ get terrainTypeId(): number;
13
+ set terrainTypeId(terrainTypeId: number);
14
+ get terrainVariance(): number;
15
+ set terrainVariance(terrainVariance: number);
16
+ randomizeTerrainVariance(): void;
8
17
  isInRangeOf(x: number, y: number, range: number): boolean;
9
18
  isInRangeOf(tileCell: TileCell, range: number): boolean;
10
19
  static getInRect(minX: number, minY: number, maxX: number, maxY: number): TileCell[];
@@ -1,7 +1,11 @@
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 = {}
6
+ local getTerrainType = GetTerrainType
7
+ local setTerrainType = SetTerrainType
8
+ local getTerrainVariance = GetTerrainVariance
5
9
  local abs = math.abs
6
10
  local ____type = math.type
7
11
  local ult = math.ult
@@ -16,6 +20,18 @@ function TileCell.prototype.____constructor(self, id, x, y, z)
16
20
  self.z = z
17
21
  tileCellById[id] = self
18
22
  end
23
+ function TileCell.prototype.randomizeTerrainVariance(self)
24
+ local x = self.x
25
+ local y = self.y
26
+ setTerrainType(
27
+ x,
28
+ y,
29
+ getTerrainType(x, y),
30
+ -1,
31
+ 1,
32
+ 1
33
+ )
34
+ end
19
35
  function TileCell.prototype.isInRangeOf(self, x, y, range)
20
36
  if range == nil then
21
37
  range = y
@@ -97,4 +113,80 @@ function TileCell.of(x, y)
97
113
  nil
98
114
  )
99
115
  end
116
+ __TS__SetDescriptor(
117
+ TileCell.prototype,
118
+ "up",
119
+ {get = function(self)
120
+ return ____exports.TileCell.of(self.x, self.y + 128)
121
+ end},
122
+ true
123
+ )
124
+ __TS__SetDescriptor(
125
+ TileCell.prototype,
126
+ "down",
127
+ {get = function(self)
128
+ return ____exports.TileCell.of(self.x, self.y - 128)
129
+ end},
130
+ true
131
+ )
132
+ __TS__SetDescriptor(
133
+ TileCell.prototype,
134
+ "left",
135
+ {get = function(self)
136
+ return ____exports.TileCell.of(self.x - 128, self.y)
137
+ end},
138
+ true
139
+ )
140
+ __TS__SetDescriptor(
141
+ TileCell.prototype,
142
+ "right",
143
+ {get = function(self)
144
+ return ____exports.TileCell.of(self.x + 128, self.y)
145
+ end},
146
+ true
147
+ )
148
+ __TS__SetDescriptor(
149
+ TileCell.prototype,
150
+ "terrainTypeId",
151
+ {
152
+ get = function(self)
153
+ return getTerrainType(self.x, self.y)
154
+ end,
155
+ set = function(self, terrainTypeId)
156
+ local x = self.x
157
+ local y = self.y
158
+ setTerrainType(
159
+ x,
160
+ y,
161
+ terrainTypeId,
162
+ getTerrainVariance(x, y),
163
+ 1,
164
+ 1
165
+ )
166
+ end
167
+ },
168
+ true
169
+ )
170
+ __TS__SetDescriptor(
171
+ TileCell.prototype,
172
+ "terrainVariance",
173
+ {
174
+ get = function(self)
175
+ return getTerrainVariance(self.x, self.y)
176
+ end,
177
+ set = function(self, terrainVariance)
178
+ local x = self.x
179
+ local y = self.y
180
+ setTerrainType(
181
+ x,
182
+ y,
183
+ getTerrainType(x, y),
184
+ terrainVariance,
185
+ 1,
186
+ 1
187
+ )
188
+ end
189
+ },
190
+ true
191
+ )
100
192
  return ____exports
@@ -1,29 +1,29 @@
1
1
  /** @noSelfInFile */
2
2
  import { Event } from "../../event";
3
+ import { AbstractDestroyable, Destructor } from "../../destroyable";
3
4
  declare const enum TimerPropertyKey {
4
5
  HANDLE = 0,
5
- DESTROYED = 1,
6
- DESTROY_ON_EXPIRATION = 2,
7
- CALLBACK = 3,
8
- ARGS_LENGTH = 4
6
+ DESTROY_ON_EXPIRATION = 1,
7
+ CALLBACK = 2,
8
+ ARGS_LENGTH = 3
9
9
  }
10
- export declare class Timer implements Destroyable {
10
+ export declare class Timer extends AbstractDestroyable {
11
11
  private readonly [TimerPropertyKey.HANDLE];
12
- private [TimerPropertyKey.DESTROYED]?;
13
12
  private [TimerPropertyKey.DESTROY_ON_EXPIRATION]?;
14
13
  private [TimerPropertyKey.CALLBACK]?;
15
14
  private [TimerPropertyKey.ARGS_LENGTH]?;
16
15
  private constructor();
17
16
  get handle(): jtimer;
18
17
  start<Args extends any[]>(timeout: number, periodic: boolean, callback: (...args: Args) => void, ...args: Args): void;
18
+ onDestroy(): Destructor;
19
19
  get elapsed(): number;
20
20
  get remaining(): number;
21
21
  get timeout(): number;
22
22
  pause(): void;
23
23
  resume(): void;
24
- destroy(): void;
25
24
  static create(): Timer;
26
- static run<Args extends any[]>(callback: (...args: Args) => void, ...args: Args): void;
25
+ static run<T, K extends KeysOfType<T, (this: T, ...args: any) => any>>(object: T, key: K, ...parameters: T[K] extends (this: T, ...args: any) => any ? Parameters<T[K]> : never): void;
26
+ static run<Args extends any[]>(callback: (this: void, ...args: Args) => void, ...args: Args): void;
27
27
  static simple<Args extends any[]>(timeout: number, callback: (...args: Args) => void, ...args: Args): Timer;
28
28
  static periodic<Args extends any[]>(period: number, callback: (this: void, timer: Timer, ...args: Args) => void, ...args: Args): Timer;
29
29
  static counted(period: number, count: number, callback: (this: void, timer: Timer) => void): Timer;
@@ -1,6 +1,7 @@
1
1
  local ____lualib = require("lualib_bundle")
2
2
  local __TS__New = ____lualib.__TS__New
3
3
  local __TS__Class = ____lualib.__TS__Class
4
+ local __TS__ClassExtends = ____lualib.__TS__ClassExtends
4
5
  local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
5
6
  local __TS__Promise = ____lualib.__TS__Promise
6
7
  local ____exports = {}
@@ -9,8 +10,12 @@ local Event = ____event.Event
9
10
  local InitializingEvent = ____event.InitializingEvent
10
11
  local ____objectPool = require("util.objectPool")
11
12
  local ObjectPool = ____objectPool.ObjectPool
12
- local ____exception = require("exception")
13
- local IllegalStateException = ____exception.IllegalStateException
13
+ local ____destroyable = require("destroyable")
14
+ local AbstractDestroyable = ____destroyable.AbstractDestroyable
15
+ local ____callback_2Darray = require("utility.callback-array")
16
+ local addCallback = ____callback_2Darray.addCallback
17
+ local callbackArray = ____callback_2Darray.callbackArray
18
+ local consumeCallbacks = ____callback_2Darray.consumeCallbacks
14
19
  local createTimer = CreateTimer
15
20
  local timerStart = TimerStart
16
21
  local pauseTimer = PauseTimer
@@ -23,6 +28,7 @@ local getHandleId = GetHandleId
23
28
  local ____pcall = _G.pcall
24
29
  local ____print = _G.print
25
30
  local select = _G.select
31
+ local ____type = _G.type
26
32
  local safeCall = warpack.safeCall
27
33
  local corunning = coroutine.running
28
34
  local coresume = coroutine.resume
@@ -35,61 +41,71 @@ local timerByHandleId = {}
35
41
  local function timerSafeCall()
36
42
  local timer = timerByHandleId[getHandleId(getExpiredTimer())]
37
43
  if timer ~= nil then
38
- if timer[2] then
44
+ if timer[1] then
39
45
  timer:destroy()
40
46
  end
41
- local callback = timer[3]
47
+ local callback = timer[2]
42
48
  if callback ~= nil then
43
49
  safeCall(
44
50
  callback,
45
- ____unpack(timer, 4 + 1, 4 + (timer[4] or 0))
51
+ ____unpack(timer, 3 + 1, 3 + (timer[3] or 0))
46
52
  )
47
53
  end
48
54
  end
49
55
  end
56
+ local zeroTimerScheduled = false
57
+ local zeroTimerCallbacks = callbackArray()
58
+ local function invokeZeroTimerCallbacks()
59
+ zeroTimerScheduled = false
60
+ consumeCallbacks(zeroTimerCallbacks)
61
+ end
50
62
  ____exports.Timer = __TS__Class()
51
63
  local Timer = ____exports.Timer
52
64
  Timer.name = "Timer"
65
+ __TS__ClassExtends(Timer, AbstractDestroyable)
53
66
  function Timer.prototype.____constructor(self)
67
+ AbstractDestroyable.prototype.____constructor(self)
54
68
  self[0] = get()
55
69
  timerByHandleId[getHandleId(self[0])] = self
56
70
  end
57
71
  function Timer.prototype.start(self, timeout, periodic, callback, ...)
58
- self[3] = callback
72
+ self[2] = callback
59
73
  local argsLength = select("#", ...)
60
- self[4] = argsLength
74
+ self[3] = argsLength
61
75
  for i = 1, argsLength do
62
- self[4 + i] = (select(i, ...))
76
+ self[3 + i] = (select(i, ...))
63
77
  end
64
78
  timerStart(self.handle, timeout, periodic, timerSafeCall)
65
79
  end
80
+ function Timer.prototype.onDestroy(self)
81
+ local handle = self[0]
82
+ timerByHandleId[getHandleId(handle)] = nil
83
+ release(handle)
84
+ return AbstractDestroyable.prototype.onDestroy(self)
85
+ end
66
86
  function Timer.prototype.pause(self)
67
87
  pauseTimer(self[0])
68
88
  end
69
89
  function Timer.prototype.resume(self)
70
90
  resumeTimer(self[0])
71
91
  end
72
- function Timer.prototype.destroy(self)
73
- if self[1] then
74
- error(
75
- __TS__New(IllegalStateException, "Double-destroy run for timer"),
76
- 0
77
- )
78
- end
79
- local handle = self[0]
80
- timerByHandleId[getHandleId(handle)] = nil
81
- release(handle)
82
- self[1] = true
83
- end
84
92
  function Timer.create(self)
85
93
  return __TS__New(____exports.Timer)
86
94
  end
87
- function Timer.run(self, callback, ...)
88
- ____exports.Timer:simple(0, callback, ...)
95
+ function Timer.run(self, objectOrCallback, keyOrFirstArg, ...)
96
+ if not zeroTimerScheduled then
97
+ zeroTimerScheduled = true
98
+ ____exports.Timer:simple(0, invokeZeroTimerCallbacks)
99
+ end
100
+ if ____type(objectOrCallback) == "function" then
101
+ addCallback(zeroTimerCallbacks, objectOrCallback, keyOrFirstArg, ...)
102
+ else
103
+ addCallback(zeroTimerCallbacks, objectOrCallback[keyOrFirstArg], objectOrCallback, ...)
104
+ end
89
105
  end
90
106
  function Timer.simple(self, timeout, callback, ...)
91
107
  local timer = __TS__New(____exports.Timer)
92
- timer[2] = true
108
+ timer[1] = true
93
109
  timer:start(timeout, false, callback, ...)
94
110
  return timer
95
111
  end
package/core/util.lua CHANGED
@@ -1,3 +1,5 @@
1
+ local ____lualib = require("lualib_bundle")
2
+ local __TS__StringPadEnd = ____lualib.__TS__StringPadEnd
1
3
  local ____exports = {}
2
4
  local ns = {}
3
5
  do
@@ -14,7 +16,10 @@ do
14
16
  if type(id) == "number" then
15
17
  return id
16
18
  else
17
- local numid = string.unpack(">I4", id)
19
+ local numid = string.unpack(
20
+ ">I4",
21
+ __TS__StringPadEnd(id, 4, "\0")
22
+ )
18
23
  return numid
19
24
  end
20
25
  end