warscript 0.0.1-dev.3370e98 → 0.0.1-dev.352d2b1

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 (65) hide show
  1. package/attributes.d.ts +1 -0
  2. package/attributes.lua +9 -0
  3. package/core/types/frame.lua +14 -9
  4. package/core/types/player.d.ts +15 -0
  5. package/core/types/player.lua +53 -13
  6. package/core/types/playerCamera.lua +44 -0
  7. package/core/types/tileCell.d.ts +11 -1
  8. package/core/types/tileCell.lua +97 -0
  9. package/core/types/timer.d.ts +3 -2
  10. package/core/types/timer.lua +22 -2
  11. package/decl/native.d.ts +2 -2
  12. package/engine/behavior.d.ts +3 -0
  13. package/engine/behavior.lua +53 -0
  14. package/engine/behaviour/ability/remove-buffs.d.ts +9 -0
  15. package/engine/behaviour/ability/remove-buffs.lua +21 -0
  16. package/engine/behaviour/unit/stun-immunity.d.ts +2 -0
  17. package/engine/behaviour/unit/stun-immunity.lua +11 -2
  18. package/engine/behaviour/unit.d.ts +8 -2
  19. package/engine/behaviour/unit.lua +29 -2
  20. package/engine/buff.d.ts +10 -4
  21. package/engine/buff.lua +116 -84
  22. package/engine/internal/ability.d.ts +3 -1
  23. package/engine/internal/ability.lua +26 -9
  24. package/engine/internal/item.d.ts +13 -15
  25. package/engine/internal/item.lua +63 -49
  26. package/engine/internal/unit/ability.d.ts +14 -14
  27. package/engine/internal/unit/ability.lua +72 -45
  28. package/engine/internal/unit/fly-height.d.ts +7 -0
  29. package/engine/internal/unit/fly-height.lua +20 -0
  30. package/engine/internal/unit/main-selected.lua +12 -27
  31. package/engine/internal/unit+ability.lua +9 -0
  32. package/engine/internal/unit-missile-launch.lua +44 -20
  33. package/engine/internal/unit.d.ts +16 -11
  34. package/engine/internal/unit.lua +94 -63
  35. package/engine/local-client.d.ts +2 -0
  36. package/engine/local-client.lua +30 -0
  37. package/engine/object-data/entry/ability-type.lua +4 -1
  38. package/engine/object-field/ability.d.ts +3 -3
  39. package/engine/object-field/ability.lua +7 -6
  40. package/engine/object-field/unit.d.ts +4 -0
  41. package/engine/object-field/unit.lua +13 -0
  42. package/engine/object-field.d.ts +9 -3
  43. package/engine/object-field.lua +198 -115
  44. package/engine/random.d.ts +9 -0
  45. package/engine/random.lua +13 -0
  46. package/engine/standard/fields/unit.d.ts +2 -1
  47. package/engine/standard/fields/unit.lua +2 -0
  48. package/engine/synchronization.d.ts +11 -0
  49. package/engine/synchronization.lua +77 -0
  50. package/engine/text-tag.lua +3 -2
  51. package/engine/unit.d.ts +1 -0
  52. package/engine/unit.lua +1 -0
  53. package/net/socket.lua +1 -1
  54. package/objutil/buff.lua +1 -1
  55. package/package.json +2 -2
  56. package/patch-lualib.lua +1 -1
  57. package/utility/arrays.d.ts +1 -0
  58. package/utility/arrays.lua +8 -0
  59. package/utility/callback-array.d.ts +17 -0
  60. package/utility/callback-array.lua +61 -0
  61. package/utility/linked-set.d.ts +1 -0
  62. package/utility/linked-set.lua +19 -1
  63. package/utility/lua-maps.d.ts +11 -2
  64. package/utility/lua-maps.lua +33 -2
  65. package/utility/types.d.ts +3 -0
@@ -18,6 +18,8 @@ local convertUnitStringField = ConvertUnitStringField
18
18
  local convertUnitWeaponIntegerField = ConvertUnitWeaponIntegerField
19
19
  local getUnitWeaponIntegerField = BlzGetUnitWeaponIntegerField
20
20
  local setUnitWeaponIntegerField = BlzSetUnitWeaponIntegerField
21
+ local getUnitFlyHeight = GetUnitFlyHeight
22
+ local setUnitFlyHeight = SetUnitFlyHeight
21
23
  local getUnitPropulsionWindow = GetUnitPropWindow
22
24
  local setUnitPropulsionWindow = SetUnitPropWindow
23
25
  ____exports.UnitField = __TS__Class()
@@ -238,6 +240,17 @@ __TS__SetDescriptor(
238
240
  end},
239
241
  true
240
242
  )
243
+ ____exports.UnitFlyHeightField = __TS__Class()
244
+ local UnitFlyHeightField = ____exports.UnitFlyHeightField
245
+ UnitFlyHeightField.name = "UnitFlyHeightField"
246
+ __TS__ClassExtends(UnitFlyHeightField, ____exports.UnitFloatField)
247
+ function UnitFlyHeightField.prototype.getNativeFieldValue(self, instance)
248
+ return getUnitFlyHeight(instance.handle)
249
+ end
250
+ function UnitFlyHeightField.prototype.setNativeFieldValue(self, instance, value)
251
+ setUnitFlyHeight(instance.handle, value, 100000)
252
+ return true
253
+ end
241
254
  ____exports.UnitPropulsionWindowField = __TS__Class()
242
255
  local UnitPropulsionWindowField = ____exports.UnitPropulsionWindowField
243
256
  UnitPropulsionWindowField.name = "UnitPropulsionWindowField"
@@ -17,8 +17,8 @@ declare abstract class ObjectFieldBase<ObjectDataEntryType extends ObjectDataEnt
17
17
  readonly id: ObjectFieldId;
18
18
  protected abstract getNativeFieldById(id: number): NativeFieldType;
19
19
  protected abstract getObjectDataEntryId(instance: InstanceType): ObjectDataEntryIdType<ObjectDataEntryType>;
20
- protected abstract hasNativeFieldValue(instance: InstanceType): boolean;
21
- hasValue(instance: InstanceType): boolean;
20
+ protected abstract hasNativeFieldValue(objectDataEntryId: ObjectDataEntryIdType<ObjectDataEntryType>): boolean;
21
+ hasValue(objectDataEntryId: ObjectDataEntryIdType<ObjectDataEntryType>): boolean;
22
22
  constructor(id: number, isGlobal?: boolean);
23
23
  static create<T extends ObjectFieldBase<any, any, any, any>>(this: ObjectFieldConstructor<T>, id?: number, isGlobal?: boolean): T & symbol;
24
24
  static of<T extends ObjectFieldBase<any, any, any, any>>(this: ObjectFieldAbstractConstructor<T>, id: number): T | undefined;
@@ -36,7 +36,8 @@ export type ObjectFieldValueChangeEvent<T extends ObjectField<any, any, any, any
36
36
  ]> : never;
37
37
  export type ReadonlyObjectFieldType<T extends ObjectField<any, any, any, any>> = Omit<T, "setValue" | "removeValue" | "trySetValue">;
38
38
  type ReadonlyObjectFieldConstructor<T extends ObjectField> = OmitConstructor<typeof ObjectField> & (abstract new (...args: any[]) => ReadonlyObjectFieldType<T>);
39
- type ObjectFieldModifier<InstanceType extends AnyNotNil, ValueType extends number | string | boolean> = (instance: InstanceType, currentValue: ValueType, originalValue: ValueType) => ValueType;
39
+ export type ObjectFieldModifier<InstanceType extends AnyNotNil, ValueType extends number | string | boolean> = (instance: InstanceType, currentValue: ValueType, originalValue: ValueType) => ValueType;
40
+ export type ObjectLevelFieldModifier<InstanceType extends AnyNotNil, ValueType extends number | string | boolean> = (instance: InstanceType, level: number, currentValue: ValueType, originalValue: ValueType) => ValueType;
40
41
  export declare abstract class ObjectField<ObjectDataEntryType extends ObjectDataEntry = ObjectDataEntry, InstanceType extends AnyNotNil = AnyNotNil, ValueType extends number | string | boolean = number | string | boolean, NativeFieldType = unknown> extends ObjectFieldBase<ObjectDataEntryType, InstanceType, ValueType, NativeFieldType> {
41
42
  protected abstract readonly defaultValue: ValueType;
42
43
  protected abstract getNativeFieldValue(instance: InstanceType): ValueType;
@@ -88,7 +89,12 @@ export declare abstract class ObjectLevelField<ObjectDataEntryType extends Objec
88
89
  protected abstract getLevelCount(entry: ObjectDataEntryType | InstanceType): number;
89
90
  getValue<LevelType extends [number] | []>(entry: ObjectDataEntryType | InstanceType, ...[level]: LevelType): LevelType extends [number] ? ValueType : ValueType[];
90
91
  setValue(entry: ObjectDataEntryType | InstanceType, ...[levelOrValue, value]: [value: ObjectDataEntryLevelFieldValueSupplier<InputValueType, ValueType>] | [level: number, value: InputValueType]): boolean;
92
+ applyModifier(instance: InstanceType, modifier: ObjectLevelFieldModifier<InstanceType, ValueType>): void;
93
+ removeModifier(instance: InstanceType, modifier: ObjectLevelFieldModifier<InstanceType, ValueType>): boolean;
91
94
  trySetValue(entry: ObjectDataEntryType | InstanceType, levelOrValue: number | unknown, value?: unknown): boolean;
95
+ private getActualValue;
96
+ private setActualValue;
97
+ private calculateActualValue;
92
98
  private invokeValueChangeEvent;
93
99
  private invokeValueChangeEventRecursive;
94
100
  protected static getOrCreateValueChangeEvent<T extends ObjectLevelField, R extends ReadonlyObjectLevelFieldType<T>>(this: ReadonlyObjectLevelFieldConstructor<T>): ObjectLevelFieldValueChangeEvent<R>;
@@ -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
@@ -58,9 +59,9 @@ end
58
59
  function ObjectFieldBase.prototype.supports(self, instance)
59
60
  return __TS__InstanceOf(instance, self.instanceClass)
60
61
  end
61
- function ObjectFieldBase.prototype.hasValue(self, instance)
62
+ function ObjectFieldBase.prototype.hasValue(self, objectDataEntryId)
62
63
  local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
63
- return self.isGlobal or 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)
64
65
  end
65
66
  function ObjectFieldBase.create(self, id, isGlobal)
66
67
  return __TS__New(
@@ -150,7 +151,13 @@ function ObjectField.prototype.applyModifier(self, instance, modifier)
150
151
  originalValueByInstance = mutableWeakLuaMap()
151
152
  self.originalValueByInstance = originalValueByInstance
152
153
  end
153
- 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
154
161
  self:setActualValue(
155
162
  instance,
156
163
  self:calculateActualValue(instance)
@@ -196,61 +203,58 @@ function ObjectField.prototype.getActualValue(self, instance)
196
203
  if defaultValueByObjectDataEntryId ~= nil or self.isGlobal then
197
204
  local defaultValue = (defaultValueByObjectDataEntryId or emptyLuaMap())[self:getObjectDataEntryId(instance)]
198
205
  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
206
+ local ____self_valueByInstance_instance_3 = self.valueByInstance[instance]
207
+ if ____self_valueByInstance_instance_3 == nil then
208
+ ____self_valueByInstance_instance_3 = defaultValue
202
209
  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
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
206
213
  end
207
- return ____self_valueByInstance_instance_0_1
214
+ return ____self_valueByInstance_instance_3_4
208
215
  end
209
216
  end
210
- local ____temp_2 = self:getNativeFieldValue(instance)
211
- if ____temp_2 == nil then
212
- ____temp_2 = self.defaultValue
217
+ local ____temp_5 = self:getNativeFieldValue(instance)
218
+ if ____temp_5 == nil then
219
+ ____temp_5 = self.defaultValue
213
220
  end
214
- return ____temp_2
221
+ return ____temp_5
215
222
  end
216
223
  function ObjectField.prototype.setActualValue(self, instance, value)
217
224
  local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
225
+ local objectDataEntryId = self:getObjectDataEntryId(instance)
218
226
  if defaultValueByObjectDataEntryId ~= nil or self.isGlobal then
219
- local defaultValue = (defaultValueByObjectDataEntryId or emptyLuaMap())[self:getObjectDataEntryId(instance)]
227
+ local defaultValue = (defaultValueByObjectDataEntryId or emptyLuaMap())[objectDataEntryId]
220
228
  if defaultValue ~= nil or self.isGlobal then
221
- local ____self_valueByInstance_instance_3 = self.valueByInstance[instance]
222
- if ____self_valueByInstance_instance_3 == nil then
223
- ____self_valueByInstance_instance_3 = defaultValue
224
- end
225
- local ____self_valueByInstance_instance_3_4 = ____self_valueByInstance_instance_3
226
- if ____self_valueByInstance_instance_3_4 == nil then
227
- ____self_valueByInstance_instance_3_4 = self.defaultValue
229
+ local ____self_valueByInstance_instance_6 = self.valueByInstance[instance]
230
+ if ____self_valueByInstance_instance_6 == nil then
231
+ ____self_valueByInstance_instance_6 = defaultValue
228
232
  end
229
- local previousValue = ____self_valueByInstance_instance_3_4
230
- if value ~= previousValue then
231
- self.valueByInstance[instance] = value
232
- 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
233
236
  end
237
+ local previousValue = ____self_valueByInstance_instance_6_7
238
+ self.valueByInstance[instance] = value
239
+ self:invokeValueChangeEvent(instance, self, previousValue, value)
234
240
  return true
235
241
  end
236
242
  end
237
- if not self:hasNativeFieldValue(instance) then
243
+ if not self:hasNativeFieldValue(objectDataEntryId) then
238
244
  return false
239
245
  end
240
246
  local previousValue = self:getNativeFieldValue(instance)
241
- if value ~= previousValue then
242
- if not self:setNativeFieldValue(instance, value) then
243
- return false
244
- end
245
- self:invokeValueChangeEvent(instance, self, previousValue, value)
247
+ if value ~= previousValue and not self:setNativeFieldValue(instance, value) then
248
+ return false
246
249
  end
250
+ self:invokeValueChangeEvent(instance, self, previousValue, value)
247
251
  return true
248
252
  end
249
253
  function ObjectField.prototype.calculateActualValue(self, instance)
250
- local ____opt_5 = self.originalValueByInstance
251
- local originalValue = ____opt_5 and ____opt_5[instance]
252
- local ____opt_7 = self.modifiersByInstance
253
- local modifiers = ____opt_7 and ____opt_7[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]
254
258
  if originalValue ~= nil then
255
259
  local value = originalValue
256
260
  if modifiers ~= nil then
@@ -315,17 +319,17 @@ function ObjectArrayField.prototype.getValue(self, entry, index)
315
319
  if defaultValueByObjectDataEntryId ~= nil then
316
320
  local value = defaultValueByObjectDataEntryId[entry.id]
317
321
  if value ~= nil then
318
- local ____temp_10
322
+ local ____temp_13
319
323
  if index == nil then
320
- ____temp_10 = value
324
+ ____temp_13 = value
321
325
  else
322
- local ____value_index_9 = value[index + 1]
323
- if ____value_index_9 == nil then
324
- ____value_index_9 = self.defaultValue
326
+ local ____value_index_12 = value[index + 1]
327
+ if ____value_index_12 == nil then
328
+ ____value_index_12 = self.defaultValue
325
329
  end
326
- ____temp_10 = ____value_index_9
330
+ ____temp_13 = ____value_index_12
327
331
  end
328
- return ____temp_10
332
+ return ____temp_13
329
333
  end
330
334
  end
331
335
  return index == nil and ({}) or self.defaultValue
@@ -335,17 +339,17 @@ function ObjectArrayField.prototype.getValue(self, entry, index)
335
339
  local defaultValue = (defaultValueByObjectDataEntryId or emptyLuaMap())[self:getObjectDataEntryId(entry)]
336
340
  if defaultValue ~= nil or self.isGlobal then
337
341
  local value = self.valueByInstance[entry] or defaultValue or emptyArray()
338
- local ____temp_12
342
+ local ____temp_15
339
343
  if index == nil then
340
- ____temp_12 = value
344
+ ____temp_15 = value
341
345
  else
342
- local ____value_index_11 = value[index + 1]
343
- if ____value_index_11 == nil then
344
- ____value_index_11 = self.defaultValue
346
+ local ____value_index_14 = value[index + 1]
347
+ if ____value_index_14 == nil then
348
+ ____value_index_14 = self.defaultValue
345
349
  end
346
- ____temp_12 = ____value_index_11
350
+ ____temp_15 = ____value_index_14
347
351
  end
348
- return ____temp_12
352
+ return ____temp_15
349
353
  end
350
354
  end
351
355
  if index ~= nil then
@@ -390,36 +394,16 @@ function ObjectLevelField.prototype.getValue(self, entry, level)
390
394
  if defaultValueByObjectDataEntryId ~= nil then
391
395
  local valueByLevel = defaultValueByObjectDataEntryId[entry.id]
392
396
  if valueByLevel ~= nil then
393
- local ____valueByLevel_index_13 = valueByLevel[level + 1]
394
- if ____valueByLevel_index_13 == nil then
395
- ____valueByLevel_index_13 = self.defaultValue
397
+ local ____valueByLevel_index_16 = valueByLevel[level + 1]
398
+ if ____valueByLevel_index_16 == nil then
399
+ ____valueByLevel_index_16 = self.defaultValue
396
400
  end
397
- return ____valueByLevel_index_13
401
+ return ____valueByLevel_index_16
398
402
  end
399
403
  end
400
404
  return self.defaultValue
401
405
  end
402
- local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
403
- if defaultValueByObjectDataEntryId ~= nil or self.isGlobal then
404
- local defaultValueByLevel = (defaultValueByObjectDataEntryId or emptyLuaMap())[self:getObjectDataEntryId(entry)]
405
- if defaultValueByLevel ~= nil or self.isGlobal then
406
- local ____opt_14 = self.valueByInstance[entry]
407
- local ____temp_16 = ____opt_14 and ____opt_14[level + 1]
408
- if ____temp_16 == nil then
409
- ____temp_16 = (defaultValueByLevel or emptyArray())[level + 1]
410
- end
411
- local ____temp_16_17 = ____temp_16
412
- if ____temp_16_17 == nil then
413
- ____temp_16_17 = self.defaultValue
414
- end
415
- return ____temp_16_17
416
- end
417
- end
418
- local ____temp_18 = self:getNativeFieldValue(entry, level)
419
- if ____temp_18 == nil then
420
- ____temp_18 = self.defaultValue
421
- end
422
- return ____temp_18
406
+ return self:getActualValue(entry, level)
423
407
  end
424
408
  function ObjectLevelField.prototype.setValue(self, entry, levelOrValue, value)
425
409
  if value == nil then
@@ -459,54 +443,66 @@ function ObjectLevelField.prototype.setValue(self, entry, levelOrValue, value)
459
443
  valueByLevel[level + 1] = value
460
444
  return true
461
445
  end
462
- local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
463
- if defaultValueByObjectDataEntryId ~= nil or self.isGlobal then
464
- local defaultValueByLevel = (defaultValueByObjectDataEntryId or emptyLuaMap())[self:getObjectDataEntryId(entry)]
465
- if defaultValueByLevel ~= nil or self.isGlobal then
466
- local valueByLevel = self.valueByInstance[entry]
467
- if valueByLevel == nil then
468
- valueByLevel = {}
469
- self.valueByInstance[entry] = valueByLevel
470
- end
471
- local ____valueByLevel_index_19 = valueByLevel[level + 1]
472
- if ____valueByLevel_index_19 == nil then
473
- ____valueByLevel_index_19 = (defaultValueByLevel or emptyArray())[level + 1]
446
+ local modifiersByInstance = self.modifiersByInstance
447
+ if modifiersByInstance ~= nil then
448
+ local modifiers = modifiersByInstance[entry]
449
+ if modifiers ~= nil and modifiers.size ~= 0 then
450
+ local originalValueByLevelByInstance = self.originalValueByLevelByInstance
451
+ if originalValueByLevelByInstance == nil then
452
+ originalValueByLevelByInstance = mutableWeakLuaMap()
453
+ self.originalValueByLevelByInstance = originalValueByLevelByInstance
474
454
  end
475
- local ____valueByLevel_index_19_20 = ____valueByLevel_index_19
476
- if ____valueByLevel_index_19_20 == nil then
477
- ____valueByLevel_index_19_20 = self.defaultValue
455
+ getOrPut(originalValueByLevelByInstance, entry, mutableLuaMap)[level] = value
456
+ value = self:calculateActualValue(entry, level)
457
+ end
458
+ end
459
+ return self:setActualValue(entry, level, value)
460
+ end
461
+ function ObjectLevelField.prototype.applyModifier(self, instance, modifier)
462
+ local modifiersByInstance = self.modifiersByInstance
463
+ if modifiersByInstance == nil then
464
+ modifiersByInstance = mutableWeakLuaMap()
465
+ self.modifiersByInstance = modifiersByInstance
466
+ end
467
+ if getOrPut(modifiersByInstance, instance, mutableLinkedSet):add(modifier) then
468
+ local originalValueByLevelByInstance = self.originalValueByLevelByInstance
469
+ if originalValueByLevelByInstance == nil then
470
+ originalValueByLevelByInstance = mutableWeakLuaMap()
471
+ self.originalValueByLevelByInstance = originalValueByLevelByInstance
472
+ end
473
+ local originalValueByLevel = getOrPut(originalValueByLevelByInstance, instance, mutableLuaMap)
474
+ local levelCount = self:getLevelCount(instance)
475
+ for level = 0, levelCount - 1 do
476
+ local ____originalValueByLevel_level_17 = originalValueByLevel[level]
477
+ if ____originalValueByLevel_level_17 == nil then
478
+ ____originalValueByLevel_level_17 = self:getActualValue(instance, level)
478
479
  end
479
- local previousValue = ____valueByLevel_index_19_20
480
- if value ~= previousValue then
481
- valueByLevel[level + 1] = value
482
- self:invokeValueChangeEvent(
483
- entry,
484
- self,
480
+ originalValueByLevel[level] = ____originalValueByLevel_level_17
481
+ self:setActualValue(
482
+ instance,
483
+ level,
484
+ self:calculateActualValue(instance, level)
485
+ )
486
+ end
487
+ end
488
+ end
489
+ function ObjectLevelField.prototype.removeModifier(self, instance, modifier)
490
+ local modifiersByInstance = self.modifiersByInstance
491
+ if modifiersByInstance ~= nil then
492
+ local modifiers = modifiersByInstance[instance]
493
+ if modifiers ~= nil and modifiers:remove(modifier) then
494
+ local levelCount = self:getLevelCount(instance)
495
+ for level = 0, levelCount - 1 do
496
+ self:setActualValue(
497
+ instance,
485
498
  level,
486
- previousValue,
487
- value
499
+ self:calculateActualValue(instance, level)
488
500
  )
489
501
  end
490
502
  return true
491
503
  end
492
504
  end
493
- if not self:hasNativeFieldValue(entry) then
494
- return false
495
- end
496
- local previousValue = self:getNativeFieldValue(entry, level)
497
- if value ~= previousValue then
498
- if not self:setNativeFieldValue(entry, level, value) then
499
- return false
500
- end
501
- self:invokeValueChangeEvent(
502
- entry,
503
- self,
504
- level,
505
- previousValue,
506
- value
507
- )
508
- end
509
- return true
505
+ return false
510
506
  end
511
507
  function ObjectLevelField.prototype.trySetValue(self, entry, levelOrValue, value)
512
508
  if value ~= nil then
@@ -523,6 +519,93 @@ function ObjectLevelField.prototype.trySetValue(self, entry, levelOrValue, value
523
519
  end
524
520
  return self:setValue(entry, levelOrValue)
525
521
  end
522
+ function ObjectLevelField.prototype.getActualValue(self, instance, level)
523
+ local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
524
+ if defaultValueByObjectDataEntryId ~= nil or self.isGlobal then
525
+ local defaultValueByLevel = (defaultValueByObjectDataEntryId or emptyLuaMap())[self:getObjectDataEntryId(instance)]
526
+ if defaultValueByLevel ~= nil or self.isGlobal then
527
+ local ____opt_18 = self.valueByInstance[instance]
528
+ local ____temp_20 = ____opt_18 and ____opt_18[level + 1]
529
+ if ____temp_20 == nil then
530
+ ____temp_20 = (defaultValueByLevel or emptyArray())[level + 1]
531
+ end
532
+ local ____temp_20_21 = ____temp_20
533
+ if ____temp_20_21 == nil then
534
+ ____temp_20_21 = self.defaultValue
535
+ end
536
+ return ____temp_20_21
537
+ end
538
+ end
539
+ local ____temp_22 = self:getNativeFieldValue(instance, level)
540
+ if ____temp_22 == nil then
541
+ ____temp_22 = self.defaultValue
542
+ end
543
+ return ____temp_22
544
+ end
545
+ function ObjectLevelField.prototype.setActualValue(self, instance, level, value)
546
+ local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
547
+ local objectDataEntryId = self:getObjectDataEntryId(instance)
548
+ if defaultValueByObjectDataEntryId ~= nil or self.isGlobal then
549
+ local defaultValueByLevel = (defaultValueByObjectDataEntryId or emptyLuaMap())[objectDataEntryId]
550
+ if defaultValueByLevel ~= nil or self.isGlobal then
551
+ local valueByLevel = self.valueByInstance[instance]
552
+ if valueByLevel == nil then
553
+ valueByLevel = {}
554
+ self.valueByInstance[instance] = valueByLevel
555
+ end
556
+ local ____valueByLevel_index_23 = valueByLevel[level + 1]
557
+ if ____valueByLevel_index_23 == nil then
558
+ ____valueByLevel_index_23 = (defaultValueByLevel or emptyArray())[level + 1]
559
+ end
560
+ local ____valueByLevel_index_23_24 = ____valueByLevel_index_23
561
+ if ____valueByLevel_index_23_24 == nil then
562
+ ____valueByLevel_index_23_24 = self.defaultValue
563
+ end
564
+ local previousValue = ____valueByLevel_index_23_24
565
+ valueByLevel[level + 1] = value
566
+ self:invokeValueChangeEvent(
567
+ instance,
568
+ self,
569
+ level,
570
+ previousValue,
571
+ value
572
+ )
573
+ return true
574
+ end
575
+ end
576
+ if not self:hasNativeFieldValue(objectDataEntryId) then
577
+ return false
578
+ end
579
+ local previousValue = self:getNativeFieldValue(instance, level)
580
+ if value ~= previousValue and not self:setNativeFieldValue(instance, level, value) then
581
+ return false
582
+ end
583
+ self:invokeValueChangeEvent(
584
+ instance,
585
+ self,
586
+ level,
587
+ previousValue,
588
+ value
589
+ )
590
+ return true
591
+ end
592
+ function ObjectLevelField.prototype.calculateActualValue(self, instance, level)
593
+ local ____opt_27 = self.originalValueByLevelByInstance
594
+ local ____opt_25 = ____opt_27 and ____opt_27[instance]
595
+ local originalValue = ____opt_25 and ____opt_25[level]
596
+ local ____opt_29 = self.modifiersByInstance
597
+ local modifiers = ____opt_29 and ____opt_29[instance]
598
+ if originalValue ~= nil then
599
+ local value = originalValue
600
+ if modifiers ~= nil then
601
+ for modifier in pairs(modifiers) do
602
+ value = modifier(instance, level, value, originalValue)
603
+ end
604
+ end
605
+ return value
606
+ end
607
+ return self.defaultValue
608
+ end
526
609
  function ObjectLevelField.prototype.invokeValueChangeEvent(self, ...)
527
610
  self:invokeValueChangeEventRecursive(
528
611
  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
@@ -1,4 +1,5 @@
1
1
  /** @noSelfInFile */
2
- import { UnitClassificationsField, UnitPropulsionWindowField } from "../../object-field/unit";
2
+ import { UnitClassificationsField, UnitFlyHeightField, UnitPropulsionWindowField } 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;
@@ -1,7 +1,9 @@
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
5
6
  ____exports.PROPULSION_WINDOW_UNIT_FLOAT_FIELD = UnitPropulsionWindowField:create(fourCC("urpw"))
6
7
  ____exports.UNIT_CLASSIFICATIONS_FIELD = UnitClassificationsField:create(fourCC("utyp"))
8
+ ____exports.FLY_HEIGHT_UNIT_FLOAT_FIELD = UnitFlyHeightField:create(fourCC("ufyh"))
7
9
  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,