warscript 0.0.1-dev.5dbd5af → 0.0.1-dev.5e33506

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 (112) hide show
  1. package/attributes.d.ts +6 -0
  2. package/attributes.lua +17 -1
  3. package/core/types/frame.lua +24 -21
  4. package/core/types/player.d.ts +16 -0
  5. package/core/types/player.lua +60 -15
  6. package/core/types/playerCamera.d.ts +2 -0
  7. package/core/types/playerCamera.lua +123 -5
  8. package/core/types/tileCell.d.ts +11 -1
  9. package/core/types/tileCell.lua +97 -0
  10. package/core/types/timer.d.ts +3 -1
  11. package/core/types/timer.lua +27 -2
  12. package/decl/native.d.ts +6 -4
  13. package/destroyable.d.ts +1 -0
  14. package/destroyable.lua +9 -0
  15. package/engine/behavior.d.ts +14 -1
  16. package/engine/behavior.lua +230 -70
  17. package/engine/behaviour/ability/apply-buff.lua +5 -5
  18. package/engine/behaviour/ability/damage.d.ts +4 -2
  19. package/engine/behaviour/ability/damage.lua +24 -36
  20. package/engine/behaviour/ability/emulate-impact.d.ts +1 -1
  21. package/engine/behaviour/ability/emulate-impact.lua +11 -3
  22. package/engine/behaviour/ability/remove-buffs.d.ts +9 -0
  23. package/engine/behaviour/ability/remove-buffs.lua +21 -0
  24. package/engine/behaviour/ability/restore-mana.d.ts +1 -1
  25. package/engine/behaviour/ability/restore-mana.lua +6 -6
  26. package/engine/behaviour/ability.d.ts +2 -1
  27. package/engine/behaviour/ability.lua +10 -18
  28. package/engine/behaviour/unit/stun-immunity.d.ts +11 -5
  29. package/engine/behaviour/unit/stun-immunity.lua +53 -28
  30. package/engine/behaviour/unit.d.ts +39 -3
  31. package/engine/behaviour/unit.lua +259 -6
  32. package/engine/buff.d.ts +14 -6
  33. package/engine/buff.lua +145 -97
  34. package/engine/internal/ability.d.ts +7 -1
  35. package/engine/internal/ability.lua +49 -9
  36. package/engine/internal/item/ability.lua +63 -11
  37. package/engine/internal/item+owner.lua +12 -6
  38. package/engine/internal/item.d.ts +16 -16
  39. package/engine/internal/item.lua +135 -49
  40. package/engine/internal/misc/damage-metadata-by-target.d.ts +2 -0
  41. package/engine/internal/misc/damage-metadata-by-target.lua +5 -0
  42. package/engine/internal/misc/frame-coordinates.d.ts +2 -0
  43. package/engine/internal/misc/frame-coordinates.lua +21 -0
  44. package/engine/internal/misc/get-terrain-z.d.ts +2 -0
  45. package/engine/internal/misc/get-terrain-z.lua +11 -0
  46. package/engine/internal/misc/player-local-handle.d.ts +2 -0
  47. package/engine/internal/misc/player-local-handle.lua +5 -0
  48. package/engine/internal/unit/ability.d.ts +35 -0
  49. package/engine/internal/unit/ability.lua +98 -9
  50. package/engine/internal/unit/allowed-targets.d.ts +1 -1
  51. package/engine/internal/unit/allowed-targets.lua +9 -1
  52. package/engine/internal/unit/fly-height.d.ts +7 -0
  53. package/engine/internal/unit/fly-height.lua +20 -0
  54. package/engine/internal/unit/main-selected.lua +12 -27
  55. package/engine/internal/unit/order.d.ts +20 -0
  56. package/engine/internal/unit/order.lua +136 -0
  57. package/engine/internal/unit/scale.d.ts +7 -0
  58. package/engine/internal/unit/scale.lua +20 -0
  59. package/engine/internal/unit+ability.lua +10 -1
  60. package/engine/internal/unit+damage.d.ts +1 -1
  61. package/engine/internal/unit+damage.lua +6 -1
  62. package/engine/internal/unit-missile-launch.lua +45 -14
  63. package/engine/internal/unit.d.ts +31 -18
  64. package/engine/internal/unit.lua +289 -165
  65. package/engine/local-client.d.ts +2 -0
  66. package/engine/local-client.lua +30 -0
  67. package/engine/object-data/auxiliary/armor-type.d.ts +11 -0
  68. package/engine/object-data/auxiliary/armor-type.lua +46 -0
  69. package/engine/object-data/entry/ability-type/permanent-invisibility.d.ts +8 -0
  70. package/engine/object-data/entry/ability-type/permanent-invisibility.lua +26 -0
  71. package/engine/object-data/entry/ability-type.lua +5 -4
  72. package/engine/object-data/entry/destructible-type.d.ts +27 -1
  73. package/engine/object-data/entry/destructible-type.lua +155 -0
  74. package/engine/object-data/entry/unit-type.d.ts +15 -2
  75. package/engine/object-data/entry/unit-type.lua +135 -33
  76. package/engine/object-field/ability.d.ts +3 -3
  77. package/engine/object-field/ability.lua +7 -6
  78. package/engine/object-field/unit.d.ts +24 -1
  79. package/engine/object-field/unit.lua +91 -0
  80. package/engine/object-field.d.ts +15 -6
  81. package/engine/object-field.lua +258 -123
  82. package/engine/random.d.ts +9 -0
  83. package/engine/random.lua +13 -0
  84. package/engine/standard/fields/ability.d.ts +2 -2
  85. package/engine/standard/fields/ability.lua +2 -2
  86. package/engine/standard/fields/unit.d.ts +6 -0
  87. package/engine/standard/fields/unit.lua +11 -0
  88. package/engine/synchronization.d.ts +11 -0
  89. package/engine/synchronization.lua +77 -0
  90. package/engine/text-tag.d.ts +36 -2
  91. package/engine/text-tag.lua +250 -10
  92. package/engine/unit.d.ts +3 -0
  93. package/engine/unit.lua +3 -0
  94. package/net/socket.lua +1 -1
  95. package/objutil/buff.lua +1 -1
  96. package/package.json +2 -2
  97. package/patch-lualib.lua +1 -1
  98. package/utility/arrays.d.ts +2 -0
  99. package/utility/arrays.lua +11 -0
  100. package/utility/callback-array.d.ts +17 -0
  101. package/utility/callback-array.lua +61 -0
  102. package/utility/functions.d.ts +8 -0
  103. package/utility/functions.lua +13 -0
  104. package/utility/linked-set.d.ts +1 -0
  105. package/utility/linked-set.lua +19 -1
  106. package/utility/lua-maps.d.ts +12 -2
  107. package/utility/lua-maps.lua +37 -2
  108. package/utility/lua-sets.d.ts +1 -0
  109. package/utility/lua-sets.lua +4 -0
  110. package/utility/types.d.ts +3 -0
  111. package/core/types/order.d.ts +0 -25
  112. package/core/types/order.lua +0 -55
@@ -23,8 +23,12 @@ local ObjectDataEntryIdGenerator = ____object_2Ddata_2Dentry_2Did_2Dgenerator.Ob
23
23
  local ____linked_2Dset = require("utility.linked-set")
24
24
  local mutableLinkedSet = ____linked_2Dset.mutableLinkedSet
25
25
  local ____lua_2Dmaps = require("utility.lua-maps")
26
+ local emptyLuaMap = ____lua_2Dmaps.emptyLuaMap
26
27
  local getOrPut = ____lua_2Dmaps.getOrPut
28
+ local mutableLuaMap = ____lua_2Dmaps.mutableLuaMap
27
29
  local mutableWeakLuaMap = ____lua_2Dmaps.mutableWeakLuaMap
30
+ local ____arrays = require("utility.arrays")
31
+ local emptyArray = ____arrays.emptyArray
28
32
  local compiletimeDefaultValueByObjectDataEntryIdByObjectFieldId = {}
29
33
  local defaultValueByObjectDataEntryIdByObjectFieldId = postcompile(function() return compiletimeDefaultValueByObjectDataEntryIdByObjectFieldId end)
30
34
  local objectFieldById = {}
@@ -34,7 +38,11 @@ local idGenerator = __TS__New(
34
38
  )
35
39
  local ObjectFieldBase = __TS__Class()
36
40
  ObjectFieldBase.name = "ObjectFieldBase"
37
- function ObjectFieldBase.prototype.____constructor(self, id)
41
+ function ObjectFieldBase.prototype.____constructor(self, id, isGlobal)
42
+ if isGlobal == nil then
43
+ isGlobal = false
44
+ end
45
+ self.isGlobal = isGlobal
38
46
  self.valueByInstance = setmetatable({}, {__mode = "k"})
39
47
  if objectFieldById[id] ~= nil then
40
48
  error(
@@ -51,14 +59,15 @@ end
51
59
  function ObjectFieldBase.prototype.supports(self, instance)
52
60
  return __TS__InstanceOf(instance, self.instanceClass)
53
61
  end
54
- function ObjectFieldBase.prototype.hasValue(self, instance)
62
+ function ObjectFieldBase.prototype.hasValue(self, objectDataEntryId)
55
63
  local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
56
- return defaultValueByObjectDataEntryId ~= nil and defaultValueByObjectDataEntryId[self:getObjectDataEntryId(instance)] ~= nil or self:hasNativeFieldValue(instance)
64
+ return self.isGlobal or defaultValueByObjectDataEntryId ~= nil and defaultValueByObjectDataEntryId[objectDataEntryId] ~= nil or self:hasNativeFieldValue(objectDataEntryId)
57
65
  end
58
- function ObjectFieldBase.create(self, id)
66
+ function ObjectFieldBase.create(self, id, isGlobal)
59
67
  return __TS__New(
60
68
  self,
61
- id or idGenerator:next()
69
+ id or idGenerator:next(),
70
+ isGlobal
62
71
  )
63
72
  end
64
73
  function ObjectFieldBase.of(self, id)
@@ -91,7 +100,7 @@ function ObjectField.prototype.getValue(self, entry, includeModifiers)
91
100
  end
92
101
  return self.defaultValue
93
102
  end
94
- if includeModifiers == false then
103
+ if not includeModifiers then
95
104
  local originalValueByInstance = self.originalValueByInstance
96
105
  if originalValueByInstance ~= nil then
97
106
  local originalValue = originalValueByInstance[entry]
@@ -115,6 +124,7 @@ function ObjectField.prototype.setValue(self, entry, value)
115
124
  defaultValueByObjectDataEntryId[entry.id] = value
116
125
  return true
117
126
  end
127
+ local previousOriginalValue
118
128
  local modifiersByInstance = self.modifiersByInstance
119
129
  if modifiersByInstance ~= nil then
120
130
  local modifiers = modifiersByInstance[entry]
@@ -124,11 +134,34 @@ function ObjectField.prototype.setValue(self, entry, value)
124
134
  originalValueByInstance = mutableWeakLuaMap()
125
135
  self.originalValueByInstance = originalValueByInstance
126
136
  end
137
+ previousOriginalValue = originalValueByInstance[entry]
138
+ if value == previousOriginalValue then
139
+ return true
140
+ end
127
141
  originalValueByInstance[entry] = value
128
142
  value = self:calculateActualValue(entry)
129
143
  end
130
144
  end
131
- 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
132
165
  end
133
166
  function ObjectField.prototype.applyModifier(self, instance, modifier)
134
167
  local modifiersByInstance = self.modifiersByInstance
@@ -142,7 +175,13 @@ function ObjectField.prototype.applyModifier(self, instance, modifier)
142
175
  originalValueByInstance = mutableWeakLuaMap()
143
176
  self.originalValueByInstance = originalValueByInstance
144
177
  end
145
- 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
146
185
  self:setActualValue(
147
186
  instance,
148
187
  self:calculateActualValue(instance)
@@ -185,60 +224,59 @@ function ObjectField.prototype.trySetValue(self, entry, value)
185
224
  end
186
225
  function ObjectField.prototype.getActualValue(self, instance)
187
226
  local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
188
- if defaultValueByObjectDataEntryId ~= nil then
189
- local defaultValue = defaultValueByObjectDataEntryId[self:getObjectDataEntryId(instance)]
190
- if defaultValue ~= nil then
191
- local ____self_valueByInstance_instance_0 = self.valueByInstance[instance]
192
- if ____self_valueByInstance_instance_0 == nil then
193
- ____self_valueByInstance_instance_0 = defaultValue
227
+ if defaultValueByObjectDataEntryId ~= nil or self.isGlobal then
228
+ local defaultValue = (defaultValueByObjectDataEntryId or emptyLuaMap())[self:getObjectDataEntryId(instance)]
229
+ if defaultValue ~= nil or self.isGlobal then
230
+ local ____self_valueByInstance_instance_6 = self.valueByInstance[instance]
231
+ if ____self_valueByInstance_instance_6 == nil then
232
+ ____self_valueByInstance_instance_6 = defaultValue
194
233
  end
195
- return ____self_valueByInstance_instance_0
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
237
+ end
238
+ return ____self_valueByInstance_instance_6_7
196
239
  end
197
240
  end
198
- local ____temp_1 = self:getNativeFieldValue(instance)
199
- if ____temp_1 == nil then
200
- ____temp_1 = self.defaultValue
241
+ local ____temp_8 = self:getNativeFieldValue(instance)
242
+ if ____temp_8 == nil then
243
+ ____temp_8 = self.defaultValue
201
244
  end
202
- return ____temp_1
245
+ return ____temp_8
203
246
  end
204
247
  function ObjectField.prototype.setActualValue(self, instance, value)
205
248
  local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
206
- if defaultValueByObjectDataEntryId ~= nil then
207
- local defaultValue = defaultValueByObjectDataEntryId[self:getObjectDataEntryId(instance)]
208
- if defaultValue ~= nil then
209
- local ____self_valueByInstance_instance_2 = self.valueByInstance[instance]
210
- if ____self_valueByInstance_instance_2 == nil then
211
- ____self_valueByInstance_instance_2 = defaultValue
212
- end
213
- local ____self_valueByInstance_instance_2_3 = ____self_valueByInstance_instance_2
214
- if ____self_valueByInstance_instance_2_3 == nil then
215
- ____self_valueByInstance_instance_2_3 = self.defaultValue
249
+ local objectDataEntryId = self:getObjectDataEntryId(instance)
250
+ if defaultValueByObjectDataEntryId ~= nil or self.isGlobal then
251
+ local defaultValue = (defaultValueByObjectDataEntryId or emptyLuaMap())[objectDataEntryId]
252
+ if defaultValue ~= nil or self.isGlobal then
253
+ local ____self_valueByInstance_instance_9 = self.valueByInstance[instance]
254
+ if ____self_valueByInstance_instance_9 == nil then
255
+ ____self_valueByInstance_instance_9 = defaultValue
216
256
  end
217
- local previousValue = ____self_valueByInstance_instance_2_3
218
- if value ~= previousValue then
219
- self.valueByInstance[instance] = value
220
- self:invokeValueChangeEvent(instance, self, previousValue, value)
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
221
260
  end
222
- return true
261
+ local previousValue = ____self_valueByInstance_instance_9_10
262
+ self.valueByInstance[instance] = value
263
+ return previousValue
223
264
  end
224
265
  end
225
- if not self:hasNativeFieldValue(instance) then
226
- return false
266
+ if not self:hasNativeFieldValue(objectDataEntryId) then
267
+ return nil
227
268
  end
228
269
  local previousValue = self:getNativeFieldValue(instance)
229
- if value ~= previousValue then
230
- if not self:setNativeFieldValue(instance, value) then
231
- return false
232
- end
233
- self:invokeValueChangeEvent(instance, self, previousValue, value)
270
+ if value ~= previousValue and not self:setNativeFieldValue(instance, value) then
271
+ return nil
234
272
  end
235
- return true
273
+ return previousValue
236
274
  end
237
275
  function ObjectField.prototype.calculateActualValue(self, instance)
238
- local ____opt_4 = self.originalValueByInstance
239
- local originalValue = ____opt_4 and ____opt_4[instance]
240
- local ____opt_6 = self.modifiersByInstance
241
- local modifiers = ____opt_6 and ____opt_6[instance]
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]
242
280
  if originalValue ~= nil then
243
281
  local value = originalValue
244
282
  if modifiers ~= nil then
@@ -303,37 +341,37 @@ function ObjectArrayField.prototype.getValue(self, entry, index)
303
341
  if defaultValueByObjectDataEntryId ~= nil then
304
342
  local value = defaultValueByObjectDataEntryId[entry.id]
305
343
  if value ~= nil then
306
- local ____temp_9
344
+ local ____temp_16
307
345
  if index == nil then
308
- ____temp_9 = value
346
+ ____temp_16 = value
309
347
  else
310
- local ____value_index_8 = value[index + 1]
311
- if ____value_index_8 == nil then
312
- ____value_index_8 = self.defaultValue
348
+ local ____value_index_15 = value[index + 1]
349
+ if ____value_index_15 == nil then
350
+ ____value_index_15 = self.defaultValue
313
351
  end
314
- ____temp_9 = ____value_index_8
352
+ ____temp_16 = ____value_index_15
315
353
  end
316
- return ____temp_9
354
+ return ____temp_16
317
355
  end
318
356
  end
319
357
  return index == nil and ({}) or self.defaultValue
320
358
  end
321
359
  local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
322
- if defaultValueByObjectDataEntryId ~= nil then
323
- local defaultValue = defaultValueByObjectDataEntryId[self:getObjectDataEntryId(entry)]
324
- if defaultValue ~= nil then
325
- local value = self.valueByInstance[entry] or defaultValue
326
- local ____temp_11
360
+ if defaultValueByObjectDataEntryId ~= nil or self.isGlobal then
361
+ local defaultValue = (defaultValueByObjectDataEntryId or emptyLuaMap())[self:getObjectDataEntryId(entry)]
362
+ if defaultValue ~= nil or self.isGlobal then
363
+ local value = self.valueByInstance[entry] or defaultValue or emptyArray()
364
+ local ____temp_18
327
365
  if index == nil then
328
- ____temp_11 = value
366
+ ____temp_18 = value
329
367
  else
330
- local ____value_index_10 = value[index + 1]
331
- if ____value_index_10 == nil then
332
- ____value_index_10 = self.defaultValue
368
+ local ____value_index_17 = value[index + 1]
369
+ if ____value_index_17 == nil then
370
+ ____value_index_17 = self.defaultValue
333
371
  end
334
- ____temp_11 = ____value_index_10
372
+ ____temp_18 = ____value_index_17
335
373
  end
336
- return ____temp_11
374
+ return ____temp_18
337
375
  end
338
376
  end
339
377
  if index ~= nil then
@@ -378,36 +416,22 @@ function ObjectLevelField.prototype.getValue(self, entry, level)
378
416
  if defaultValueByObjectDataEntryId ~= nil then
379
417
  local valueByLevel = defaultValueByObjectDataEntryId[entry.id]
380
418
  if valueByLevel ~= nil then
381
- local ____valueByLevel_index_12 = valueByLevel[level + 1]
382
- if ____valueByLevel_index_12 == nil then
383
- ____valueByLevel_index_12 = self.defaultValue
419
+ local ____valueByLevel_index_19 = valueByLevel[level + 1]
420
+ if ____valueByLevel_index_19 == nil then
421
+ ____valueByLevel_index_19 = self.defaultValue
384
422
  end
385
- return ____valueByLevel_index_12
423
+ return ____valueByLevel_index_19
386
424
  end
387
425
  end
388
426
  return self.defaultValue
389
427
  end
390
- local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
391
- if defaultValueByObjectDataEntryId ~= nil then
392
- local defaultValueByLevel = defaultValueByObjectDataEntryId[self:getObjectDataEntryId(entry)]
393
- if defaultValueByLevel ~= nil then
394
- local ____opt_13 = self.valueByInstance[entry]
395
- local ____temp_15 = ____opt_13 and ____opt_13[level + 1]
396
- if ____temp_15 == nil then
397
- ____temp_15 = defaultValueByLevel[level + 1]
398
- end
399
- local ____temp_15_16 = ____temp_15
400
- if ____temp_15_16 == nil then
401
- ____temp_15_16 = self.defaultValue
402
- end
403
- return ____temp_15_16
404
- end
405
- end
406
- local ____temp_17 = self:getNativeFieldValue(entry, level)
407
- if ____temp_17 == nil then
408
- ____temp_17 = self.defaultValue
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
409
433
  end
410
- return ____temp_17
434
+ return self:getActualValue(entry, level)
411
435
  end
412
436
  function ObjectLevelField.prototype.setValue(self, entry, levelOrValue, value)
413
437
  if value == nil then
@@ -447,55 +471,93 @@ function ObjectLevelField.prototype.setValue(self, entry, levelOrValue, value)
447
471
  valueByLevel[level + 1] = value
448
472
  return true
449
473
  end
450
- local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
451
- if defaultValueByObjectDataEntryId ~= nil then
452
- local defaultValueByLevel = defaultValueByObjectDataEntryId[self:getObjectDataEntryId(entry)]
453
- if defaultValueByLevel ~= nil then
454
- local valueByLevel = self.valueByInstance[entry]
455
- if valueByLevel == nil then
456
- valueByLevel = {}
457
- self.valueByInstance[entry] = valueByLevel
458
- end
459
- local ____valueByLevel_index_18 = valueByLevel[level + 1]
460
- if ____valueByLevel_index_18 == nil then
461
- ____valueByLevel_index_18 = defaultValueByLevel[level + 1]
462
- end
463
- local ____valueByLevel_index_18_19 = ____valueByLevel_index_18
464
- if ____valueByLevel_index_18_19 == nil then
465
- ____valueByLevel_index_18_19 = self.defaultValue
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
466
483
  end
467
- local previousValue = ____valueByLevel_index_18_19
468
- if value ~= previousValue then
469
- valueByLevel[level + 1] = value
470
- self:invokeValueChangeEvent(
471
- entry,
472
- self,
473
- level,
474
- previousValue,
475
- value
476
- )
484
+ local originalValueByLevel = getOrPut(originalValueByLevelByInstance, entry, mutableLuaMap)
485
+ previousOriginalValue = originalValueByLevel[level]
486
+ if value == previousOriginalValue then
487
+ return true
477
488
  end
478
- return true
489
+ originalValueByLevel[level] = value
490
+ value = self:calculateActualValue(entry, level)
479
491
  end
480
492
  end
481
- if not self:hasNativeFieldValue(entry) then
493
+ local previousValue = self:setActualValue(entry, level, value)
494
+ if previousValue == nil then
482
495
  return false
483
496
  end
484
- local previousValue = self:getNativeFieldValue(entry, level)
485
- if value ~= previousValue then
486
- if not self:setNativeFieldValue(entry, level, value) then
487
- return false
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
488
503
  end
489
- self:invokeValueChangeEvent(
490
- entry,
504
+ ____self_invokeValueChangeEvent_26(
505
+ self,
506
+ ____entry_25,
491
507
  self,
492
508
  level,
493
- previousValue,
509
+ ____previousOriginalValue_24,
494
510
  value
495
511
  )
496
512
  end
497
513
  return true
498
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
499
561
  function ObjectLevelField.prototype.trySetValue(self, entry, levelOrValue, value)
500
562
  if value ~= nil then
501
563
  if __TS__TypeOf(value) ~= __TS__TypeOf(self.defaultValue) then
@@ -511,6 +573,79 @@ function ObjectLevelField.prototype.trySetValue(self, entry, levelOrValue, value
511
573
  end
512
574
  return self:setValue(entry, levelOrValue)
513
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
514
649
  function ObjectLevelField.prototype.invokeValueChangeEvent(self, ...)
515
650
  self:invokeValueChangeEventRecursive(
516
651
  getClass(self),
@@ -1,4 +1,5 @@
1
1
  /** @noSelfInFile */
2
+ import { ReadonlyNonEmptyArray } from "../utility/types";
2
3
  export declare const randomAngle: () => number;
3
4
  export declare const randomInteger: {
4
5
  (upperBound?: number): number;
@@ -9,3 +10,11 @@ export declare const randomFloat: {
9
10
  (lowerBound: number, upperBound: number): number;
10
11
  };
11
12
  export declare const randomXY: (centerX: number, centerY: number, range: number) => LuaMultiReturn<[x: number, y: number]>;
13
+ export declare const randomElement: {
14
+ <T>(array: ReadonlyNonEmptyArray<T>): T;
15
+ <T>(array: ReadonlyArray<T>): T | undefined;
16
+ };
17
+ export declare const random: {
18
+ <T>(element: T, ...elements: T[]): T;
19
+ <T>(...elements: T[]): T | undefined;
20
+ };
package/engine/random.lua CHANGED
@@ -4,6 +4,7 @@ local MAXIMUM_INTEGER = ____math.MAXIMUM_INTEGER
4
4
  local PI = ____math.PI
5
5
  local getRandomInt = GetRandomInt
6
6
  local getRandomReal = GetRandomReal
7
+ local select = _G.select
7
8
  local cos = math.cos
8
9
  local sin = math.sin
9
10
  local sqrt = math.sqrt
@@ -15,4 +16,16 @@ ____exports.randomXY = function(centerX, centerY, range)
15
16
  local t = getRandomReal(0, 1) * 2 * PI
16
17
  return centerX + r * cos(t), centerY + r * sin(t)
17
18
  end
19
+ ____exports.randomElement = function(array)
20
+ return array[getRandomInt(1, #array)]
21
+ end
22
+ ____exports.random = function(...)
23
+ return (select(
24
+ getRandomInt(
25
+ 1,
26
+ select("#", ...)
27
+ ),
28
+ ...
29
+ ))
30
+ end
18
31
  return ____exports
@@ -376,8 +376,8 @@ export declare const INVISIBILITY_TRANSITION_TIME_ABILITY_FLOAT_LEVEL_FIELD: Abi
376
376
  export declare const ACTIVATION_RADIUS_ABILITY_FLOAT_LEVEL_FIELD: AbilityFloatLevelField & symbol;
377
377
  export declare const AMOUNT_REGENERATED_ABILITY_FLOAT_LEVEL_FIELD: AbilityFloatLevelField & symbol;
378
378
  export declare const DAMAGE_PER_SECOND_POI1_ABILITY_FLOAT_LEVEL_FIELD: AbilityFloatLevelField & symbol;
379
- export declare const ATTACK_SPEED_FACTOR_POI2_ABILITY_FLOAT_LEVEL_FIELD: AbilityFloatLevelField & symbol;
380
- export declare const MOVEMENT_SPEED_FACTOR_POI3_ABILITY_FLOAT_LEVEL_FIELD: AbilityFloatLevelField & symbol;
379
+ export declare const MOVEMENT_SPEED_FACTOR_POI2_ABILITY_FLOAT_LEVEL_FIELD: AbilityFloatLevelField & symbol;
380
+ export declare const ATTACK_SPEED_FACTOR_POI3_ABILITY_FLOAT_LEVEL_FIELD: AbilityFloatLevelField & symbol;
381
381
  export declare const EXTRA_DAMAGE_POA1_ABILITY_FLOAT_LEVEL_FIELD: AbilityFloatLevelField & symbol;
382
382
  export declare const DAMAGE_PER_SECOND_POA2_ABILITY_FLOAT_LEVEL_FIELD: AbilityFloatLevelField & symbol;
383
383
  export declare const ATTACK_SPEED_FACTOR_POA3_ABILITY_FLOAT_LEVEL_FIELD: AbilityFloatLevelField & symbol;
@@ -387,8 +387,8 @@ ____exports.INVISIBILITY_TRANSITION_TIME_ABILITY_FLOAT_LEVEL_FIELD = AbilityFloa
387
387
  ____exports.ACTIVATION_RADIUS_ABILITY_FLOAT_LEVEL_FIELD = AbilityFloatLevelField:create(fourCC("Neu1"))
388
388
  ____exports.AMOUNT_REGENERATED_ABILITY_FLOAT_LEVEL_FIELD = AbilityFloatLevelField:create(fourCC("Arm1"))
389
389
  ____exports.DAMAGE_PER_SECOND_POI1_ABILITY_FLOAT_LEVEL_FIELD = AbilityFloatLevelField:create(fourCC("Poi1"))
390
- ____exports.ATTACK_SPEED_FACTOR_POI2_ABILITY_FLOAT_LEVEL_FIELD = AbilityFloatLevelField:create(fourCC("Poi2"))
391
- ____exports.MOVEMENT_SPEED_FACTOR_POI3_ABILITY_FLOAT_LEVEL_FIELD = AbilityFloatLevelField:create(fourCC("Poi3"))
390
+ ____exports.MOVEMENT_SPEED_FACTOR_POI2_ABILITY_FLOAT_LEVEL_FIELD = AbilityFloatLevelField:create(fourCC("Poi2"))
391
+ ____exports.ATTACK_SPEED_FACTOR_POI3_ABILITY_FLOAT_LEVEL_FIELD = AbilityFloatLevelField:create(fourCC("Poi3"))
392
392
  ____exports.EXTRA_DAMAGE_POA1_ABILITY_FLOAT_LEVEL_FIELD = AbilityFloatLevelField:create(fourCC("Poa1"))
393
393
  ____exports.DAMAGE_PER_SECOND_POA2_ABILITY_FLOAT_LEVEL_FIELD = AbilityFloatLevelField:create(fourCC("Poa2"))
394
394
  ____exports.ATTACK_SPEED_FACTOR_POA3_ABILITY_FLOAT_LEVEL_FIELD = AbilityFloatLevelField:create(fourCC("Poa3"))
@@ -0,0 +1,6 @@
1
+ /** @noSelfInFile */
2
+ import { UnitClassificationsField, UnitFlyHeightField, UnitPropulsionWindowField, UnitScalingValueField } from "../../object-field/unit";
3
+ export declare const PROPULSION_WINDOW_UNIT_FLOAT_FIELD: UnitPropulsionWindowField & symbol;
4
+ export declare const UNIT_CLASSIFICATIONS_FIELD: UnitClassificationsField & symbol;
5
+ export declare const FLY_HEIGHT_UNIT_FLOAT_FIELD: UnitFlyHeightField & symbol;
6
+ export declare const SCALING_VALUE_UNIT_FLOAT_FIELD: UnitScalingValueField & symbol;
@@ -0,0 +1,11 @@
1
+ local ____exports = {}
2
+ local ____unit = require("engine.object-field.unit")
3
+ local UnitClassificationsField = ____unit.UnitClassificationsField
4
+ local UnitFlyHeightField = ____unit.UnitFlyHeightField
5
+ local UnitPropulsionWindowField = ____unit.UnitPropulsionWindowField
6
+ local UnitScalingValueField = ____unit.UnitScalingValueField
7
+ ____exports.PROPULSION_WINDOW_UNIT_FLOAT_FIELD = UnitPropulsionWindowField:create(fourCC("urpw"))
8
+ ____exports.UNIT_CLASSIFICATIONS_FIELD = UnitClassificationsField:create(fourCC("utyp"))
9
+ ____exports.FLY_HEIGHT_UNIT_FLOAT_FIELD = UnitFlyHeightField:create(fourCC("ufyh"))
10
+ ____exports.SCALING_VALUE_UNIT_FLOAT_FIELD = UnitScalingValueField:create(fourCC("usca"))
11
+ return ____exports
@@ -0,0 +1,11 @@
1
+ /** @noSelfInFile */
2
+ import { Player } from "../core/types/player";
3
+ import { Event } from "../event";
4
+ export declare const synchronizer: <T, K extends number>(getSyncId: (object: T) => K, getObject: (syncId: K) => T | undefined) => ((player: Player, object: T | undefined) => Promise<T | undefined>);
5
+ export declare class ObjectBus<T, K extends number> {
6
+ private readonly getSyncId;
7
+ readonly event: Event<[Player, T | undefined]>;
8
+ private readonly syncSlider;
9
+ constructor(getSyncId: (object: T) => K, getObject: (syncId: K) => T | undefined);
10
+ send(object: T | undefined): void;
11
+ }