warscript 0.0.1-dev.f40f923 → 0.0.1-dev.f4350ae

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 (69) hide show
  1. package/attributes.d.ts +5 -0
  2. package/attributes.lua +8 -1
  3. package/core/types/effect.d.ts +1 -3
  4. package/core/types/effect.lua +26 -29
  5. package/core/types/sound.lua +5 -0
  6. package/core/types/timer.d.ts +6 -7
  7. package/core/types/timer.lua +18 -21
  8. package/decl/native.d.ts +840 -786
  9. package/engine/behaviour/ability/damage.d.ts +6 -3
  10. package/engine/behaviour/ability/damage.lua +24 -36
  11. package/engine/behaviour/ability/emulate-impact.lua +7 -0
  12. package/engine/behaviour/ability.d.ts +4 -1
  13. package/engine/behaviour/ability.lua +6 -4
  14. package/engine/internal/ability.d.ts +2 -0
  15. package/engine/internal/ability.lua +7 -0
  16. package/engine/internal/item.d.ts +2 -1
  17. package/engine/internal/misc/damage-metadata-by-target.d.ts +2 -0
  18. package/engine/internal/misc/damage-metadata-by-target.lua +5 -0
  19. package/engine/internal/unit+damage.d.ts +2 -11
  20. package/engine/internal/unit+damage.lua +10 -14
  21. package/engine/internal/unit+spellSteal.lua +1 -2
  22. package/engine/internal/unit.d.ts +16 -3
  23. package/engine/internal/unit.lua +126 -37
  24. package/engine/object-data/auxiliary/attachment-preset.d.ts +7 -2
  25. package/engine/object-data/auxiliary/attachment-preset.lua +4 -3
  26. package/engine/object-data/auxiliary/attack-type.d.ts +7 -8
  27. package/engine/object-data/auxiliary/attack-type.lua +42 -0
  28. package/engine/object-data/auxiliary/movement-type.d.ts +7 -7
  29. package/engine/object-data/auxiliary/movement-type.lua +22 -0
  30. package/engine/object-data/auxiliary/unit-attribute.d.ts +6 -0
  31. package/engine/object-data/auxiliary/unit-attribute.lua +9 -0
  32. package/engine/object-data/entry/ability-type/berserk.d.ts +2 -0
  33. package/engine/object-data/entry/ability-type/berserk.lua +13 -0
  34. package/engine/object-data/entry/ability-type/permanent-invisibility.d.ts +8 -0
  35. package/engine/object-data/entry/ability-type/permanent-invisibility.lua +26 -0
  36. package/engine/object-data/entry/ability-type/phase-shift.d.ts +10 -0
  37. package/engine/object-data/entry/ability-type/phase-shift.lua +39 -0
  38. package/engine/object-data/entry/ability-type/shock-wave.d.ts +4 -0
  39. package/engine/object-data/entry/ability-type/shock-wave.lua +26 -0
  40. package/engine/object-data/entry/ability-type/slow-poison.d.ts +10 -0
  41. package/engine/object-data/entry/ability-type/slow-poison.lua +58 -0
  42. package/engine/object-data/entry/ability-type/web.d.ts +12 -0
  43. package/engine/object-data/entry/ability-type/web.lua +52 -0
  44. package/engine/object-data/entry/ability-type.d.ts +11 -11
  45. package/engine/object-data/entry/ability-type.lua +27 -6
  46. package/engine/object-data/entry/buff-type/applicable.lua +5 -0
  47. package/engine/object-data/entry/buff-type.d.ts +5 -11
  48. package/engine/object-data/entry/buff-type.lua +11 -27
  49. package/engine/object-data/entry/unit-type.d.ts +2 -2
  50. package/engine/object-data/entry/unit-type.lua +94 -84
  51. package/engine/object-field/ability.d.ts +1 -1
  52. package/engine/object-field/unit.d.ts +46 -3
  53. package/engine/object-field/unit.lua +173 -7
  54. package/engine/object-field.d.ts +9 -1
  55. package/engine/object-field.lua +158 -76
  56. package/engine/standard/entries/buff-type.d.ts +3 -0
  57. package/engine/standard/entries/buff-type.lua +3 -0
  58. package/objutil/buff.lua +1 -2
  59. package/package.json +2 -2
  60. package/utility/arrays.d.ts +1 -0
  61. package/utility/arrays.lua +3 -0
  62. package/utility/functions.d.ts +1 -0
  63. package/utility/functions.lua +1 -0
  64. package/utility/linked-set.d.ts +1 -0
  65. package/utility/linked-set.lua +3 -0
  66. package/utility/lua-maps.d.ts +3 -0
  67. package/utility/lua-maps.lua +16 -0
  68. package/utility/lua-sets.d.ts +1 -0
  69. package/utility/lua-sets.lua +3 -0
@@ -12,6 +12,9 @@ local implementReadonlyNumberIndexSupplier = ____reflection.implementReadonlyNum
12
12
  local ____combat_2Dclassification = require("engine.object-data.auxiliary.combat-classification")
13
13
  local combatClassificationsToStringArray = ____combat_2Dclassification.combatClassificationsToStringArray
14
14
  local stringArrayToCombatClassifications = ____combat_2Dclassification.stringArrayToCombatClassifications
15
+ local ____movement_2Dtype = require("engine.object-data.auxiliary.movement-type")
16
+ local movementTypeToString = ____movement_2Dtype.movementTypeToString
17
+ local stringToMovementType = ____movement_2Dtype.stringToMovementType
15
18
  local ____unit_2Dclassification = require("engine.object-data.auxiliary.unit-classification")
16
19
  local stringArrayToUnitClassifications = ____unit_2Dclassification.stringArrayToUnitClassifications
17
20
  local unitClassificationsToStringArray = ____unit_2Dclassification.unitClassificationsToStringArray
@@ -19,6 +22,9 @@ local ____entry = require("engine.object-data.entry")
19
22
  local ObjectDataEntry = ____entry.ObjectDataEntry
20
23
  local ____object_2Ddata_2Dentry_2Did_2Dgenerator = require("engine.object-data.utility.object-data-entry-id-generator")
21
24
  local ObjectDataEntryIdGenerator = ____object_2Ddata_2Dentry_2Did_2Dgenerator.ObjectDataEntryIdGenerator
25
+ local ____attack_2Dtype = require("engine.object-data.auxiliary.attack-type")
26
+ local attackTypeToString = ____attack_2Dtype.attackTypeToString
27
+ local stringToAttackType = ____attack_2Dtype.stringToAttackType
22
28
  local ____config = require("config")
23
29
  local WarscriptConfig = ____config.WarscriptConfig
24
30
  local getOrCreateUnitTypeWeapons
@@ -34,18 +40,19 @@ __TS__SetDescriptor(
34
40
  "attackType",
35
41
  {
36
42
  get = function(self)
43
+ local ____stringToAttackType_1 = stringToAttackType
37
44
  local ____self_0 = self.unitType
38
- return ____self_0.getStringField(
45
+ return ____stringToAttackType_1(____self_0.getStringField(
39
46
  ____self_0,
40
47
  ("ua" .. tostring(self.index)) .. "t"
41
- )
48
+ ))
42
49
  end,
43
50
  set = function(self, attackType)
44
- local ____self_1 = self.unitType
45
- ____self_1.setStringField(
46
- ____self_1,
51
+ local ____self_2 = self.unitType
52
+ ____self_2.setStringField(
53
+ ____self_2,
47
54
  ("ua" .. tostring(self.index)) .. "t",
48
- attackType
55
+ attackTypeToString(attackType)
49
56
  )
50
57
  end
51
58
  },
@@ -56,16 +63,16 @@ __TS__SetDescriptor(
56
63
  "backSwingDuration",
57
64
  {
58
65
  get = function(self)
59
- local ____self_2 = self.unitType
60
- return ____self_2.getNumberField(
61
- ____self_2,
66
+ local ____self_3 = self.unitType
67
+ return ____self_3.getNumberField(
68
+ ____self_3,
62
69
  "ubs" .. tostring(self.index)
63
70
  )
64
71
  end,
65
72
  set = function(self, backSwingDuration)
66
- local ____self_3 = self.unitType
67
- ____self_3.setNumberField(
68
- ____self_3,
73
+ local ____self_4 = self.unitType
74
+ ____self_4.setNumberField(
75
+ ____self_4,
69
76
  "ubs" .. tostring(self.index),
70
77
  backSwingDuration
71
78
  )
@@ -78,16 +85,16 @@ __TS__SetDescriptor(
78
85
  "cooldown",
79
86
  {
80
87
  get = function(self)
81
- local ____self_4 = self.unitType
82
- return ____self_4.getNumberField(
83
- ____self_4,
88
+ local ____self_5 = self.unitType
89
+ return ____self_5.getNumberField(
90
+ ____self_5,
84
91
  ("ua" .. tostring(self.index)) .. "c"
85
92
  )
86
93
  end,
87
94
  set = function(self, cooldown)
88
- local ____self_5 = self.unitType
89
- ____self_5.setNumberField(
90
- ____self_5,
95
+ local ____self_6 = self.unitType
96
+ ____self_6.setNumberField(
97
+ ____self_6,
91
98
  ("ua" .. tostring(self.index)) .. "c",
92
99
  cooldown
93
100
  )
@@ -121,16 +128,16 @@ __TS__SetDescriptor(
121
128
  "damageBase",
122
129
  {
123
130
  get = function(self)
124
- local ____self_6 = self.unitType
125
- return ____self_6.getNumberField(
126
- ____self_6,
131
+ local ____self_7 = self.unitType
132
+ return ____self_7.getNumberField(
133
+ ____self_7,
127
134
  ("ua" .. tostring(self.index)) .. "b"
128
135
  )
129
136
  end,
130
137
  set = function(self, damageBase)
131
- local ____self_7 = self.unitType
132
- ____self_7.setNumberField(
133
- ____self_7,
138
+ local ____self_8 = self.unitType
139
+ ____self_8.setNumberField(
140
+ ____self_8,
134
141
  ("ua" .. tostring(self.index)) .. "b",
135
142
  damageBase
136
143
  )
@@ -143,16 +150,16 @@ __TS__SetDescriptor(
143
150
  "damageDiceCount",
144
151
  {
145
152
  get = function(self)
146
- local ____self_8 = self.unitType
147
- return ____self_8.getNumberField(
148
- ____self_8,
153
+ local ____self_9 = self.unitType
154
+ return ____self_9.getNumberField(
155
+ ____self_9,
149
156
  ("ua" .. tostring(self.index)) .. "d"
150
157
  )
151
158
  end,
152
159
  set = function(self, damageDiceNumber)
153
- local ____self_9 = self.unitType
154
- ____self_9.setNumberField(
155
- ____self_9,
160
+ local ____self_10 = self.unitType
161
+ ____self_10.setNumberField(
162
+ ____self_10,
156
163
  ("ua" .. tostring(self.index)) .. "d",
157
164
  damageDiceNumber
158
165
  )
@@ -165,16 +172,16 @@ __TS__SetDescriptor(
165
172
  "damageDiceSideCount",
166
173
  {
167
174
  get = function(self)
168
- local ____self_10 = self.unitType
169
- return ____self_10.getNumberField(
170
- ____self_10,
175
+ local ____self_11 = self.unitType
176
+ return ____self_11.getNumberField(
177
+ ____self_11,
171
178
  ("ua" .. tostring(self.index)) .. "s"
172
179
  )
173
180
  end,
174
181
  set = function(self, damageDiceSideCount)
175
- local ____self_11 = self.unitType
176
- ____self_11.setNumberField(
177
- ____self_11,
182
+ local ____self_12 = self.unitType
183
+ ____self_12.setNumberField(
184
+ ____self_12,
178
185
  ("ua" .. tostring(self.index)) .. "s",
179
186
  damageDiceSideCount
180
187
  )
@@ -187,16 +194,16 @@ __TS__SetDescriptor(
187
194
  "impactDelay",
188
195
  {
189
196
  get = function(self)
190
- local ____self_12 = self.unitType
191
- return ____self_12.getNumberField(
192
- ____self_12,
197
+ local ____self_13 = self.unitType
198
+ return ____self_13.getNumberField(
199
+ ____self_13,
193
200
  "udp" .. tostring(self.index)
194
201
  )
195
202
  end,
196
203
  set = function(self, impactDelay)
197
- local ____self_13 = self.unitType
198
- ____self_13.setNumberField(
199
- ____self_13,
204
+ local ____self_14 = self.unitType
205
+ ____self_14.setNumberField(
206
+ ____self_14,
200
207
  "udp" .. tostring(self.index),
201
208
  impactDelay
202
209
  )
@@ -209,16 +216,16 @@ __TS__SetDescriptor(
209
216
  "missileModelPath",
210
217
  {
211
218
  get = function(self)
212
- local ____self_14 = self.unitType
213
- return ____self_14.getStringField(
214
- ____self_14,
219
+ local ____self_15 = self.unitType
220
+ return ____self_15.getStringField(
221
+ ____self_15,
215
222
  ("ua" .. tostring(self.index)) .. "m"
216
223
  )
217
224
  end,
218
225
  set = function(self, missileModelPath)
219
- local ____self_15 = self.unitType
220
- ____self_15.setStringField(
221
- ____self_15,
226
+ local ____self_16 = self.unitType
227
+ ____self_16.setStringField(
228
+ ____self_16,
222
229
  ("ua" .. tostring(self.index)) .. "m",
223
230
  missileModelPath
224
231
  )
@@ -231,16 +238,16 @@ __TS__SetDescriptor(
231
238
  "range",
232
239
  {
233
240
  get = function(self)
234
- local ____self_16 = self.unitType
235
- return ____self_16.getNumberField(
236
- ____self_16,
241
+ local ____self_17 = self.unitType
242
+ return ____self_17.getNumberField(
243
+ ____self_17,
237
244
  ("ua" .. tostring(self.index)) .. "r"
238
245
  )
239
246
  end,
240
247
  set = function(self, range)
241
- local ____self_17 = self.unitType
242
- ____self_17.setNumberField(
243
- ____self_17,
248
+ local ____self_18 = self.unitType
249
+ ____self_18.setNumberField(
250
+ ____self_18,
244
251
  ("ua" .. tostring(self.index)) .. "r",
245
252
  range
246
253
  )
@@ -253,16 +260,16 @@ __TS__SetDescriptor(
253
260
  "soundType",
254
261
  {
255
262
  get = function(self)
256
- local ____self_18 = self.unitType
257
- return ____self_18.getStringField(
258
- ____self_18,
263
+ local ____self_19 = self.unitType
264
+ return ____self_19.getStringField(
265
+ ____self_19,
259
266
  "ucs" .. tostring(self.index)
260
267
  )
261
268
  end,
262
269
  set = function(self, soundType)
263
- local ____self_19 = self.unitType
264
- ____self_19.setStringField(
265
- ____self_19,
270
+ local ____self_20 = self.unitType
271
+ ____self_20.setStringField(
272
+ ____self_20,
266
273
  "ucs" .. tostring(self.index),
267
274
  soundType
268
275
  )
@@ -275,16 +282,16 @@ __TS__SetDescriptor(
275
282
  "soundTypeSD",
276
283
  {
277
284
  get = function(self)
278
- local ____self_20 = self.unitType
279
- return ____self_20.getStringField(
280
- ____self_20,
285
+ local ____self_21 = self.unitType
286
+ return ____self_21.getStringField(
287
+ ____self_21,
281
288
  ("ucs" .. tostring(self.index)) .. ":sd"
282
289
  )
283
290
  end,
284
291
  set = function(self, soundTypeSD)
285
- local ____self_21 = self.unitType
286
- ____self_21.setStringField(
287
- ____self_21,
292
+ local ____self_22 = self.unitType
293
+ ____self_22.setStringField(
294
+ ____self_22,
288
295
  ("ucs" .. tostring(self.index)) .. ":sd",
289
296
  soundTypeSD
290
297
  )
@@ -297,16 +304,16 @@ __TS__SetDescriptor(
297
304
  "soundTypeHD",
298
305
  {
299
306
  get = function(self)
300
- local ____self_22 = self.unitType
301
- return ____self_22.getStringField(
302
- ____self_22,
307
+ local ____self_23 = self.unitType
308
+ return ____self_23.getStringField(
309
+ ____self_23,
303
310
  ("ucs" .. tostring(self.index)) .. ":hd"
304
311
  )
305
312
  end,
306
313
  set = function(self, soundTypeHD)
307
- local ____self_23 = self.unitType
308
- ____self_23.setStringField(
309
- ____self_23,
314
+ local ____self_24 = self.unitType
315
+ ____self_24.setStringField(
316
+ ____self_24,
310
317
  ("ucs" .. tostring(self.index)) .. ":hd",
311
318
  soundTypeHD
312
319
  )
@@ -1341,10 +1348,13 @@ __TS__SetDescriptor(
1341
1348
  "movementType",
1342
1349
  {
1343
1350
  get = function(self)
1344
- return self:getStringField("umvt")
1351
+ return stringToMovementType(self:getStringField("umvt"))
1345
1352
  end,
1346
1353
  set = function(self, movementType)
1347
- self:setStringField("umvt", movementType)
1354
+ self:setStringField(
1355
+ "umvt",
1356
+ movementTypeToString(movementType)
1357
+ )
1348
1358
  end
1349
1359
  },
1350
1360
  true
@@ -1612,11 +1622,11 @@ __TS__SetDescriptor(
1612
1622
  implementReadonlyNumberIndexSupplier(
1613
1623
  ____exports.UnitType,
1614
1624
  function(id)
1615
- local ____class_24 = __TS__Class()
1616
- ____class_24.name = ____class_24.name
1617
- __TS__ClassExtends(____class_24, ____exports.UnitType)
1618
- ____class_24.BASE_ID = id
1619
- return ____class_24
1625
+ local ____class_25 = __TS__Class()
1626
+ ____class_25.name = ____class_25.name
1627
+ __TS__ClassExtends(____class_25, ____exports.UnitType)
1628
+ ____class_25.BASE_ID = id
1629
+ return ____class_25
1620
1630
  end
1621
1631
  )
1622
1632
  ____exports.HeroUnitType = __TS__Class()
@@ -1677,11 +1687,11 @@ __TS__SetDescriptor(
1677
1687
  implementReadonlyNumberIndexSupplier(
1678
1688
  ____exports.HeroUnitType,
1679
1689
  function(id)
1680
- local ____class_25 = __TS__Class()
1681
- ____class_25.name = ____class_25.name
1682
- __TS__ClassExtends(____class_25, ____exports.HeroUnitType)
1683
- ____class_25.BASE_ID = id
1684
- return ____class_25
1690
+ local ____class_26 = __TS__Class()
1691
+ ____class_26.name = ____class_26.name
1692
+ __TS__ClassExtends(____class_26, ____exports.HeroUnitType)
1693
+ ____class_26.BASE_ID = id
1694
+ return ____class_26
1685
1695
  end
1686
1696
  )
1687
1697
  return ____exports
@@ -117,7 +117,7 @@ export declare abstract class AbilityEnumLevelField<T extends number> extends Ab
117
117
  protected getNativeFieldById(id: number): jabilityintegerlevelfield;
118
118
  protected getNativeFieldValue(instance: Ability, level: number): T;
119
119
  protected setNativeFieldValue(instance: Ability, level: number, value: T): boolean;
120
- static get valueChangeEvent(): ObjectLevelFieldValueChangeEvent<AbilityBooleanLevelField>;
120
+ static get valueChangeEvent(): ObjectLevelFieldValueChangeEvent<AbilityEnumLevelField<number>>;
121
121
  }
122
122
  export declare class AbilityBuffPolarityLevelField extends AbilityEnumLevelField<BuffPolarity> {
123
123
  protected values: ReadonlyNonEmptyLinkedSet<BuffPolarity>;
@@ -1,16 +1,59 @@
1
1
  /** @noSelfInFile */
2
2
  import { Unit } from "../internal/unit";
3
- import { ObjectField } from "../object-field";
3
+ import { ObjectField, ObjectLevelField, ObjectLevelFieldValueChangeEvent, ReadonlyObjectLevelFieldType } from "../object-field";
4
4
  import { UnitType, UnitTypeId } from "../object-data/entry/unit-type";
5
+ import { ReadonlyNonEmptyLinkedSet } from "../../utility/linked-set";
6
+ import { AttackType } from "../object-data/auxiliary/attack-type";
5
7
  export declare abstract class UnitField<ValueType extends number | string | boolean = number | string | boolean, NativeFieldType = any> extends ObjectField<UnitType, Unit, ValueType, NativeFieldType> {
6
8
  protected get instanceClass(): typeof Unit;
7
9
  protected getObjectDataEntryId(instance: Unit): UnitTypeId;
10
+ protected hasNativeFieldValue(): boolean;
11
+ }
12
+ export declare class UnitBooleanField extends UnitField<boolean, junitbooleanfield> {
13
+ protected get defaultValue(): boolean;
14
+ protected getNativeFieldById(id: number): junitbooleanfield;
15
+ protected getNativeFieldValue(instance: Unit): boolean;
16
+ protected setNativeFieldValue(instance: Unit, value: boolean): boolean;
17
+ }
18
+ export declare class UnitFloatField extends UnitField<number, junitrealfield> {
19
+ protected get defaultValue(): number;
20
+ protected getNativeFieldById(id: number): junitrealfield;
21
+ protected getNativeFieldValue(instance: Unit): number;
22
+ protected setNativeFieldValue(instance: Unit, value: number): boolean;
23
+ }
24
+ export declare class UnitIntegerField extends UnitField<number, junitintegerfield> {
25
+ protected get defaultValue(): number;
26
+ protected getNativeFieldById(id: number): junitintegerfield;
27
+ protected getNativeFieldValue(instance: Unit): number;
28
+ protected setNativeFieldValue(instance: Unit, value: number): boolean;
8
29
  }
9
30
  export declare class UnitStringField extends UnitField<string, junitstringfield> {
10
31
  protected get defaultValue(): string;
11
32
  protected getNativeFieldById(id: number): junitstringfield;
12
- protected hasNativeFieldValue(): boolean;
13
33
  protected getNativeFieldValue(instance: Unit): string;
14
- protected getObjectDataEntryId(instance: Unit): UnitTypeId;
15
34
  protected setNativeFieldValue(instance: Unit, value: string): boolean;
16
35
  }
36
+ type junitweaponfield = junitweaponbooleanfield | junitweaponintegerfield | junitweaponrealfield | junitweaponstringfield;
37
+ export declare abstract class UnitWeaponField<ValueType extends number | string | boolean = number | string | boolean, InputValueType extends ValueType = never, NativeFieldType extends junitweaponfield = junitweaponfield> extends ObjectLevelField<UnitType, Unit, ValueType, InputValueType, NativeFieldType> {
38
+ protected get instanceClass(): typeof Unit;
39
+ protected getLevelCount(): number;
40
+ protected getObjectDataEntryId(instance: Unit): UnitTypeId;
41
+ protected hasNativeFieldValue(): boolean;
42
+ static get valueChangeEvent(): ObjectLevelFieldValueChangeEvent<ReadonlyObjectLevelFieldType<UnitWeaponField>>;
43
+ }
44
+ export declare abstract class UnitNumberWeaponField<NativeFieldType extends junitweaponintegerfield | junitweaponrealfield = junitweaponintegerfield | junitweaponrealfield> extends UnitWeaponField<number, number, NativeFieldType> {
45
+ protected get defaultValue(): number;
46
+ static get valueChangeEvent(): ObjectLevelFieldValueChangeEvent<UnitNumberWeaponField>;
47
+ }
48
+ export declare abstract class UnitEnumWeaponField<T extends number> extends UnitWeaponField<T, T, junitweaponintegerfield> {
49
+ protected abstract values: ReadonlyNonEmptyLinkedSet<T>;
50
+ protected get defaultValue(): T;
51
+ protected getNativeFieldById(id: number): junitweaponintegerfield;
52
+ protected getNativeFieldValue(instance: Unit, index: number): T;
53
+ protected setNativeFieldValue(instance: Unit, index: number, value: T): boolean;
54
+ static get valueChangeEvent(): ObjectLevelFieldValueChangeEvent<UnitEnumWeaponField<number>>;
55
+ }
56
+ export declare class UnitAttackTypeWeaponField extends UnitEnumWeaponField<AttackType> {
57
+ protected values: ReadonlyNonEmptyLinkedSet<AttackType>;
58
+ }
59
+ export {};
@@ -2,11 +2,22 @@ local ____lualib = require("lualib_bundle")
2
2
  local __TS__Class = ____lualib.__TS__Class
3
3
  local __TS__ClassExtends = ____lualib.__TS__ClassExtends
4
4
  local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
5
+ local __TS__ObjectDefineProperty = ____lualib.__TS__ObjectDefineProperty
5
6
  local ____exports = {}
6
7
  local ____unit = require("engine.internal.unit")
7
8
  local Unit = ____unit.Unit
8
9
  local ____object_2Dfield = require("engine.object-field")
9
10
  local ObjectField = ____object_2Dfield.ObjectField
11
+ local ObjectLevelField = ____object_2Dfield.ObjectLevelField
12
+ local ____linked_2Dset = require("utility.linked-set")
13
+ local nonEmptyLinkedSetOf = ____linked_2Dset.nonEmptyLinkedSetOf
14
+ local convertUnitBooleanField = ConvertUnitBooleanField
15
+ local convertUnitIntegerField = ConvertUnitIntegerField
16
+ local convertUnitRealField = ConvertUnitRealField
17
+ local convertUnitStringField = ConvertUnitStringField
18
+ local convertUnitWeaponIntegerField = ConvertUnitWeaponIntegerField
19
+ local getUnitWeaponIntegerField = BlzGetUnitWeaponIntegerField
20
+ local setUnitWeaponIntegerField = BlzSetUnitWeaponIntegerField
10
21
  ____exports.UnitField = __TS__Class()
11
22
  local UnitField = ____exports.UnitField
12
23
  UnitField.name = "UnitField"
@@ -14,6 +25,9 @@ __TS__ClassExtends(UnitField, ObjectField)
14
25
  function UnitField.prototype.getObjectDataEntryId(self, instance)
15
26
  return instance.typeId
16
27
  end
28
+ function UnitField.prototype.hasNativeFieldValue(self)
29
+ return true
30
+ end
17
31
  __TS__SetDescriptor(
18
32
  UnitField.prototype,
19
33
  "instanceClass",
@@ -22,22 +36,79 @@ __TS__SetDescriptor(
22
36
  end},
23
37
  true
24
38
  )
39
+ ____exports.UnitBooleanField = __TS__Class()
40
+ local UnitBooleanField = ____exports.UnitBooleanField
41
+ UnitBooleanField.name = "UnitBooleanField"
42
+ __TS__ClassExtends(UnitBooleanField, ____exports.UnitField)
43
+ function UnitBooleanField.prototype.getNativeFieldById(self, id)
44
+ return convertUnitBooleanField(id)
45
+ end
46
+ function UnitBooleanField.prototype.getNativeFieldValue(self, instance)
47
+ return instance:getField(self.nativeField)
48
+ end
49
+ function UnitBooleanField.prototype.setNativeFieldValue(self, instance, value)
50
+ return instance:setField(self.nativeField, value)
51
+ end
52
+ __TS__SetDescriptor(
53
+ UnitBooleanField.prototype,
54
+ "defaultValue",
55
+ {get = function(self)
56
+ return false
57
+ end},
58
+ true
59
+ )
60
+ ____exports.UnitFloatField = __TS__Class()
61
+ local UnitFloatField = ____exports.UnitFloatField
62
+ UnitFloatField.name = "UnitFloatField"
63
+ __TS__ClassExtends(UnitFloatField, ____exports.UnitField)
64
+ function UnitFloatField.prototype.getNativeFieldById(self, id)
65
+ return convertUnitRealField(id)
66
+ end
67
+ function UnitFloatField.prototype.getNativeFieldValue(self, instance)
68
+ return instance:getField(self.nativeField)
69
+ end
70
+ function UnitFloatField.prototype.setNativeFieldValue(self, instance, value)
71
+ return instance:setField(self.nativeField, value)
72
+ end
73
+ __TS__SetDescriptor(
74
+ UnitFloatField.prototype,
75
+ "defaultValue",
76
+ {get = function(self)
77
+ return 0
78
+ end},
79
+ true
80
+ )
81
+ ____exports.UnitIntegerField = __TS__Class()
82
+ local UnitIntegerField = ____exports.UnitIntegerField
83
+ UnitIntegerField.name = "UnitIntegerField"
84
+ __TS__ClassExtends(UnitIntegerField, ____exports.UnitField)
85
+ function UnitIntegerField.prototype.getNativeFieldById(self, id)
86
+ return convertUnitIntegerField(id)
87
+ end
88
+ function UnitIntegerField.prototype.getNativeFieldValue(self, instance)
89
+ return instance:getField(self.nativeField)
90
+ end
91
+ function UnitIntegerField.prototype.setNativeFieldValue(self, instance, value)
92
+ return instance:setField(self.nativeField, value)
93
+ end
94
+ __TS__SetDescriptor(
95
+ UnitIntegerField.prototype,
96
+ "defaultValue",
97
+ {get = function(self)
98
+ return 0
99
+ end},
100
+ true
101
+ )
25
102
  ____exports.UnitStringField = __TS__Class()
26
103
  local UnitStringField = ____exports.UnitStringField
27
104
  UnitStringField.name = "UnitStringField"
28
105
  __TS__ClassExtends(UnitStringField, ____exports.UnitField)
29
106
  function UnitStringField.prototype.getNativeFieldById(self, id)
30
- return ConvertUnitStringField(id)
31
- end
32
- function UnitStringField.prototype.hasNativeFieldValue(self)
33
- return true
107
+ return convertUnitStringField(id)
34
108
  end
35
109
  function UnitStringField.prototype.getNativeFieldValue(self, instance)
36
110
  return instance:getField(self.nativeField)
37
111
  end
38
- function UnitStringField.prototype.getObjectDataEntryId(self, instance)
39
- return instance.typeId
40
- end
41
112
  function UnitStringField.prototype.setNativeFieldValue(self, instance, value)
42
113
  return instance:setField(self.nativeField, value)
43
114
  end
@@ -49,4 +120,99 @@ __TS__SetDescriptor(
49
120
  end},
50
121
  true
51
122
  )
123
+ ____exports.UnitWeaponField = __TS__Class()
124
+ local UnitWeaponField = ____exports.UnitWeaponField
125
+ UnitWeaponField.name = "UnitWeaponField"
126
+ __TS__ClassExtends(UnitWeaponField, ObjectLevelField)
127
+ function UnitWeaponField.prototype.getLevelCount(self)
128
+ return 2
129
+ end
130
+ function UnitWeaponField.prototype.getObjectDataEntryId(self, instance)
131
+ return instance.typeId
132
+ end
133
+ function UnitWeaponField.prototype.hasNativeFieldValue(self)
134
+ return true
135
+ end
136
+ __TS__SetDescriptor(
137
+ UnitWeaponField.prototype,
138
+ "instanceClass",
139
+ {get = function(self)
140
+ return Unit
141
+ end},
142
+ true
143
+ )
144
+ __TS__ObjectDefineProperty(
145
+ UnitWeaponField,
146
+ "valueChangeEvent",
147
+ {get = function(self)
148
+ return self:getOrCreateValueChangeEvent()
149
+ end}
150
+ )
151
+ ____exports.UnitNumberWeaponField = __TS__Class()
152
+ local UnitNumberWeaponField = ____exports.UnitNumberWeaponField
153
+ UnitNumberWeaponField.name = "UnitNumberWeaponField"
154
+ __TS__ClassExtends(UnitNumberWeaponField, ____exports.UnitWeaponField)
155
+ __TS__SetDescriptor(
156
+ UnitNumberWeaponField.prototype,
157
+ "defaultValue",
158
+ {get = function(self)
159
+ return 0
160
+ end},
161
+ true
162
+ )
163
+ __TS__ObjectDefineProperty(
164
+ UnitNumberWeaponField,
165
+ "valueChangeEvent",
166
+ {get = function(self)
167
+ return self:getOrCreateValueChangeEvent()
168
+ end}
169
+ )
170
+ ____exports.UnitEnumWeaponField = __TS__Class()
171
+ local UnitEnumWeaponField = ____exports.UnitEnumWeaponField
172
+ UnitEnumWeaponField.name = "UnitEnumWeaponField"
173
+ __TS__ClassExtends(UnitEnumWeaponField, ____exports.UnitWeaponField)
174
+ function UnitEnumWeaponField.prototype.getNativeFieldById(self, id)
175
+ return convertUnitWeaponIntegerField(id)
176
+ end
177
+ function UnitEnumWeaponField.prototype.getNativeFieldValue(self, instance, index)
178
+ local value = getUnitWeaponIntegerField(instance.handle, self.nativeField, index)
179
+ if self.values:contains(value) then
180
+ return value
181
+ end
182
+ return self.values:first()
183
+ end
184
+ function UnitEnumWeaponField.prototype.setNativeFieldValue(self, instance, index, value)
185
+ return setUnitWeaponIntegerField(instance.handle, self.nativeField, index, value)
186
+ end
187
+ __TS__SetDescriptor(
188
+ UnitEnumWeaponField.prototype,
189
+ "defaultValue",
190
+ {get = function(self)
191
+ return self.values:first()
192
+ end},
193
+ true
194
+ )
195
+ __TS__ObjectDefineProperty(
196
+ UnitEnumWeaponField,
197
+ "valueChangeEvent",
198
+ {get = function(self)
199
+ return self:getOrCreateValueChangeEvent()
200
+ end}
201
+ )
202
+ ____exports.UnitAttackTypeWeaponField = __TS__Class()
203
+ local UnitAttackTypeWeaponField = ____exports.UnitAttackTypeWeaponField
204
+ UnitAttackTypeWeaponField.name = "UnitAttackTypeWeaponField"
205
+ __TS__ClassExtends(UnitAttackTypeWeaponField, ____exports.UnitEnumWeaponField)
206
+ function UnitAttackTypeWeaponField.prototype.____constructor(self, ...)
207
+ UnitAttackTypeWeaponField.____super.prototype.____constructor(self, ...)
208
+ self.values = nonEmptyLinkedSetOf(
209
+ 1,
210
+ 2,
211
+ 3,
212
+ 0,
213
+ 5,
214
+ 4,
215
+ 6
216
+ )
217
+ end
52
218
  return ____exports
@@ -35,14 +35,22 @@ export type ObjectFieldValueChangeEvent<T extends ObjectField<any, any, any, any
35
35
  ]> : never;
36
36
  export type ReadonlyObjectFieldType<T extends ObjectField<any, any, any, any>> = Omit<T, "setValue" | "removeValue" | "trySetValue">;
37
37
  type ReadonlyObjectFieldConstructor<T extends ObjectField> = OmitConstructor<typeof ObjectField> & (abstract new (...args: any[]) => ReadonlyObjectFieldType<T>);
38
+ type ObjectFieldModifier<InstanceType extends AnyNotNil, ValueType extends number | string | boolean> = (instance: InstanceType, currentValue: ValueType, originalValue: ValueType) => ValueType;
38
39
  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> {
39
40
  protected abstract readonly defaultValue: ValueType;
40
41
  protected abstract getNativeFieldValue(instance: InstanceType): ValueType;
41
42
  protected abstract setNativeFieldValue(instance: InstanceType, value: ValueType): boolean;
42
- getValue(entry: ObjectDataEntryType | InstanceType): ValueType;
43
+ private originalValueByInstance?;
44
+ private modifiersByInstance?;
45
+ getValue(entry: ObjectDataEntryType | InstanceType, includeModifiers?: boolean): ValueType;
43
46
  setValue(entry: ObjectDataEntryType | InstanceType, value: ValueType): boolean;
47
+ applyModifier(instance: InstanceType, modifier: ObjectFieldModifier<InstanceType, ValueType>): void;
48
+ removeModifier(instance: InstanceType, modifier: ObjectFieldModifier<InstanceType, ValueType>): boolean;
44
49
  removeValue(entry: ObjectDataEntryType): boolean;
45
50
  trySetValue(entry: ObjectDataEntryType | InstanceType, value: unknown): boolean;
51
+ private getActualValue;
52
+ private setActualValue;
53
+ private calculateActualValue;
46
54
  private invokeValueChangeEvent;
47
55
  private invokeValueChangeEventRecursive;
48
56
  protected static getOrCreateValueChangeEvent<T extends ObjectField, R extends ReadonlyObjectFieldType<T>>(this: ReadonlyObjectFieldConstructor<T>): ObjectFieldValueChangeEvent<R>;