warscript 0.0.1-dev.b9f7033 → 0.0.1-dev.baa67d8

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 (66) hide show
  1. package/attributes.d.ts +1 -0
  2. package/attributes.lua +9 -0
  3. package/binarywriter.lua +0 -12
  4. package/core/types/player.d.ts +16 -0
  5. package/core/types/player.lua +57 -14
  6. package/core/types/tileCell.d.ts +2 -1
  7. package/core/types/tileCell.lua +5 -0
  8. package/core/types/timer.d.ts +3 -2
  9. package/core/types/timer.lua +8 -2
  10. package/destroyable.d.ts +1 -0
  11. package/destroyable.lua +9 -0
  12. package/engine/behavior.d.ts +7 -1
  13. package/engine/behavior.lua +88 -65
  14. package/engine/behaviour/ability/apply-buff.lua +4 -4
  15. package/engine/behaviour/ability/remove-buffs.d.ts +9 -0
  16. package/engine/behaviour/ability/remove-buffs.lua +21 -0
  17. package/engine/behaviour/ability.d.ts +2 -1
  18. package/engine/behaviour/ability.lua +2 -1
  19. package/engine/behaviour/unit/stun-immunity.d.ts +8 -4
  20. package/engine/behaviour/unit/stun-immunity.lua +12 -3
  21. package/engine/behaviour/unit.d.ts +9 -3
  22. package/engine/behaviour/unit.lua +94 -22
  23. package/engine/buff.d.ts +12 -2
  24. package/engine/buff.lua +80 -17
  25. package/engine/internal/item.d.ts +12 -12
  26. package/engine/internal/item.lua +41 -26
  27. package/engine/internal/unit/ability.d.ts +14 -14
  28. package/engine/internal/unit/ability.lua +72 -45
  29. package/engine/internal/unit/fly-height.d.ts +7 -0
  30. package/engine/internal/unit/fly-height.lua +20 -0
  31. package/engine/internal/unit/main-selected.lua +12 -27
  32. package/engine/internal/unit/scale.d.ts +7 -0
  33. package/engine/internal/unit/scale.lua +20 -0
  34. package/engine/internal/unit-missile-launch.lua +44 -20
  35. package/engine/internal/unit.d.ts +13 -10
  36. package/engine/internal/unit.lua +83 -64
  37. package/engine/local-client.d.ts +2 -0
  38. package/engine/local-client.lua +30 -0
  39. package/engine/object-data/entry/ability-type.lua +4 -1
  40. package/engine/object-data/entry/destructible-type.d.ts +17 -1
  41. package/engine/object-data/entry/destructible-type.lua +90 -0
  42. package/engine/object-data/entry/unit-type.d.ts +4 -0
  43. package/engine/object-data/entry/unit-type.lua +76 -32
  44. package/engine/object-field/unit.d.ts +13 -1
  45. package/engine/object-field/unit.lua +57 -0
  46. package/engine/object-field.d.ts +7 -1
  47. package/engine/object-field.lua +232 -111
  48. package/engine/standard/fields/ability.d.ts +2 -2
  49. package/engine/standard/fields/ability.lua +2 -2
  50. package/engine/standard/fields/unit.d.ts +3 -1
  51. package/engine/standard/fields/unit.lua +4 -0
  52. package/engine/synchronization.d.ts +11 -0
  53. package/engine/synchronization.lua +77 -0
  54. package/engine/text-tag.lua +3 -2
  55. package/engine/unit.d.ts +2 -0
  56. package/engine/unit.lua +2 -0
  57. package/net/socket.lua +1 -1
  58. package/objutil/buff.lua +1 -1
  59. package/package.json +2 -2
  60. package/utility/arrays.d.ts +1 -0
  61. package/utility/arrays.lua +8 -0
  62. package/utility/callback-array.d.ts +5 -1
  63. package/utility/callback-array.lua +16 -1
  64. package/utility/linked-set.d.ts +1 -0
  65. package/utility/linked-set.lua +19 -1
  66. package/utility/types.d.ts +3 -0
@@ -25,6 +25,7 @@ local mutableLinkedSet = ____linked_2Dset.mutableLinkedSet
25
25
  local ____lua_2Dmaps = require("utility.lua-maps")
26
26
  local emptyLuaMap = ____lua_2Dmaps.emptyLuaMap
27
27
  local getOrPut = ____lua_2Dmaps.getOrPut
28
+ local mutableLuaMap = ____lua_2Dmaps.mutableLuaMap
28
29
  local mutableWeakLuaMap = ____lua_2Dmaps.mutableWeakLuaMap
29
30
  local ____arrays = require("utility.arrays")
30
31
  local emptyArray = ____arrays.emptyArray
@@ -99,7 +100,7 @@ function ObjectField.prototype.getValue(self, entry, includeModifiers)
99
100
  end
100
101
  return self.defaultValue
101
102
  end
102
- if includeModifiers == false then
103
+ if not includeModifiers then
103
104
  local originalValueByInstance = self.originalValueByInstance
104
105
  if originalValueByInstance ~= nil then
105
106
  local originalValue = originalValueByInstance[entry]
@@ -123,6 +124,7 @@ function ObjectField.prototype.setValue(self, entry, value)
123
124
  defaultValueByObjectDataEntryId[entry.id] = value
124
125
  return true
125
126
  end
127
+ local previousOriginalValue
126
128
  local modifiersByInstance = self.modifiersByInstance
127
129
  if modifiersByInstance ~= nil then
128
130
  local modifiers = modifiersByInstance[entry]
@@ -132,11 +134,34 @@ function ObjectField.prototype.setValue(self, entry, value)
132
134
  originalValueByInstance = mutableWeakLuaMap()
133
135
  self.originalValueByInstance = originalValueByInstance
134
136
  end
137
+ previousOriginalValue = originalValueByInstance[entry]
138
+ if value == previousOriginalValue then
139
+ return true
140
+ end
135
141
  originalValueByInstance[entry] = value
136
142
  value = self:calculateActualValue(entry)
137
143
  end
138
144
  end
139
- return self:setActualValue(entry, value)
145
+ local previousValue = self:setActualValue(entry, value)
146
+ if previousValue == nil then
147
+ return false
148
+ end
149
+ if previousOriginalValue ~= nil or value ~= previousValue then
150
+ local ____self_invokeValueChangeEvent_2 = self.invokeValueChangeEvent
151
+ local ____entry_1 = entry
152
+ local ____previousOriginalValue_0 = previousOriginalValue
153
+ if ____previousOriginalValue_0 == nil then
154
+ ____previousOriginalValue_0 = previousValue
155
+ end
156
+ ____self_invokeValueChangeEvent_2(
157
+ self,
158
+ ____entry_1,
159
+ self,
160
+ ____previousOriginalValue_0,
161
+ value
162
+ )
163
+ end
164
+ return true
140
165
  end
141
166
  function ObjectField.prototype.applyModifier(self, instance, modifier)
142
167
  local modifiersByInstance = self.modifiersByInstance
@@ -150,7 +175,13 @@ function ObjectField.prototype.applyModifier(self, instance, modifier)
150
175
  originalValueByInstance = mutableWeakLuaMap()
151
176
  self.originalValueByInstance = originalValueByInstance
152
177
  end
153
- originalValueByInstance[instance] = self:getActualValue(instance)
178
+ local ____originalValueByInstance_4 = originalValueByInstance
179
+ local ____instance_5 = instance
180
+ local ____originalValueByInstance_instance_3 = originalValueByInstance[instance]
181
+ if ____originalValueByInstance_instance_3 == nil then
182
+ ____originalValueByInstance_instance_3 = self:getActualValue(instance)
183
+ end
184
+ ____originalValueByInstance_4[____instance_5] = ____originalValueByInstance_instance_3
154
185
  self:setActualValue(
155
186
  instance,
156
187
  self:calculateActualValue(instance)
@@ -196,22 +227,22 @@ function ObjectField.prototype.getActualValue(self, instance)
196
227
  if defaultValueByObjectDataEntryId ~= nil or self.isGlobal then
197
228
  local defaultValue = (defaultValueByObjectDataEntryId or emptyLuaMap())[self:getObjectDataEntryId(instance)]
198
229
  if defaultValue ~= nil or self.isGlobal then
199
- local ____self_valueByInstance_instance_0 = self.valueByInstance[instance]
200
- if ____self_valueByInstance_instance_0 == nil then
201
- ____self_valueByInstance_instance_0 = defaultValue
230
+ local ____self_valueByInstance_instance_6 = self.valueByInstance[instance]
231
+ if ____self_valueByInstance_instance_6 == nil then
232
+ ____self_valueByInstance_instance_6 = defaultValue
202
233
  end
203
- local ____self_valueByInstance_instance_0_1 = ____self_valueByInstance_instance_0
204
- if ____self_valueByInstance_instance_0_1 == nil then
205
- ____self_valueByInstance_instance_0_1 = self.defaultValue
234
+ local ____self_valueByInstance_instance_6_7 = ____self_valueByInstance_instance_6
235
+ if ____self_valueByInstance_instance_6_7 == nil then
236
+ ____self_valueByInstance_instance_6_7 = self.defaultValue
206
237
  end
207
- return ____self_valueByInstance_instance_0_1
238
+ return ____self_valueByInstance_instance_6_7
208
239
  end
209
240
  end
210
- local ____temp_2 = self:getNativeFieldValue(instance)
211
- if ____temp_2 == nil then
212
- ____temp_2 = self.defaultValue
241
+ local ____temp_8 = self:getNativeFieldValue(instance)
242
+ if ____temp_8 == nil then
243
+ ____temp_8 = self.defaultValue
213
244
  end
214
- return ____temp_2
245
+ return ____temp_8
215
246
  end
216
247
  function ObjectField.prototype.setActualValue(self, instance, value)
217
248
  local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
@@ -219,39 +250,33 @@ function ObjectField.prototype.setActualValue(self, instance, value)
219
250
  if defaultValueByObjectDataEntryId ~= nil or self.isGlobal then
220
251
  local defaultValue = (defaultValueByObjectDataEntryId or emptyLuaMap())[objectDataEntryId]
221
252
  if defaultValue ~= nil or self.isGlobal then
222
- local ____self_valueByInstance_instance_3 = self.valueByInstance[instance]
223
- if ____self_valueByInstance_instance_3 == nil then
224
- ____self_valueByInstance_instance_3 = defaultValue
225
- end
226
- local ____self_valueByInstance_instance_3_4 = ____self_valueByInstance_instance_3
227
- if ____self_valueByInstance_instance_3_4 == nil then
228
- ____self_valueByInstance_instance_3_4 = self.defaultValue
253
+ local ____self_valueByInstance_instance_9 = self.valueByInstance[instance]
254
+ if ____self_valueByInstance_instance_9 == nil then
255
+ ____self_valueByInstance_instance_9 = defaultValue
229
256
  end
230
- local previousValue = ____self_valueByInstance_instance_3_4
231
- if value ~= previousValue then
232
- self.valueByInstance[instance] = value
233
- self:invokeValueChangeEvent(instance, self, previousValue, value)
257
+ local ____self_valueByInstance_instance_9_10 = ____self_valueByInstance_instance_9
258
+ if ____self_valueByInstance_instance_9_10 == nil then
259
+ ____self_valueByInstance_instance_9_10 = self.defaultValue
234
260
  end
235
- return true
261
+ local previousValue = ____self_valueByInstance_instance_9_10
262
+ self.valueByInstance[instance] = value
263
+ return previousValue
236
264
  end
237
265
  end
238
266
  if not self:hasNativeFieldValue(objectDataEntryId) then
239
- return false
267
+ return nil
240
268
  end
241
269
  local previousValue = self:getNativeFieldValue(instance)
242
- if value ~= previousValue then
243
- if not self:setNativeFieldValue(instance, value) then
244
- return false
245
- end
246
- self:invokeValueChangeEvent(instance, self, previousValue, value)
270
+ if value ~= previousValue and not self:setNativeFieldValue(instance, value) then
271
+ return nil
247
272
  end
248
- return true
273
+ return previousValue
249
274
  end
250
275
  function ObjectField.prototype.calculateActualValue(self, instance)
251
- local ____opt_5 = self.originalValueByInstance
252
- local originalValue = ____opt_5 and ____opt_5[instance]
253
- local ____opt_7 = self.modifiersByInstance
254
- local modifiers = ____opt_7 and ____opt_7[instance]
276
+ local ____opt_11 = self.originalValueByInstance
277
+ local originalValue = ____opt_11 and ____opt_11[instance]
278
+ local ____opt_13 = self.modifiersByInstance
279
+ local modifiers = ____opt_13 and ____opt_13[instance]
255
280
  if originalValue ~= nil then
256
281
  local value = originalValue
257
282
  if modifiers ~= nil then
@@ -316,17 +341,17 @@ function ObjectArrayField.prototype.getValue(self, entry, index)
316
341
  if defaultValueByObjectDataEntryId ~= nil then
317
342
  local value = defaultValueByObjectDataEntryId[entry.id]
318
343
  if value ~= nil then
319
- local ____temp_10
344
+ local ____temp_16
320
345
  if index == nil then
321
- ____temp_10 = value
346
+ ____temp_16 = value
322
347
  else
323
- local ____value_index_9 = value[index + 1]
324
- if ____value_index_9 == nil then
325
- ____value_index_9 = self.defaultValue
348
+ local ____value_index_15 = value[index + 1]
349
+ if ____value_index_15 == nil then
350
+ ____value_index_15 = self.defaultValue
326
351
  end
327
- ____temp_10 = ____value_index_9
352
+ ____temp_16 = ____value_index_15
328
353
  end
329
- return ____temp_10
354
+ return ____temp_16
330
355
  end
331
356
  end
332
357
  return index == nil and ({}) or self.defaultValue
@@ -336,17 +361,17 @@ function ObjectArrayField.prototype.getValue(self, entry, index)
336
361
  local defaultValue = (defaultValueByObjectDataEntryId or emptyLuaMap())[self:getObjectDataEntryId(entry)]
337
362
  if defaultValue ~= nil or self.isGlobal then
338
363
  local value = self.valueByInstance[entry] or defaultValue or emptyArray()
339
- local ____temp_12
364
+ local ____temp_18
340
365
  if index == nil then
341
- ____temp_12 = value
366
+ ____temp_18 = value
342
367
  else
343
- local ____value_index_11 = value[index + 1]
344
- if ____value_index_11 == nil then
345
- ____value_index_11 = self.defaultValue
368
+ local ____value_index_17 = value[index + 1]
369
+ if ____value_index_17 == nil then
370
+ ____value_index_17 = self.defaultValue
346
371
  end
347
- ____temp_12 = ____value_index_11
372
+ ____temp_18 = ____value_index_17
348
373
  end
349
- return ____temp_12
374
+ return ____temp_18
350
375
  end
351
376
  end
352
377
  if index ~= nil then
@@ -391,36 +416,22 @@ function ObjectLevelField.prototype.getValue(self, entry, level)
391
416
  if defaultValueByObjectDataEntryId ~= nil then
392
417
  local valueByLevel = defaultValueByObjectDataEntryId[entry.id]
393
418
  if valueByLevel ~= nil then
394
- local ____valueByLevel_index_13 = valueByLevel[level + 1]
395
- if ____valueByLevel_index_13 == nil then
396
- ____valueByLevel_index_13 = self.defaultValue
419
+ local ____valueByLevel_index_19 = valueByLevel[level + 1]
420
+ if ____valueByLevel_index_19 == nil then
421
+ ____valueByLevel_index_19 = self.defaultValue
397
422
  end
398
- return ____valueByLevel_index_13
423
+ return ____valueByLevel_index_19
399
424
  end
400
425
  end
401
426
  return self.defaultValue
402
427
  end
403
- local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
404
- if defaultValueByObjectDataEntryId ~= nil or self.isGlobal then
405
- local defaultValueByLevel = (defaultValueByObjectDataEntryId or emptyLuaMap())[self:getObjectDataEntryId(entry)]
406
- if defaultValueByLevel ~= nil or self.isGlobal then
407
- local ____opt_14 = self.valueByInstance[entry]
408
- local ____temp_16 = ____opt_14 and ____opt_14[level + 1]
409
- if ____temp_16 == nil then
410
- ____temp_16 = (defaultValueByLevel or emptyArray())[level + 1]
411
- end
412
- local ____temp_16_17 = ____temp_16
413
- if ____temp_16_17 == nil then
414
- ____temp_16_17 = self.defaultValue
415
- end
416
- return ____temp_16_17
417
- end
418
- end
419
- local ____temp_18 = self:getNativeFieldValue(entry, level)
420
- if ____temp_18 == nil then
421
- ____temp_18 = self.defaultValue
428
+ local ____opt_22 = self.originalValueByLevelByInstance
429
+ local ____opt_20 = ____opt_22 and ____opt_22[entry]
430
+ local originalValue = ____opt_20 and ____opt_20[level]
431
+ if originalValue ~= nil then
432
+ return originalValue
422
433
  end
423
- return ____temp_18
434
+ return self:getActualValue(entry, level)
424
435
  end
425
436
  function ObjectLevelField.prototype.setValue(self, entry, levelOrValue, value)
426
437
  if value == nil then
@@ -460,56 +471,93 @@ function ObjectLevelField.prototype.setValue(self, entry, levelOrValue, value)
460
471
  valueByLevel[level + 1] = value
461
472
  return true
462
473
  end
463
- local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
464
- local objectDataEntryId = self:getObjectDataEntryId(entry)
465
- if defaultValueByObjectDataEntryId ~= nil or self.isGlobal then
466
- local defaultValueByLevel = (defaultValueByObjectDataEntryId or emptyLuaMap())[objectDataEntryId]
467
- if defaultValueByLevel ~= nil or self.isGlobal then
468
- local valueByLevel = self.valueByInstance[entry]
469
- if valueByLevel == nil then
470
- valueByLevel = {}
471
- self.valueByInstance[entry] = valueByLevel
472
- end
473
- local ____valueByLevel_index_19 = valueByLevel[level + 1]
474
- if ____valueByLevel_index_19 == nil then
475
- ____valueByLevel_index_19 = (defaultValueByLevel or emptyArray())[level + 1]
476
- end
477
- local ____valueByLevel_index_19_20 = ____valueByLevel_index_19
478
- if ____valueByLevel_index_19_20 == nil then
479
- ____valueByLevel_index_19_20 = self.defaultValue
474
+ local previousOriginalValue
475
+ local modifiersByInstance = self.modifiersByInstance
476
+ if modifiersByInstance ~= nil then
477
+ local modifiers = modifiersByInstance[entry]
478
+ if modifiers ~= nil and modifiers.size ~= 0 then
479
+ local originalValueByLevelByInstance = self.originalValueByLevelByInstance
480
+ if originalValueByLevelByInstance == nil then
481
+ originalValueByLevelByInstance = mutableWeakLuaMap()
482
+ self.originalValueByLevelByInstance = originalValueByLevelByInstance
480
483
  end
481
- local previousValue = ____valueByLevel_index_19_20
482
- if value ~= previousValue then
483
- valueByLevel[level + 1] = value
484
- self:invokeValueChangeEvent(
485
- entry,
486
- self,
487
- level,
488
- previousValue,
489
- value
490
- )
484
+ local originalValueByLevel = getOrPut(originalValueByLevelByInstance, entry, mutableLuaMap)
485
+ previousOriginalValue = originalValueByLevel[level]
486
+ if value == previousOriginalValue then
487
+ return true
491
488
  end
492
- return true
489
+ originalValueByLevel[level] = value
490
+ value = self:calculateActualValue(entry, level)
493
491
  end
494
492
  end
495
- if not self:hasNativeFieldValue(objectDataEntryId) then
493
+ local previousValue = self:setActualValue(entry, level, value)
494
+ if previousValue == nil then
496
495
  return false
497
496
  end
498
- local previousValue = self:getNativeFieldValue(entry, level)
499
- if value ~= previousValue then
500
- if not self:setNativeFieldValue(entry, level, value) then
501
- return false
497
+ if previousOriginalValue ~= nil or value ~= previousValue then
498
+ local ____self_invokeValueChangeEvent_26 = self.invokeValueChangeEvent
499
+ local ____entry_25 = entry
500
+ local ____previousOriginalValue_24 = previousOriginalValue
501
+ if ____previousOriginalValue_24 == nil then
502
+ ____previousOriginalValue_24 = previousValue
502
503
  end
503
- self:invokeValueChangeEvent(
504
- entry,
504
+ ____self_invokeValueChangeEvent_26(
505
+ self,
506
+ ____entry_25,
505
507
  self,
506
508
  level,
507
- previousValue,
509
+ ____previousOriginalValue_24,
508
510
  value
509
511
  )
510
512
  end
511
513
  return true
512
514
  end
515
+ function ObjectLevelField.prototype.applyModifier(self, instance, modifier)
516
+ local modifiersByInstance = self.modifiersByInstance
517
+ if modifiersByInstance == nil then
518
+ modifiersByInstance = mutableWeakLuaMap()
519
+ self.modifiersByInstance = modifiersByInstance
520
+ end
521
+ if getOrPut(modifiersByInstance, instance, mutableLinkedSet):add(modifier) then
522
+ local originalValueByLevelByInstance = self.originalValueByLevelByInstance
523
+ if originalValueByLevelByInstance == nil then
524
+ originalValueByLevelByInstance = mutableWeakLuaMap()
525
+ self.originalValueByLevelByInstance = originalValueByLevelByInstance
526
+ end
527
+ local originalValueByLevel = getOrPut(originalValueByLevelByInstance, instance, mutableLuaMap)
528
+ local levelCount = self:getLevelCount(instance)
529
+ for level = 0, levelCount - 1 do
530
+ local ____originalValueByLevel_level_27 = originalValueByLevel[level]
531
+ if ____originalValueByLevel_level_27 == nil then
532
+ ____originalValueByLevel_level_27 = self:getActualValue(instance, level)
533
+ end
534
+ originalValueByLevel[level] = ____originalValueByLevel_level_27
535
+ self:setActualValue(
536
+ instance,
537
+ level,
538
+ self:calculateActualValue(instance, level)
539
+ )
540
+ end
541
+ end
542
+ end
543
+ function ObjectLevelField.prototype.removeModifier(self, instance, modifier)
544
+ local modifiersByInstance = self.modifiersByInstance
545
+ if modifiersByInstance ~= nil then
546
+ local modifiers = modifiersByInstance[instance]
547
+ if modifiers ~= nil and modifiers:remove(modifier) then
548
+ local levelCount = self:getLevelCount(instance)
549
+ for level = 0, levelCount - 1 do
550
+ self:setActualValue(
551
+ instance,
552
+ level,
553
+ self:calculateActualValue(instance, level)
554
+ )
555
+ end
556
+ return true
557
+ end
558
+ end
559
+ return false
560
+ end
513
561
  function ObjectLevelField.prototype.trySetValue(self, entry, levelOrValue, value)
514
562
  if value ~= nil then
515
563
  if __TS__TypeOf(value) ~= __TS__TypeOf(self.defaultValue) then
@@ -525,6 +573,79 @@ function ObjectLevelField.prototype.trySetValue(self, entry, levelOrValue, value
525
573
  end
526
574
  return self:setValue(entry, levelOrValue)
527
575
  end
576
+ function ObjectLevelField.prototype.getActualValue(self, instance, level)
577
+ local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
578
+ if defaultValueByObjectDataEntryId ~= nil or self.isGlobal then
579
+ local defaultValueByLevel = (defaultValueByObjectDataEntryId or emptyLuaMap())[self:getObjectDataEntryId(instance)]
580
+ if defaultValueByLevel ~= nil or self.isGlobal then
581
+ local ____opt_28 = self.valueByInstance[instance]
582
+ local ____temp_30 = ____opt_28 and ____opt_28[level + 1]
583
+ if ____temp_30 == nil then
584
+ ____temp_30 = (defaultValueByLevel or emptyArray())[level + 1]
585
+ end
586
+ local ____temp_30_31 = ____temp_30
587
+ if ____temp_30_31 == nil then
588
+ ____temp_30_31 = self.defaultValue
589
+ end
590
+ return ____temp_30_31
591
+ end
592
+ end
593
+ local ____temp_32 = self:getNativeFieldValue(instance, level)
594
+ if ____temp_32 == nil then
595
+ ____temp_32 = self.defaultValue
596
+ end
597
+ return ____temp_32
598
+ end
599
+ function ObjectLevelField.prototype.setActualValue(self, instance, level, value)
600
+ local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
601
+ local objectDataEntryId = self:getObjectDataEntryId(instance)
602
+ if defaultValueByObjectDataEntryId ~= nil or self.isGlobal then
603
+ local defaultValueByLevel = (defaultValueByObjectDataEntryId or emptyLuaMap())[objectDataEntryId]
604
+ if defaultValueByLevel ~= nil or self.isGlobal then
605
+ local valueByLevel = self.valueByInstance[instance]
606
+ if valueByLevel == nil then
607
+ valueByLevel = {}
608
+ self.valueByInstance[instance] = valueByLevel
609
+ end
610
+ local ____valueByLevel_index_33 = valueByLevel[level + 1]
611
+ if ____valueByLevel_index_33 == nil then
612
+ ____valueByLevel_index_33 = (defaultValueByLevel or emptyArray())[level + 1]
613
+ end
614
+ local ____valueByLevel_index_33_34 = ____valueByLevel_index_33
615
+ if ____valueByLevel_index_33_34 == nil then
616
+ ____valueByLevel_index_33_34 = self.defaultValue
617
+ end
618
+ local previousValue = ____valueByLevel_index_33_34
619
+ valueByLevel[level + 1] = value
620
+ return previousValue
621
+ end
622
+ end
623
+ if not self:hasNativeFieldValue(objectDataEntryId) then
624
+ return nil
625
+ end
626
+ local previousValue = self:getNativeFieldValue(instance, level)
627
+ if value ~= previousValue and not self:setNativeFieldValue(instance, level, value) then
628
+ return nil
629
+ end
630
+ return previousValue
631
+ end
632
+ function ObjectLevelField.prototype.calculateActualValue(self, instance, level)
633
+ local ____opt_37 = self.originalValueByLevelByInstance
634
+ local ____opt_35 = ____opt_37 and ____opt_37[instance]
635
+ local originalValue = ____opt_35 and ____opt_35[level]
636
+ local ____opt_39 = self.modifiersByInstance
637
+ local modifiers = ____opt_39 and ____opt_39[instance]
638
+ if originalValue ~= nil then
639
+ local value = originalValue
640
+ if modifiers ~= nil then
641
+ for modifier in pairs(modifiers) do
642
+ value = modifier(instance, level, value, originalValue)
643
+ end
644
+ end
645
+ return value
646
+ end
647
+ return self.defaultValue
648
+ end
528
649
  function ObjectLevelField.prototype.invokeValueChangeEvent(self, ...)
529
650
  self:invokeValueChangeEventRecursive(
530
651
  getClass(self),
@@ -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"))
@@ -1,4 +1,6 @@
1
1
  /** @noSelfInFile */
2
- import { UnitClassificationsField, UnitPropulsionWindowField } from "../../object-field/unit";
2
+ import { UnitClassificationsField, UnitFlyHeightField, UnitPropulsionWindowField, UnitScalingValueField } from "../../object-field/unit";
3
3
  export declare const PROPULSION_WINDOW_UNIT_FLOAT_FIELD: UnitPropulsionWindowField & symbol;
4
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;
@@ -1,7 +1,11 @@
1
1
  local ____exports = {}
2
2
  local ____unit = require("engine.object-field.unit")
3
3
  local UnitClassificationsField = ____unit.UnitClassificationsField
4
+ local UnitFlyHeightField = ____unit.UnitFlyHeightField
4
5
  local UnitPropulsionWindowField = ____unit.UnitPropulsionWindowField
6
+ local UnitScalingValueField = ____unit.UnitScalingValueField
5
7
  ____exports.PROPULSION_WINDOW_UNIT_FLOAT_FIELD = UnitPropulsionWindowField:create(fourCC("urpw"))
6
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"))
7
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
@@ -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,8 @@ 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/fly-height";
23
+ import "./internal/unit/scale";
22
24
  import "./internal/unit/band-aids/ancestral-spirit-cannibalize";
23
25
  export { Unit, DamagingEvent, DamageEvent } from "./internal/unit";
24
26
  export * from "./internal/unit+damage";
package/engine/unit.lua CHANGED
@@ -19,6 +19,8 @@ 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.fly-height")
23
+ require("engine.internal.unit.scale")
22
24
  require("engine.internal.unit.band-aids.ancestral-spirit-cannibalize")
23
25
  do
24
26
  local ____unit = require("engine.internal.unit")