warscript 0.0.1-dev.e561d29 → 0.0.1-dev.e5e97e8

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 (72) hide show
  1. package/attributes.d.ts +1 -0
  2. package/attributes.lua +9 -0
  3. package/core/types/frame.lua +24 -21
  4. package/core/types/player.d.ts +15 -0
  5. package/core/types/player.lua +56 -14
  6. package/core/types/playerCamera.d.ts +2 -0
  7. package/core/types/playerCamera.lua +123 -5
  8. package/core/types/tileCell.d.ts +9 -0
  9. package/core/types/tileCell.lua +92 -0
  10. package/core/types/timer.d.ts +3 -2
  11. package/core/types/timer.lua +22 -2
  12. package/decl/native.d.ts +2 -2
  13. package/engine/behavior.d.ts +3 -0
  14. package/engine/behavior.lua +53 -0
  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/restore-mana.d.ts +1 -1
  18. package/engine/behaviour/ability/restore-mana.lua +6 -6
  19. package/engine/behaviour/unit/stun-immunity.d.ts +2 -0
  20. package/engine/behaviour/unit/stun-immunity.lua +11 -2
  21. package/engine/behaviour/unit.d.ts +8 -2
  22. package/engine/behaviour/unit.lua +29 -2
  23. package/engine/buff.d.ts +0 -3
  24. package/engine/buff.lua +64 -85
  25. package/engine/internal/ability.d.ts +3 -1
  26. package/engine/internal/ability.lua +26 -9
  27. package/engine/internal/item+owner.lua +12 -6
  28. package/engine/internal/item.d.ts +13 -15
  29. package/engine/internal/item.lua +63 -49
  30. package/engine/internal/misc/frame-coordinates.d.ts +2 -0
  31. package/engine/internal/misc/frame-coordinates.lua +21 -0
  32. package/engine/internal/misc/get-terrain-z.d.ts +2 -0
  33. package/engine/internal/misc/get-terrain-z.lua +11 -0
  34. package/engine/internal/misc/player-local-handle.d.ts +2 -0
  35. package/engine/internal/misc/player-local-handle.lua +5 -0
  36. package/engine/internal/unit/ability.d.ts +14 -14
  37. package/engine/internal/unit/ability.lua +72 -45
  38. package/engine/internal/unit/main-selected.lua +12 -27
  39. package/engine/internal/unit+ability.lua +10 -1
  40. package/engine/internal/unit-missile-launch.lua +44 -20
  41. package/engine/internal/unit.d.ts +16 -9
  42. package/engine/internal/unit.lua +102 -54
  43. package/engine/local-client.d.ts +2 -0
  44. package/engine/local-client.lua +30 -0
  45. package/engine/object-data/entry/ability-type.lua +4 -1
  46. package/engine/object-field/ability.d.ts +3 -3
  47. package/engine/object-field/ability.lua +7 -6
  48. package/engine/object-field.d.ts +8 -2
  49. package/engine/object-field.lua +184 -93
  50. package/engine/random.d.ts +9 -0
  51. package/engine/random.lua +13 -0
  52. package/engine/synchronization.d.ts +11 -0
  53. package/engine/synchronization.lua +77 -0
  54. package/engine/text-tag.d.ts +1 -1
  55. package/engine/text-tag.lua +92 -17
  56. package/net/socket.lua +1 -1
  57. package/objutil/buff.lua +1 -1
  58. package/package.json +2 -2
  59. package/patch-lualib.lua +1 -1
  60. package/utility/arrays.d.ts +1 -0
  61. package/utility/arrays.lua +8 -0
  62. package/utility/callback-array.d.ts +17 -0
  63. package/utility/callback-array.lua +61 -0
  64. package/utility/functions.d.ts +2 -0
  65. package/utility/functions.lua +7 -0
  66. package/utility/linked-set.d.ts +1 -0
  67. package/utility/linked-set.lua +19 -1
  68. package/utility/lua-maps.d.ts +11 -2
  69. package/utility/lua-maps.lua +33 -2
  70. package/utility/lua-sets.d.ts +1 -0
  71. package/utility/lua-sets.lua +4 -0
  72. package/utility/types.d.ts +3 -0
@@ -7,6 +7,7 @@ local __TS__InstanceOf = ____lualib.__TS__InstanceOf
7
7
  local ____exports = {}
8
8
  local ____ability = require("engine.internal.ability")
9
9
  local Ability = ____ability.Ability
10
+ local abilityTypeHasField = ____ability.abilityTypeHasField
10
11
  local ____object_2Dfield = require("engine.object-field")
11
12
  local ObjectArrayField = ____object_2Dfield.ObjectArrayField
12
13
  local ObjectField = ____object_2Dfield.ObjectField
@@ -29,8 +30,8 @@ __TS__ClassExtends(AbilityField, ObjectField)
29
30
  function AbilityField.prototype.getObjectDataEntryId(self, instance)
30
31
  return instance.typeId
31
32
  end
32
- function AbilityField.prototype.hasNativeFieldValue(self, instance)
33
- return instance:hasField(self.nativeField)
33
+ function AbilityField.prototype.hasNativeFieldValue(self, abilityTypeId)
34
+ return abilityTypeHasField(abilityTypeId, self.nativeField)
34
35
  end
35
36
  __TS__SetDescriptor(
36
37
  AbilityField.prototype,
@@ -197,8 +198,8 @@ __TS__ClassExtends(AbilityArrayField, ObjectArrayField)
197
198
  function AbilityArrayField.prototype.getObjectDataEntryId(self, instance)
198
199
  return instance.typeId
199
200
  end
200
- function AbilityArrayField.prototype.hasNativeFieldValue(self, instance)
201
- return instance:hasField(self.nativeField)
201
+ function AbilityArrayField.prototype.hasNativeFieldValue(self, abilityTypeId)
202
+ return abilityTypeHasField(abilityTypeId, self.nativeField)
202
203
  end
203
204
  __TS__SetDescriptor(
204
205
  AbilityArrayField.prototype,
@@ -269,8 +270,8 @@ end
269
270
  function AbilityLevelField.prototype.getObjectDataEntryId(self, instance)
270
271
  return instance.typeId
271
272
  end
272
- function AbilityLevelField.prototype.hasNativeFieldValue(self, instance)
273
- return instance:hasField(self.nativeField)
273
+ function AbilityLevelField.prototype.hasNativeFieldValue(self, abilityTypeId)
274
+ return abilityTypeHasField(abilityTypeId, self.nativeField)
274
275
  end
275
276
  __TS__SetDescriptor(
276
277
  AbilityLevelField.prototype,
@@ -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;
@@ -37,6 +37,7 @@ export type ObjectFieldValueChangeEvent<T extends ObjectField<any, any, any, any
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
39
  type ObjectFieldModifier<InstanceType extends AnyNotNil, ValueType extends number | string | boolean> = (instance: InstanceType, currentValue: ValueType, originalValue: ValueType) => ValueType;
40
+ 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,37 +203,38 @@ 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
229
+ local ____self_valueByInstance_instance_6 = self.valueByInstance[instance]
230
+ if ____self_valueByInstance_instance_6 == nil then
231
+ ____self_valueByInstance_instance_6 = defaultValue
224
232
  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
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
228
236
  end
229
- local previousValue = ____self_valueByInstance_instance_3_4
237
+ local previousValue = ____self_valueByInstance_instance_6_7
230
238
  if value ~= previousValue then
231
239
  self.valueByInstance[instance] = value
232
240
  self:invokeValueChangeEvent(instance, self, previousValue, value)
@@ -234,7 +242,7 @@ function ObjectField.prototype.setActualValue(self, instance, value)
234
242
  return true
235
243
  end
236
244
  end
237
- if not self:hasNativeFieldValue(instance) then
245
+ if not self:hasNativeFieldValue(objectDataEntryId) then
238
246
  return false
239
247
  end
240
248
  local previousValue = self:getNativeFieldValue(instance)
@@ -247,10 +255,10 @@ function ObjectField.prototype.setActualValue(self, instance, value)
247
255
  return true
248
256
  end
249
257
  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]
258
+ local ____opt_8 = self.originalValueByInstance
259
+ local originalValue = ____opt_8 and ____opt_8[instance]
260
+ local ____opt_10 = self.modifiersByInstance
261
+ local modifiers = ____opt_10 and ____opt_10[instance]
254
262
  if originalValue ~= nil then
255
263
  local value = originalValue
256
264
  if modifiers ~= nil then
@@ -315,17 +323,17 @@ function ObjectArrayField.prototype.getValue(self, entry, index)
315
323
  if defaultValueByObjectDataEntryId ~= nil then
316
324
  local value = defaultValueByObjectDataEntryId[entry.id]
317
325
  if value ~= nil then
318
- local ____temp_10
326
+ local ____temp_13
319
327
  if index == nil then
320
- ____temp_10 = value
328
+ ____temp_13 = value
321
329
  else
322
- local ____value_index_9 = value[index + 1]
323
- if ____value_index_9 == nil then
324
- ____value_index_9 = self.defaultValue
330
+ local ____value_index_12 = value[index + 1]
331
+ if ____value_index_12 == nil then
332
+ ____value_index_12 = self.defaultValue
325
333
  end
326
- ____temp_10 = ____value_index_9
334
+ ____temp_13 = ____value_index_12
327
335
  end
328
- return ____temp_10
336
+ return ____temp_13
329
337
  end
330
338
  end
331
339
  return index == nil and ({}) or self.defaultValue
@@ -335,17 +343,17 @@ function ObjectArrayField.prototype.getValue(self, entry, index)
335
343
  local defaultValue = (defaultValueByObjectDataEntryId or emptyLuaMap())[self:getObjectDataEntryId(entry)]
336
344
  if defaultValue ~= nil or self.isGlobal then
337
345
  local value = self.valueByInstance[entry] or defaultValue or emptyArray()
338
- local ____temp_12
346
+ local ____temp_15
339
347
  if index == nil then
340
- ____temp_12 = value
348
+ ____temp_15 = value
341
349
  else
342
- local ____value_index_11 = value[index + 1]
343
- if ____value_index_11 == nil then
344
- ____value_index_11 = self.defaultValue
350
+ local ____value_index_14 = value[index + 1]
351
+ if ____value_index_14 == nil then
352
+ ____value_index_14 = self.defaultValue
345
353
  end
346
- ____temp_12 = ____value_index_11
354
+ ____temp_15 = ____value_index_14
347
355
  end
348
- return ____temp_12
356
+ return ____temp_15
349
357
  end
350
358
  end
351
359
  if index ~= nil then
@@ -390,36 +398,16 @@ function ObjectLevelField.prototype.getValue(self, entry, level)
390
398
  if defaultValueByObjectDataEntryId ~= nil then
391
399
  local valueByLevel = defaultValueByObjectDataEntryId[entry.id]
392
400
  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
401
+ local ____valueByLevel_index_16 = valueByLevel[level + 1]
402
+ if ____valueByLevel_index_16 == nil then
403
+ ____valueByLevel_index_16 = self.defaultValue
396
404
  end
397
- return ____valueByLevel_index_13
405
+ return ____valueByLevel_index_16
398
406
  end
399
407
  end
400
408
  return self.defaultValue
401
409
  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
410
+ return self:getActualValue(entry, level)
423
411
  end
424
412
  function ObjectLevelField.prototype.setValue(self, entry, levelOrValue, value)
425
413
  if value == nil then
@@ -459,28 +447,129 @@ function ObjectLevelField.prototype.setValue(self, entry, levelOrValue, value)
459
447
  valueByLevel[level + 1] = value
460
448
  return true
461
449
  end
450
+ local modifiersByInstance = self.modifiersByInstance
451
+ if modifiersByInstance ~= nil then
452
+ local modifiers = modifiersByInstance[entry]
453
+ if modifiers ~= nil and modifiers.size ~= 0 then
454
+ local originalValueByLevelByInstance = self.originalValueByLevelByInstance
455
+ if originalValueByLevelByInstance == nil then
456
+ originalValueByLevelByInstance = mutableWeakLuaMap()
457
+ self.originalValueByLevelByInstance = originalValueByLevelByInstance
458
+ end
459
+ getOrPut(originalValueByLevelByInstance, entry, mutableLuaMap)[level] = value
460
+ value = self:calculateActualValue(entry, level)
461
+ end
462
+ end
463
+ return self:setActualValue(entry, level, value)
464
+ end
465
+ function ObjectLevelField.prototype.applyModifier(self, instance, modifier)
466
+ local modifiersByInstance = self.modifiersByInstance
467
+ if modifiersByInstance == nil then
468
+ modifiersByInstance = mutableWeakLuaMap()
469
+ self.modifiersByInstance = modifiersByInstance
470
+ end
471
+ if getOrPut(modifiersByInstance, instance, mutableLinkedSet):add(modifier) then
472
+ local originalValueByLevelByInstance = self.originalValueByLevelByInstance
473
+ if originalValueByLevelByInstance == nil then
474
+ originalValueByLevelByInstance = mutableWeakLuaMap()
475
+ self.originalValueByLevelByInstance = originalValueByLevelByInstance
476
+ end
477
+ local originalValueByLevel = getOrPut(originalValueByLevelByInstance, instance, mutableLuaMap)
478
+ local levelCount = self:getLevelCount(instance)
479
+ for level = 0, levelCount - 1 do
480
+ local ____originalValueByLevel_level_17 = originalValueByLevel[level]
481
+ if ____originalValueByLevel_level_17 == nil then
482
+ ____originalValueByLevel_level_17 = self:getActualValue(instance, level)
483
+ end
484
+ originalValueByLevel[level] = ____originalValueByLevel_level_17
485
+ self:setActualValue(
486
+ instance,
487
+ level,
488
+ self:calculateActualValue(instance, level)
489
+ )
490
+ end
491
+ end
492
+ end
493
+ function ObjectLevelField.prototype.removeModifier(self, instance, modifier)
494
+ local modifiersByInstance = self.modifiersByInstance
495
+ if modifiersByInstance ~= nil then
496
+ local modifiers = modifiersByInstance[instance]
497
+ if modifiers ~= nil and modifiers:remove(modifier) then
498
+ local levelCount = self:getLevelCount(instance)
499
+ for level = 0, levelCount - 1 do
500
+ self:setActualValue(
501
+ instance,
502
+ level,
503
+ self:calculateActualValue(instance, level)
504
+ )
505
+ end
506
+ return true
507
+ end
508
+ end
509
+ return false
510
+ end
511
+ function ObjectLevelField.prototype.trySetValue(self, entry, levelOrValue, value)
512
+ if value ~= nil then
513
+ if __TS__TypeOf(value) ~= __TS__TypeOf(self.defaultValue) then
514
+ return false
515
+ end
516
+ if type(levelOrValue) ~= "number" then
517
+ return false
518
+ end
519
+ return self:setValue(entry, levelOrValue, value)
520
+ end
521
+ if __TS__TypeOf(levelOrValue) ~= __TS__TypeOf(self.defaultValue) then
522
+ return false
523
+ end
524
+ return self:setValue(entry, levelOrValue)
525
+ end
526
+ function ObjectLevelField.prototype.getActualValue(self, instance, level)
527
+ local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
528
+ if defaultValueByObjectDataEntryId ~= nil or self.isGlobal then
529
+ local defaultValueByLevel = (defaultValueByObjectDataEntryId or emptyLuaMap())[self:getObjectDataEntryId(instance)]
530
+ if defaultValueByLevel ~= nil or self.isGlobal then
531
+ local ____opt_18 = self.valueByInstance[instance]
532
+ local ____temp_20 = ____opt_18 and ____opt_18[level + 1]
533
+ if ____temp_20 == nil then
534
+ ____temp_20 = (defaultValueByLevel or emptyArray())[level + 1]
535
+ end
536
+ local ____temp_20_21 = ____temp_20
537
+ if ____temp_20_21 == nil then
538
+ ____temp_20_21 = self.defaultValue
539
+ end
540
+ return ____temp_20_21
541
+ end
542
+ end
543
+ local ____temp_22 = self:getNativeFieldValue(instance, level)
544
+ if ____temp_22 == nil then
545
+ ____temp_22 = self.defaultValue
546
+ end
547
+ return ____temp_22
548
+ end
549
+ function ObjectLevelField.prototype.setActualValue(self, instance, level, value)
462
550
  local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
551
+ local objectDataEntryId = self:getObjectDataEntryId(instance)
463
552
  if defaultValueByObjectDataEntryId ~= nil or self.isGlobal then
464
- local defaultValueByLevel = (defaultValueByObjectDataEntryId or emptyLuaMap())[self:getObjectDataEntryId(entry)]
553
+ local defaultValueByLevel = (defaultValueByObjectDataEntryId or emptyLuaMap())[objectDataEntryId]
465
554
  if defaultValueByLevel ~= nil or self.isGlobal then
466
- local valueByLevel = self.valueByInstance[entry]
555
+ local valueByLevel = self.valueByInstance[instance]
467
556
  if valueByLevel == nil then
468
557
  valueByLevel = {}
469
- self.valueByInstance[entry] = valueByLevel
558
+ self.valueByInstance[instance] = valueByLevel
470
559
  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]
560
+ local ____valueByLevel_index_23 = valueByLevel[level + 1]
561
+ if ____valueByLevel_index_23 == nil then
562
+ ____valueByLevel_index_23 = (defaultValueByLevel or emptyArray())[level + 1]
474
563
  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
564
+ local ____valueByLevel_index_23_24 = ____valueByLevel_index_23
565
+ if ____valueByLevel_index_23_24 == nil then
566
+ ____valueByLevel_index_23_24 = self.defaultValue
478
567
  end
479
- local previousValue = ____valueByLevel_index_19_20
568
+ local previousValue = ____valueByLevel_index_23_24
480
569
  if value ~= previousValue then
481
570
  valueByLevel[level + 1] = value
482
571
  self:invokeValueChangeEvent(
483
- entry,
572
+ instance,
484
573
  self,
485
574
  level,
486
575
  previousValue,
@@ -490,16 +579,16 @@ function ObjectLevelField.prototype.setValue(self, entry, levelOrValue, value)
490
579
  return true
491
580
  end
492
581
  end
493
- if not self:hasNativeFieldValue(entry) then
582
+ if not self:hasNativeFieldValue(objectDataEntryId) then
494
583
  return false
495
584
  end
496
- local previousValue = self:getNativeFieldValue(entry, level)
585
+ local previousValue = self:getNativeFieldValue(instance, level)
497
586
  if value ~= previousValue then
498
- if not self:setNativeFieldValue(entry, level, value) then
587
+ if not self:setNativeFieldValue(instance, level, value) then
499
588
  return false
500
589
  end
501
590
  self:invokeValueChangeEvent(
502
- entry,
591
+ instance,
503
592
  self,
504
593
  level,
505
594
  previousValue,
@@ -508,20 +597,22 @@ function ObjectLevelField.prototype.setValue(self, entry, levelOrValue, value)
508
597
  end
509
598
  return true
510
599
  end
511
- function ObjectLevelField.prototype.trySetValue(self, entry, levelOrValue, value)
512
- if value ~= nil then
513
- if __TS__TypeOf(value) ~= __TS__TypeOf(self.defaultValue) then
514
- return false
515
- end
516
- if type(levelOrValue) ~= "number" then
517
- return false
600
+ function ObjectLevelField.prototype.calculateActualValue(self, instance, level)
601
+ local ____opt_27 = self.originalValueByLevelByInstance
602
+ local ____opt_25 = ____opt_27 and ____opt_27[instance]
603
+ local originalValue = ____opt_25 and ____opt_25[level]
604
+ local ____opt_29 = self.modifiersByInstance
605
+ local modifiers = ____opt_29 and ____opt_29[instance]
606
+ if originalValue ~= nil then
607
+ local value = originalValue
608
+ if modifiers ~= nil then
609
+ for modifier in pairs(modifiers) do
610
+ value = modifier(instance, level, value, originalValue)
611
+ end
518
612
  end
519
- return self:setValue(entry, levelOrValue, value)
520
- end
521
- if __TS__TypeOf(levelOrValue) ~= __TS__TypeOf(self.defaultValue) then
522
- return false
613
+ return value
523
614
  end
524
- return self:setValue(entry, levelOrValue)
615
+ return self.defaultValue
525
616
  end
526
617
  function ObjectLevelField.prototype.invokeValueChangeEvent(self, ...)
527
618
  self:invokeValueChangeEventRecursive(
@@ -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
@@ -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
@@ -23,7 +23,7 @@ declare const enum TextTagPropertyKey {
23
23
  Y = 107
24
24
  }
25
25
  export declare class TextTag extends AbstractDestroyable {
26
- private readonly [TextTagPropertyKey.HANDLE];
26
+ private [TextTagPropertyKey.HANDLE]?;
27
27
  private [TextTagPropertyKey.CONFIGURATION]?;
28
28
  private [TextTagPropertyKey.TEXT]?;
29
29
  private [TextTagPropertyKey.FONT_SIZE]?;