warscript 0.0.1-dev.d690591 → 0.0.1-dev.d6e2c10

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 (106) hide show
  1. package/attributes.d.ts +6 -0
  2. package/attributes.lua +17 -1
  3. package/core/types/frame.lua +24 -21
  4. package/core/types/player.d.ts +16 -0
  5. package/core/types/player.lua +60 -15
  6. package/core/types/playerCamera.d.ts +2 -0
  7. package/core/types/playerCamera.lua +123 -5
  8. package/core/types/tileCell.d.ts +11 -1
  9. package/core/types/tileCell.lua +97 -0
  10. package/core/types/timer.d.ts +3 -1
  11. package/core/types/timer.lua +27 -2
  12. package/decl/native.d.ts +6 -4
  13. package/destroyable.d.ts +1 -0
  14. package/destroyable.lua +9 -0
  15. package/engine/behavior.d.ts +12 -1
  16. package/engine/behavior.lua +172 -70
  17. package/engine/behaviour/ability/apply-buff.lua +5 -5
  18. package/engine/behaviour/ability/emulate-impact.d.ts +1 -1
  19. package/engine/behaviour/ability/emulate-impact.lua +11 -3
  20. package/engine/behaviour/ability/remove-buffs.d.ts +9 -0
  21. package/engine/behaviour/ability/remove-buffs.lua +21 -0
  22. package/engine/behaviour/ability/restore-mana.d.ts +1 -1
  23. package/engine/behaviour/ability/restore-mana.lua +6 -6
  24. package/engine/behaviour/ability.d.ts +2 -1
  25. package/engine/behaviour/ability.lua +10 -18
  26. package/engine/behaviour/unit/stun-immunity.d.ts +11 -5
  27. package/engine/behaviour/unit/stun-immunity.lua +53 -28
  28. package/engine/behaviour/unit.d.ts +39 -3
  29. package/engine/behaviour/unit.lua +259 -6
  30. package/engine/buff.d.ts +14 -6
  31. package/engine/buff.lua +145 -97
  32. package/engine/internal/ability.d.ts +7 -1
  33. package/engine/internal/ability.lua +49 -9
  34. package/engine/internal/item/ability.lua +63 -11
  35. package/engine/internal/item+owner.lua +12 -6
  36. package/engine/internal/item.d.ts +16 -16
  37. package/engine/internal/item.lua +135 -49
  38. package/engine/internal/misc/frame-coordinates.d.ts +2 -0
  39. package/engine/internal/misc/frame-coordinates.lua +21 -0
  40. package/engine/internal/misc/get-terrain-z.d.ts +2 -0
  41. package/engine/internal/misc/get-terrain-z.lua +11 -0
  42. package/engine/internal/misc/player-local-handle.d.ts +2 -0
  43. package/engine/internal/misc/player-local-handle.lua +5 -0
  44. package/engine/internal/unit/ability.d.ts +35 -0
  45. package/engine/internal/unit/ability.lua +98 -9
  46. package/engine/internal/unit/allowed-targets.d.ts +1 -1
  47. package/engine/internal/unit/allowed-targets.lua +9 -1
  48. package/engine/internal/unit/fly-height.d.ts +7 -0
  49. package/engine/internal/unit/fly-height.lua +20 -0
  50. package/engine/internal/unit/main-selected.lua +12 -27
  51. package/engine/internal/unit/order.d.ts +20 -0
  52. package/engine/internal/unit/order.lua +136 -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+ability.lua +10 -1
  56. package/engine/internal/unit-missile-launch.lua +45 -14
  57. package/engine/internal/unit.d.ts +29 -18
  58. package/engine/internal/unit.lua +257 -140
  59. package/engine/local-client.d.ts +2 -0
  60. package/engine/local-client.lua +30 -0
  61. package/engine/object-data/auxiliary/armor-type.d.ts +11 -0
  62. package/engine/object-data/auxiliary/armor-type.lua +46 -0
  63. package/engine/object-data/entry/ability-type/permanent-invisibility.d.ts +8 -0
  64. package/engine/object-data/entry/ability-type/permanent-invisibility.lua +26 -0
  65. package/engine/object-data/entry/ability-type.lua +5 -4
  66. package/engine/object-data/entry/destructible-type.d.ts +17 -1
  67. package/engine/object-data/entry/destructible-type.lua +90 -0
  68. package/engine/object-data/entry/unit-type.d.ts +15 -2
  69. package/engine/object-data/entry/unit-type.lua +135 -33
  70. package/engine/object-field/ability.d.ts +3 -3
  71. package/engine/object-field/ability.lua +7 -6
  72. package/engine/object-field/unit.d.ts +24 -1
  73. package/engine/object-field/unit.lua +91 -0
  74. package/engine/object-field.d.ts +15 -6
  75. package/engine/object-field.lua +225 -124
  76. package/engine/random.d.ts +9 -0
  77. package/engine/random.lua +13 -0
  78. package/engine/standard/fields/ability.d.ts +2 -2
  79. package/engine/standard/fields/ability.lua +2 -2
  80. package/engine/standard/fields/unit.d.ts +6 -0
  81. package/engine/standard/fields/unit.lua +11 -0
  82. package/engine/synchronization.d.ts +11 -0
  83. package/engine/synchronization.lua +77 -0
  84. package/engine/text-tag.d.ts +36 -2
  85. package/engine/text-tag.lua +250 -10
  86. package/engine/unit.d.ts +3 -0
  87. package/engine/unit.lua +3 -0
  88. package/net/socket.lua +1 -1
  89. package/objutil/buff.lua +1 -1
  90. package/package.json +2 -2
  91. package/patch-lualib.lua +1 -1
  92. package/utility/arrays.d.ts +1 -0
  93. package/utility/arrays.lua +8 -0
  94. package/utility/callback-array.d.ts +17 -0
  95. package/utility/callback-array.lua +61 -0
  96. package/utility/functions.d.ts +7 -0
  97. package/utility/functions.lua +12 -0
  98. package/utility/linked-set.d.ts +1 -0
  99. package/utility/linked-set.lua +19 -1
  100. package/utility/lua-maps.d.ts +12 -2
  101. package/utility/lua-maps.lua +37 -2
  102. package/utility/lua-sets.d.ts +1 -0
  103. package/utility/lua-sets.lua +4 -0
  104. package/utility/types.d.ts +3 -0
  105. package/core/types/order.d.ts +0 -25
  106. package/core/types/order.lua +0 -55
@@ -23,8 +23,12 @@ local ObjectDataEntryIdGenerator = ____object_2Ddata_2Dentry_2Did_2Dgenerator.Ob
23
23
  local ____linked_2Dset = require("utility.linked-set")
24
24
  local mutableLinkedSet = ____linked_2Dset.mutableLinkedSet
25
25
  local ____lua_2Dmaps = require("utility.lua-maps")
26
+ local emptyLuaMap = ____lua_2Dmaps.emptyLuaMap
26
27
  local getOrPut = ____lua_2Dmaps.getOrPut
28
+ local mutableLuaMap = ____lua_2Dmaps.mutableLuaMap
27
29
  local mutableWeakLuaMap = ____lua_2Dmaps.mutableWeakLuaMap
30
+ local ____arrays = require("utility.arrays")
31
+ local emptyArray = ____arrays.emptyArray
28
32
  local compiletimeDefaultValueByObjectDataEntryIdByObjectFieldId = {}
29
33
  local defaultValueByObjectDataEntryIdByObjectFieldId = postcompile(function() return compiletimeDefaultValueByObjectDataEntryIdByObjectFieldId end)
30
34
  local objectFieldById = {}
@@ -34,7 +38,11 @@ local idGenerator = __TS__New(
34
38
  )
35
39
  local ObjectFieldBase = __TS__Class()
36
40
  ObjectFieldBase.name = "ObjectFieldBase"
37
- function ObjectFieldBase.prototype.____constructor(self, id)
41
+ function ObjectFieldBase.prototype.____constructor(self, id, isGlobal)
42
+ if isGlobal == nil then
43
+ isGlobal = false
44
+ end
45
+ self.isGlobal = isGlobal
38
46
  self.valueByInstance = setmetatable({}, {__mode = "k"})
39
47
  if objectFieldById[id] ~= nil then
40
48
  error(
@@ -51,14 +59,15 @@ end
51
59
  function ObjectFieldBase.prototype.supports(self, instance)
52
60
  return __TS__InstanceOf(instance, self.instanceClass)
53
61
  end
54
- function ObjectFieldBase.prototype.hasValue(self, instance)
62
+ function ObjectFieldBase.prototype.hasValue(self, objectDataEntryId)
55
63
  local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
56
- return defaultValueByObjectDataEntryId ~= nil and defaultValueByObjectDataEntryId[self:getObjectDataEntryId(instance)] ~= nil or self:hasNativeFieldValue(instance)
64
+ return self.isGlobal or defaultValueByObjectDataEntryId ~= nil and defaultValueByObjectDataEntryId[objectDataEntryId] ~= nil or self:hasNativeFieldValue(objectDataEntryId)
57
65
  end
58
- function ObjectFieldBase.create(self, id)
66
+ function ObjectFieldBase.create(self, id, isGlobal)
59
67
  return __TS__New(
60
68
  self,
61
- id or idGenerator:next()
69
+ id or idGenerator:next(),
70
+ isGlobal
62
71
  )
63
72
  end
64
73
  function ObjectFieldBase.of(self, id)
@@ -91,7 +100,7 @@ function ObjectField.prototype.getValue(self, entry, includeModifiers)
91
100
  end
92
101
  return self.defaultValue
93
102
  end
94
- if includeModifiers == false then
103
+ if not includeModifiers then
95
104
  local originalValueByInstance = self.originalValueByInstance
96
105
  if originalValueByInstance ~= nil then
97
106
  local originalValue = originalValueByInstance[entry]
@@ -142,7 +151,13 @@ function ObjectField.prototype.applyModifier(self, instance, modifier)
142
151
  originalValueByInstance = mutableWeakLuaMap()
143
152
  self.originalValueByInstance = originalValueByInstance
144
153
  end
145
- originalValueByInstance[instance] = self:getActualValue(instance)
154
+ local ____originalValueByInstance_1 = originalValueByInstance
155
+ local ____instance_2 = instance
156
+ local ____originalValueByInstance_instance_0 = originalValueByInstance[instance]
157
+ if ____originalValueByInstance_instance_0 == nil then
158
+ ____originalValueByInstance_instance_0 = self:getActualValue(instance)
159
+ end
160
+ ____originalValueByInstance_1[____instance_2] = ____originalValueByInstance_instance_0
146
161
  self:setActualValue(
147
162
  instance,
148
163
  self:calculateActualValue(instance)
@@ -185,60 +200,61 @@ function ObjectField.prototype.trySetValue(self, entry, value)
185
200
  end
186
201
  function ObjectField.prototype.getActualValue(self, instance)
187
202
  local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
188
- if defaultValueByObjectDataEntryId ~= nil then
189
- local defaultValue = defaultValueByObjectDataEntryId[self:getObjectDataEntryId(instance)]
190
- if defaultValue ~= nil then
191
- local ____self_valueByInstance_instance_0 = self.valueByInstance[instance]
192
- if ____self_valueByInstance_instance_0 == nil then
193
- ____self_valueByInstance_instance_0 = defaultValue
203
+ if defaultValueByObjectDataEntryId ~= nil or self.isGlobal then
204
+ local defaultValue = (defaultValueByObjectDataEntryId or emptyLuaMap())[self:getObjectDataEntryId(instance)]
205
+ if defaultValue ~= nil or self.isGlobal then
206
+ local ____self_valueByInstance_instance_3 = self.valueByInstance[instance]
207
+ if ____self_valueByInstance_instance_3 == nil then
208
+ ____self_valueByInstance_instance_3 = defaultValue
194
209
  end
195
- return ____self_valueByInstance_instance_0
210
+ local ____self_valueByInstance_instance_3_4 = ____self_valueByInstance_instance_3
211
+ if ____self_valueByInstance_instance_3_4 == nil then
212
+ ____self_valueByInstance_instance_3_4 = self.defaultValue
213
+ end
214
+ return ____self_valueByInstance_instance_3_4
196
215
  end
197
216
  end
198
- local ____temp_1 = self:getNativeFieldValue(instance)
199
- if ____temp_1 == nil then
200
- ____temp_1 = self.defaultValue
217
+ local ____temp_5 = self:getNativeFieldValue(instance)
218
+ if ____temp_5 == nil then
219
+ ____temp_5 = self.defaultValue
201
220
  end
202
- return ____temp_1
221
+ return ____temp_5
203
222
  end
204
223
  function ObjectField.prototype.setActualValue(self, instance, value)
205
224
  local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
206
- if defaultValueByObjectDataEntryId ~= nil then
207
- local defaultValue = defaultValueByObjectDataEntryId[self:getObjectDataEntryId(instance)]
208
- if defaultValue ~= nil then
209
- local ____self_valueByInstance_instance_2 = self.valueByInstance[instance]
210
- if ____self_valueByInstance_instance_2 == nil then
211
- ____self_valueByInstance_instance_2 = defaultValue
212
- end
213
- local ____self_valueByInstance_instance_2_3 = ____self_valueByInstance_instance_2
214
- if ____self_valueByInstance_instance_2_3 == nil then
215
- ____self_valueByInstance_instance_2_3 = self.defaultValue
225
+ local objectDataEntryId = self:getObjectDataEntryId(instance)
226
+ if defaultValueByObjectDataEntryId ~= nil or self.isGlobal then
227
+ local defaultValue = (defaultValueByObjectDataEntryId or emptyLuaMap())[objectDataEntryId]
228
+ if defaultValue ~= nil or self.isGlobal then
229
+ local ____self_valueByInstance_instance_6 = self.valueByInstance[instance]
230
+ if ____self_valueByInstance_instance_6 == nil then
231
+ ____self_valueByInstance_instance_6 = defaultValue
216
232
  end
217
- local previousValue = ____self_valueByInstance_instance_2_3
218
- if value ~= previousValue then
219
- self.valueByInstance[instance] = value
220
- self:invokeValueChangeEvent(instance, self, previousValue, value)
233
+ local ____self_valueByInstance_instance_6_7 = ____self_valueByInstance_instance_6
234
+ if ____self_valueByInstance_instance_6_7 == nil then
235
+ ____self_valueByInstance_instance_6_7 = self.defaultValue
221
236
  end
237
+ local previousValue = ____self_valueByInstance_instance_6_7
238
+ self.valueByInstance[instance] = value
239
+ self:invokeValueChangeEvent(instance, self, previousValue, value)
222
240
  return true
223
241
  end
224
242
  end
225
- if not self:hasNativeFieldValue(instance) then
243
+ if not self:hasNativeFieldValue(objectDataEntryId) then
226
244
  return false
227
245
  end
228
246
  local previousValue = self:getNativeFieldValue(instance)
229
- if value ~= previousValue then
230
- if not self:setNativeFieldValue(instance, value) then
231
- return false
232
- end
233
- self:invokeValueChangeEvent(instance, self, previousValue, value)
247
+ if value ~= previousValue and not self:setNativeFieldValue(instance, value) then
248
+ return false
234
249
  end
250
+ self:invokeValueChangeEvent(instance, self, previousValue, value)
235
251
  return true
236
252
  end
237
253
  function ObjectField.prototype.calculateActualValue(self, instance)
238
- local ____opt_4 = self.originalValueByInstance
239
- local originalValue = ____opt_4 and ____opt_4[instance]
240
- local ____opt_6 = self.modifiersByInstance
241
- local modifiers = ____opt_6 and ____opt_6[instance]
254
+ local ____opt_8 = self.originalValueByInstance
255
+ local originalValue = ____opt_8 and ____opt_8[instance]
256
+ local ____opt_10 = self.modifiersByInstance
257
+ local modifiers = ____opt_10 and ____opt_10[instance]
242
258
  if originalValue ~= nil then
243
259
  local value = originalValue
244
260
  if modifiers ~= nil then
@@ -303,37 +319,37 @@ function ObjectArrayField.prototype.getValue(self, entry, index)
303
319
  if defaultValueByObjectDataEntryId ~= nil then
304
320
  local value = defaultValueByObjectDataEntryId[entry.id]
305
321
  if value ~= nil then
306
- local ____temp_9
322
+ local ____temp_13
307
323
  if index == nil then
308
- ____temp_9 = value
324
+ ____temp_13 = value
309
325
  else
310
- local ____value_index_8 = value[index + 1]
311
- if ____value_index_8 == nil then
312
- ____value_index_8 = self.defaultValue
326
+ local ____value_index_12 = value[index + 1]
327
+ if ____value_index_12 == nil then
328
+ ____value_index_12 = self.defaultValue
313
329
  end
314
- ____temp_9 = ____value_index_8
330
+ ____temp_13 = ____value_index_12
315
331
  end
316
- return ____temp_9
332
+ return ____temp_13
317
333
  end
318
334
  end
319
335
  return index == nil and ({}) or self.defaultValue
320
336
  end
321
337
  local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
322
- if defaultValueByObjectDataEntryId ~= nil then
323
- local defaultValue = defaultValueByObjectDataEntryId[self:getObjectDataEntryId(entry)]
324
- if defaultValue ~= nil then
325
- local value = self.valueByInstance[entry] or defaultValue
326
- local ____temp_11
338
+ if defaultValueByObjectDataEntryId ~= nil or self.isGlobal then
339
+ local defaultValue = (defaultValueByObjectDataEntryId or emptyLuaMap())[self:getObjectDataEntryId(entry)]
340
+ if defaultValue ~= nil or self.isGlobal then
341
+ local value = self.valueByInstance[entry] or defaultValue or emptyArray()
342
+ local ____temp_15
327
343
  if index == nil then
328
- ____temp_11 = value
344
+ ____temp_15 = value
329
345
  else
330
- local ____value_index_10 = value[index + 1]
331
- if ____value_index_10 == nil then
332
- ____value_index_10 = self.defaultValue
346
+ local ____value_index_14 = value[index + 1]
347
+ if ____value_index_14 == nil then
348
+ ____value_index_14 = self.defaultValue
333
349
  end
334
- ____temp_11 = ____value_index_10
350
+ ____temp_15 = ____value_index_14
335
351
  end
336
- return ____temp_11
352
+ return ____temp_15
337
353
  end
338
354
  end
339
355
  if index ~= nil then
@@ -378,36 +394,22 @@ function ObjectLevelField.prototype.getValue(self, entry, level)
378
394
  if defaultValueByObjectDataEntryId ~= nil then
379
395
  local valueByLevel = defaultValueByObjectDataEntryId[entry.id]
380
396
  if valueByLevel ~= nil then
381
- local ____valueByLevel_index_12 = valueByLevel[level + 1]
382
- if ____valueByLevel_index_12 == nil then
383
- ____valueByLevel_index_12 = self.defaultValue
397
+ local ____valueByLevel_index_16 = valueByLevel[level + 1]
398
+ if ____valueByLevel_index_16 == nil then
399
+ ____valueByLevel_index_16 = self.defaultValue
384
400
  end
385
- return ____valueByLevel_index_12
401
+ return ____valueByLevel_index_16
386
402
  end
387
403
  end
388
404
  return self.defaultValue
389
405
  end
390
- local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
391
- if defaultValueByObjectDataEntryId ~= nil then
392
- local defaultValueByLevel = defaultValueByObjectDataEntryId[self:getObjectDataEntryId(entry)]
393
- if defaultValueByLevel ~= nil then
394
- local ____opt_13 = self.valueByInstance[entry]
395
- local ____temp_15 = ____opt_13 and ____opt_13[level + 1]
396
- if ____temp_15 == nil then
397
- ____temp_15 = defaultValueByLevel[level + 1]
398
- end
399
- local ____temp_15_16 = ____temp_15
400
- if ____temp_15_16 == nil then
401
- ____temp_15_16 = self.defaultValue
402
- end
403
- return ____temp_15_16
404
- end
405
- end
406
- local ____temp_17 = self:getNativeFieldValue(entry, level)
407
- if ____temp_17 == nil then
408
- ____temp_17 = self.defaultValue
406
+ local ____opt_19 = self.originalValueByLevelByInstance
407
+ local ____opt_17 = ____opt_19 and ____opt_19[entry]
408
+ local originalValue = ____opt_17 and ____opt_17[level]
409
+ if originalValue ~= nil then
410
+ return originalValue
409
411
  end
410
- return ____temp_17
412
+ return self:getActualValue(entry, level)
411
413
  end
412
414
  function ObjectLevelField.prototype.setValue(self, entry, levelOrValue, value)
413
415
  if value == nil then
@@ -447,54 +449,66 @@ function ObjectLevelField.prototype.setValue(self, entry, levelOrValue, value)
447
449
  valueByLevel[level + 1] = value
448
450
  return true
449
451
  end
450
- local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
451
- if defaultValueByObjectDataEntryId ~= nil then
452
- local defaultValueByLevel = defaultValueByObjectDataEntryId[self:getObjectDataEntryId(entry)]
453
- if defaultValueByLevel ~= nil then
454
- local valueByLevel = self.valueByInstance[entry]
455
- if valueByLevel == nil then
456
- valueByLevel = {}
457
- self.valueByInstance[entry] = valueByLevel
458
- end
459
- local ____valueByLevel_index_18 = valueByLevel[level + 1]
460
- if ____valueByLevel_index_18 == nil then
461
- ____valueByLevel_index_18 = defaultValueByLevel[level + 1]
452
+ local modifiersByInstance = self.modifiersByInstance
453
+ if modifiersByInstance ~= nil then
454
+ local modifiers = modifiersByInstance[entry]
455
+ if modifiers ~= nil and modifiers.size ~= 0 then
456
+ local originalValueByLevelByInstance = self.originalValueByLevelByInstance
457
+ if originalValueByLevelByInstance == nil then
458
+ originalValueByLevelByInstance = mutableWeakLuaMap()
459
+ self.originalValueByLevelByInstance = originalValueByLevelByInstance
462
460
  end
463
- local ____valueByLevel_index_18_19 = ____valueByLevel_index_18
464
- if ____valueByLevel_index_18_19 == nil then
465
- ____valueByLevel_index_18_19 = self.defaultValue
461
+ getOrPut(originalValueByLevelByInstance, entry, mutableLuaMap)[level] = value
462
+ value = self:calculateActualValue(entry, level)
463
+ end
464
+ end
465
+ return self:setActualValue(entry, level, value)
466
+ end
467
+ function ObjectLevelField.prototype.applyModifier(self, instance, modifier)
468
+ local modifiersByInstance = self.modifiersByInstance
469
+ if modifiersByInstance == nil then
470
+ modifiersByInstance = mutableWeakLuaMap()
471
+ self.modifiersByInstance = modifiersByInstance
472
+ end
473
+ if getOrPut(modifiersByInstance, instance, mutableLinkedSet):add(modifier) then
474
+ local originalValueByLevelByInstance = self.originalValueByLevelByInstance
475
+ if originalValueByLevelByInstance == nil then
476
+ originalValueByLevelByInstance = mutableWeakLuaMap()
477
+ self.originalValueByLevelByInstance = originalValueByLevelByInstance
478
+ end
479
+ local originalValueByLevel = getOrPut(originalValueByLevelByInstance, instance, mutableLuaMap)
480
+ local levelCount = self:getLevelCount(instance)
481
+ for level = 0, levelCount - 1 do
482
+ local ____originalValueByLevel_level_21 = originalValueByLevel[level]
483
+ if ____originalValueByLevel_level_21 == nil then
484
+ ____originalValueByLevel_level_21 = self:getActualValue(instance, level)
466
485
  end
467
- local previousValue = ____valueByLevel_index_18_19
468
- if value ~= previousValue then
469
- valueByLevel[level + 1] = value
470
- self:invokeValueChangeEvent(
471
- entry,
472
- self,
486
+ originalValueByLevel[level] = ____originalValueByLevel_level_21
487
+ self:setActualValue(
488
+ instance,
489
+ level,
490
+ self:calculateActualValue(instance, level)
491
+ )
492
+ end
493
+ end
494
+ end
495
+ function ObjectLevelField.prototype.removeModifier(self, instance, modifier)
496
+ local modifiersByInstance = self.modifiersByInstance
497
+ if modifiersByInstance ~= nil then
498
+ local modifiers = modifiersByInstance[instance]
499
+ if modifiers ~= nil and modifiers:remove(modifier) then
500
+ local levelCount = self:getLevelCount(instance)
501
+ for level = 0, levelCount - 1 do
502
+ self:setActualValue(
503
+ instance,
473
504
  level,
474
- previousValue,
475
- value
505
+ self:calculateActualValue(instance, level)
476
506
  )
477
507
  end
478
508
  return true
479
509
  end
480
510
  end
481
- if not self:hasNativeFieldValue(entry) then
482
- return false
483
- end
484
- local previousValue = self:getNativeFieldValue(entry, level)
485
- if value ~= previousValue then
486
- if not self:setNativeFieldValue(entry, level, value) then
487
- return false
488
- end
489
- self:invokeValueChangeEvent(
490
- entry,
491
- self,
492
- level,
493
- previousValue,
494
- value
495
- )
496
- end
497
- return true
511
+ return false
498
512
  end
499
513
  function ObjectLevelField.prototype.trySetValue(self, entry, levelOrValue, value)
500
514
  if value ~= nil then
@@ -511,6 +525,93 @@ function ObjectLevelField.prototype.trySetValue(self, entry, levelOrValue, value
511
525
  end
512
526
  return self:setValue(entry, levelOrValue)
513
527
  end
528
+ function ObjectLevelField.prototype.getActualValue(self, instance, level)
529
+ local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
530
+ if defaultValueByObjectDataEntryId ~= nil or self.isGlobal then
531
+ local defaultValueByLevel = (defaultValueByObjectDataEntryId or emptyLuaMap())[self:getObjectDataEntryId(instance)]
532
+ if defaultValueByLevel ~= nil or self.isGlobal then
533
+ local ____opt_22 = self.valueByInstance[instance]
534
+ local ____temp_24 = ____opt_22 and ____opt_22[level + 1]
535
+ if ____temp_24 == nil then
536
+ ____temp_24 = (defaultValueByLevel or emptyArray())[level + 1]
537
+ end
538
+ local ____temp_24_25 = ____temp_24
539
+ if ____temp_24_25 == nil then
540
+ ____temp_24_25 = self.defaultValue
541
+ end
542
+ return ____temp_24_25
543
+ end
544
+ end
545
+ local ____temp_26 = self:getNativeFieldValue(instance, level)
546
+ if ____temp_26 == nil then
547
+ ____temp_26 = self.defaultValue
548
+ end
549
+ return ____temp_26
550
+ end
551
+ function ObjectLevelField.prototype.setActualValue(self, instance, level, value)
552
+ local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
553
+ local objectDataEntryId = self:getObjectDataEntryId(instance)
554
+ if defaultValueByObjectDataEntryId ~= nil or self.isGlobal then
555
+ local defaultValueByLevel = (defaultValueByObjectDataEntryId or emptyLuaMap())[objectDataEntryId]
556
+ if defaultValueByLevel ~= nil or self.isGlobal then
557
+ local valueByLevel = self.valueByInstance[instance]
558
+ if valueByLevel == nil then
559
+ valueByLevel = {}
560
+ self.valueByInstance[instance] = valueByLevel
561
+ end
562
+ local ____valueByLevel_index_27 = valueByLevel[level + 1]
563
+ if ____valueByLevel_index_27 == nil then
564
+ ____valueByLevel_index_27 = (defaultValueByLevel or emptyArray())[level + 1]
565
+ end
566
+ local ____valueByLevel_index_27_28 = ____valueByLevel_index_27
567
+ if ____valueByLevel_index_27_28 == nil then
568
+ ____valueByLevel_index_27_28 = self.defaultValue
569
+ end
570
+ local previousValue = ____valueByLevel_index_27_28
571
+ valueByLevel[level + 1] = value
572
+ self:invokeValueChangeEvent(
573
+ instance,
574
+ self,
575
+ level,
576
+ previousValue,
577
+ value
578
+ )
579
+ return true
580
+ end
581
+ end
582
+ if not self:hasNativeFieldValue(objectDataEntryId) then
583
+ return false
584
+ end
585
+ local previousValue = self:getNativeFieldValue(instance, level)
586
+ if value ~= previousValue and not self:setNativeFieldValue(instance, level, value) then
587
+ return false
588
+ end
589
+ self:invokeValueChangeEvent(
590
+ instance,
591
+ self,
592
+ level,
593
+ previousValue,
594
+ value
595
+ )
596
+ return true
597
+ end
598
+ function ObjectLevelField.prototype.calculateActualValue(self, instance, level)
599
+ local ____opt_31 = self.originalValueByLevelByInstance
600
+ local ____opt_29 = ____opt_31 and ____opt_31[instance]
601
+ local originalValue = ____opt_29 and ____opt_29[level]
602
+ local ____opt_33 = self.modifiersByInstance
603
+ local modifiers = ____opt_33 and ____opt_33[instance]
604
+ if originalValue ~= nil then
605
+ local value = originalValue
606
+ if modifiers ~= nil then
607
+ for modifier in pairs(modifiers) do
608
+ value = modifier(instance, level, value, originalValue)
609
+ end
610
+ end
611
+ return value
612
+ end
613
+ return self.defaultValue
614
+ end
514
615
  function ObjectLevelField.prototype.invokeValueChangeEvent(self, ...)
515
616
  self:invokeValueChangeEventRecursive(
516
617
  getClass(self),
@@ -1,4 +1,5 @@
1
1
  /** @noSelfInFile */
2
+ import { ReadonlyNonEmptyArray } from "../utility/types";
2
3
  export declare const randomAngle: () => number;
3
4
  export declare const randomInteger: {
4
5
  (upperBound?: number): number;
@@ -9,3 +10,11 @@ export declare const randomFloat: {
9
10
  (lowerBound: number, upperBound: number): number;
10
11
  };
11
12
  export declare const randomXY: (centerX: number, centerY: number, range: number) => LuaMultiReturn<[x: number, y: number]>;
13
+ export declare const randomElement: {
14
+ <T>(array: ReadonlyNonEmptyArray<T>): T;
15
+ <T>(array: ReadonlyArray<T>): T | undefined;
16
+ };
17
+ export declare const random: {
18
+ <T>(element: T, ...elements: T[]): T;
19
+ <T>(...elements: T[]): T | undefined;
20
+ };
package/engine/random.lua CHANGED
@@ -4,6 +4,7 @@ local MAXIMUM_INTEGER = ____math.MAXIMUM_INTEGER
4
4
  local PI = ____math.PI
5
5
  local getRandomInt = GetRandomInt
6
6
  local getRandomReal = GetRandomReal
7
+ local select = _G.select
7
8
  local cos = math.cos
8
9
  local sin = math.sin
9
10
  local sqrt = math.sqrt
@@ -15,4 +16,16 @@ ____exports.randomXY = function(centerX, centerY, range)
15
16
  local t = getRandomReal(0, 1) * 2 * PI
16
17
  return centerX + r * cos(t), centerY + r * sin(t)
17
18
  end
19
+ ____exports.randomElement = function(array)
20
+ return array[getRandomInt(1, #array)]
21
+ end
22
+ ____exports.random = function(...)
23
+ return (select(
24
+ getRandomInt(
25
+ 1,
26
+ select("#", ...)
27
+ ),
28
+ ...
29
+ ))
30
+ end
18
31
  return ____exports
@@ -376,8 +376,8 @@ export declare const INVISIBILITY_TRANSITION_TIME_ABILITY_FLOAT_LEVEL_FIELD: Abi
376
376
  export declare const ACTIVATION_RADIUS_ABILITY_FLOAT_LEVEL_FIELD: AbilityFloatLevelField & symbol;
377
377
  export declare const AMOUNT_REGENERATED_ABILITY_FLOAT_LEVEL_FIELD: AbilityFloatLevelField & symbol;
378
378
  export declare const DAMAGE_PER_SECOND_POI1_ABILITY_FLOAT_LEVEL_FIELD: AbilityFloatLevelField & symbol;
379
- export declare const ATTACK_SPEED_FACTOR_POI2_ABILITY_FLOAT_LEVEL_FIELD: AbilityFloatLevelField & symbol;
380
- export declare const MOVEMENT_SPEED_FACTOR_POI3_ABILITY_FLOAT_LEVEL_FIELD: AbilityFloatLevelField & symbol;
379
+ export declare const MOVEMENT_SPEED_FACTOR_POI2_ABILITY_FLOAT_LEVEL_FIELD: AbilityFloatLevelField & symbol;
380
+ export declare const ATTACK_SPEED_FACTOR_POI3_ABILITY_FLOAT_LEVEL_FIELD: AbilityFloatLevelField & symbol;
381
381
  export declare const EXTRA_DAMAGE_POA1_ABILITY_FLOAT_LEVEL_FIELD: AbilityFloatLevelField & symbol;
382
382
  export declare const DAMAGE_PER_SECOND_POA2_ABILITY_FLOAT_LEVEL_FIELD: AbilityFloatLevelField & symbol;
383
383
  export declare const ATTACK_SPEED_FACTOR_POA3_ABILITY_FLOAT_LEVEL_FIELD: AbilityFloatLevelField & symbol;
@@ -387,8 +387,8 @@ ____exports.INVISIBILITY_TRANSITION_TIME_ABILITY_FLOAT_LEVEL_FIELD = AbilityFloa
387
387
  ____exports.ACTIVATION_RADIUS_ABILITY_FLOAT_LEVEL_FIELD = AbilityFloatLevelField:create(fourCC("Neu1"))
388
388
  ____exports.AMOUNT_REGENERATED_ABILITY_FLOAT_LEVEL_FIELD = AbilityFloatLevelField:create(fourCC("Arm1"))
389
389
  ____exports.DAMAGE_PER_SECOND_POI1_ABILITY_FLOAT_LEVEL_FIELD = AbilityFloatLevelField:create(fourCC("Poi1"))
390
- ____exports.ATTACK_SPEED_FACTOR_POI2_ABILITY_FLOAT_LEVEL_FIELD = AbilityFloatLevelField:create(fourCC("Poi2"))
391
- ____exports.MOVEMENT_SPEED_FACTOR_POI3_ABILITY_FLOAT_LEVEL_FIELD = AbilityFloatLevelField:create(fourCC("Poi3"))
390
+ ____exports.MOVEMENT_SPEED_FACTOR_POI2_ABILITY_FLOAT_LEVEL_FIELD = AbilityFloatLevelField:create(fourCC("Poi2"))
391
+ ____exports.ATTACK_SPEED_FACTOR_POI3_ABILITY_FLOAT_LEVEL_FIELD = AbilityFloatLevelField:create(fourCC("Poi3"))
392
392
  ____exports.EXTRA_DAMAGE_POA1_ABILITY_FLOAT_LEVEL_FIELD = AbilityFloatLevelField:create(fourCC("Poa1"))
393
393
  ____exports.DAMAGE_PER_SECOND_POA2_ABILITY_FLOAT_LEVEL_FIELD = AbilityFloatLevelField:create(fourCC("Poa2"))
394
394
  ____exports.ATTACK_SPEED_FACTOR_POA3_ABILITY_FLOAT_LEVEL_FIELD = AbilityFloatLevelField:create(fourCC("Poa3"))
@@ -0,0 +1,6 @@
1
+ /** @noSelfInFile */
2
+ import { UnitClassificationsField, UnitFlyHeightField, UnitPropulsionWindowField, UnitScalingValueField } from "../../object-field/unit";
3
+ export declare const PROPULSION_WINDOW_UNIT_FLOAT_FIELD: UnitPropulsionWindowField & symbol;
4
+ export declare const UNIT_CLASSIFICATIONS_FIELD: UnitClassificationsField & symbol;
5
+ export declare const FLY_HEIGHT_UNIT_FLOAT_FIELD: UnitFlyHeightField & symbol;
6
+ export declare const SCALING_VALUE_UNIT_FLOAT_FIELD: UnitScalingValueField & symbol;
@@ -0,0 +1,11 @@
1
+ local ____exports = {}
2
+ local ____unit = require("engine.object-field.unit")
3
+ local UnitClassificationsField = ____unit.UnitClassificationsField
4
+ local UnitFlyHeightField = ____unit.UnitFlyHeightField
5
+ local UnitPropulsionWindowField = ____unit.UnitPropulsionWindowField
6
+ local UnitScalingValueField = ____unit.UnitScalingValueField
7
+ ____exports.PROPULSION_WINDOW_UNIT_FLOAT_FIELD = UnitPropulsionWindowField:create(fourCC("urpw"))
8
+ ____exports.UNIT_CLASSIFICATIONS_FIELD = UnitClassificationsField:create(fourCC("utyp"))
9
+ ____exports.FLY_HEIGHT_UNIT_FLOAT_FIELD = UnitFlyHeightField:create(fourCC("ufyh"))
10
+ ____exports.SCALING_VALUE_UNIT_FLOAT_FIELD = UnitScalingValueField:create(fourCC("usca"))
11
+ 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