warscript 0.0.1-dev.738793 → 0.0.1-dev.73fbafc

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 (98) 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.lua +3 -1
  5. package/core/types/playerCamera.d.ts +2 -0
  6. package/core/types/playerCamera.lua +123 -5
  7. package/core/types/tileCell.d.ts +9 -0
  8. package/core/types/tileCell.lua +92 -0
  9. package/core/types/timer.d.ts +3 -1
  10. package/core/types/timer.lua +27 -2
  11. package/decl/native.d.ts +6 -4
  12. package/engine/behavior.d.ts +5 -0
  13. package/engine/behavior.lua +106 -27
  14. package/engine/behaviour/ability/apply-buff.lua +1 -1
  15. package/engine/behaviour/ability/damage.d.ts +4 -2
  16. package/engine/behaviour/ability/damage.lua +24 -36
  17. package/engine/behaviour/ability/emulate-impact.d.ts +1 -1
  18. package/engine/behaviour/ability/emulate-impact.lua +11 -3
  19. package/engine/behaviour/ability/remove-buffs.d.ts +9 -0
  20. package/engine/behaviour/ability/remove-buffs.lua +21 -0
  21. package/engine/behaviour/ability/restore-mana.d.ts +1 -1
  22. package/engine/behaviour/ability/restore-mana.lua +6 -6
  23. package/engine/behaviour/ability.lua +8 -17
  24. package/engine/behaviour/unit/stun-immunity.d.ts +7 -3
  25. package/engine/behaviour/unit/stun-immunity.lua +52 -27
  26. package/engine/behaviour/unit.d.ts +33 -1
  27. package/engine/behaviour/unit.lua +190 -4
  28. package/engine/buff.d.ts +2 -4
  29. package/engine/buff.lua +68 -83
  30. package/engine/internal/ability.d.ts +7 -1
  31. package/engine/internal/ability.lua +49 -9
  32. package/engine/internal/item/ability.lua +63 -11
  33. package/engine/internal/item+owner.lua +12 -6
  34. package/engine/internal/item.d.ts +16 -16
  35. package/engine/internal/item.lua +135 -49
  36. package/engine/internal/misc/damage-metadata-by-target.d.ts +2 -0
  37. package/engine/internal/misc/damage-metadata-by-target.lua +5 -0
  38. package/engine/internal/misc/frame-coordinates.d.ts +2 -0
  39. package/engine/internal/misc/frame-coordinates.lua +21 -0
  40. package/engine/internal/misc/get-terrain-z.d.ts +2 -0
  41. package/engine/internal/misc/get-terrain-z.lua +11 -0
  42. package/engine/internal/misc/player-local-handle.d.ts +2 -0
  43. package/engine/internal/misc/player-local-handle.lua +5 -0
  44. package/engine/internal/unit/ability.d.ts +35 -0
  45. package/engine/internal/unit/ability.lua +98 -9
  46. package/engine/internal/unit/allowed-targets.d.ts +1 -1
  47. package/engine/internal/unit/allowed-targets.lua +9 -1
  48. package/engine/internal/unit/main-selected.lua +12 -27
  49. package/engine/internal/unit/order.d.ts +20 -0
  50. package/engine/internal/unit/order.lua +136 -0
  51. package/engine/internal/unit+ability.lua +10 -1
  52. package/engine/internal/unit+damage.d.ts +1 -1
  53. package/engine/internal/unit+damage.lua +6 -1
  54. package/engine/internal/unit-missile-launch.lua +42 -14
  55. package/engine/internal/unit.d.ts +20 -8
  56. package/engine/internal/unit.lua +221 -101
  57. package/engine/object-data/auxiliary/armor-type.d.ts +11 -0
  58. package/engine/object-data/auxiliary/armor-type.lua +46 -0
  59. package/engine/object-data/entry/ability-type/permanent-invisibility.d.ts +8 -0
  60. package/engine/object-data/entry/ability-type/permanent-invisibility.lua +26 -0
  61. package/engine/object-data/entry/ability-type.lua +5 -4
  62. package/engine/object-data/entry/unit-type.d.ts +11 -2
  63. package/engine/object-data/entry/unit-type.lua +59 -1
  64. package/engine/object-field/ability.d.ts +3 -3
  65. package/engine/object-field/ability.lua +7 -6
  66. package/engine/object-field/unit.d.ts +11 -0
  67. package/engine/object-field/unit.lua +34 -0
  68. package/engine/object-field.d.ts +8 -5
  69. package/engine/object-field.lua +90 -76
  70. package/engine/random.d.ts +9 -0
  71. package/engine/random.lua +13 -0
  72. package/engine/standard/fields/unit.d.ts +4 -0
  73. package/engine/standard/fields/unit.lua +7 -0
  74. package/engine/synchronization.d.ts +11 -0
  75. package/engine/synchronization.lua +77 -0
  76. package/engine/text-tag.d.ts +36 -2
  77. package/engine/text-tag.lua +249 -10
  78. package/engine/unit.d.ts +1 -0
  79. package/engine/unit.lua +1 -0
  80. package/net/socket.lua +1 -1
  81. package/objutil/buff.lua +1 -1
  82. package/package.json +2 -2
  83. package/patch-lualib.lua +1 -1
  84. package/utility/arrays.d.ts +1 -0
  85. package/utility/arrays.lua +8 -0
  86. package/utility/callback-array.d.ts +17 -0
  87. package/utility/callback-array.lua +61 -0
  88. package/utility/functions.d.ts +7 -0
  89. package/utility/functions.lua +12 -0
  90. package/utility/linked-set.d.ts +1 -0
  91. package/utility/linked-set.lua +19 -1
  92. package/utility/lua-maps.d.ts +12 -2
  93. package/utility/lua-maps.lua +37 -2
  94. package/utility/lua-sets.d.ts +1 -0
  95. package/utility/lua-sets.lua +4 -0
  96. package/utility/types.d.ts +3 -0
  97. package/core/types/order.d.ts +0 -25
  98. package/core/types/order.lua +0 -55
@@ -0,0 +1,11 @@
1
+ /** @noSelfInFile */
2
+ export declare const enum ArmorType {
3
+ LIGHT = 0,
4
+ MEDIUM = 1,
5
+ HEAVY = 2,
6
+ FORTIFIED = 3,
7
+ NORMAL = 4,
8
+ HERO = 5,
9
+ DIVINE = 6,
10
+ UNARMORED = 7
11
+ }
@@ -0,0 +1,46 @@
1
+ local ____exports = {}
2
+ local ____records = require("utility.records")
3
+ local invertRecord = ____records.invertRecord
4
+ local stringByArmorType = {
5
+ [0] = "small",
6
+ [1] = "medium",
7
+ [2] = "large",
8
+ [3] = "fort",
9
+ [4] = "normal",
10
+ [5] = "hero",
11
+ [6] = "divine",
12
+ [7] = "none"
13
+ }
14
+ local armorTypeByString = invertRecord(stringByArmorType)
15
+ local nativeByArmorType = {
16
+ [0] = DEFENSE_TYPE_LIGHT,
17
+ [1] = DEFENSE_TYPE_MEDIUM,
18
+ [2] = DEFENSE_TYPE_LARGE,
19
+ [3] = DEFENSE_TYPE_FORT,
20
+ [4] = DEFENSE_TYPE_NORMAL,
21
+ [5] = DEFENSE_TYPE_HERO,
22
+ [6] = DEFENSE_TYPE_DIVINE,
23
+ [7] = DEFENSE_TYPE_NONE
24
+ }
25
+ local armorTypeByNative = invertRecord(nativeByArmorType)
26
+ ---
27
+ -- @internal For use by internal systems only.
28
+ ____exports.armorTypeToString = function(armorType)
29
+ return stringByArmorType[armorType]
30
+ end
31
+ ---
32
+ -- @internal For use by internal systems only.
33
+ ____exports.stringToArmorType = function(____string)
34
+ return armorTypeByString[____string] or 7
35
+ end
36
+ ---
37
+ -- @internal For use by internal systems only.
38
+ ____exports.armorTypeToNative = function(armorType)
39
+ return nativeByArmorType[armorType]
40
+ end
41
+ ---
42
+ -- @internal For use by internal systems only.
43
+ ____exports.nativeToArmorType = function(armorType)
44
+ return armorTypeByNative[armorType]
45
+ end
46
+ return ____exports
@@ -0,0 +1,8 @@
1
+ /** @noSelfInFile */
2
+ import { AbilityType, AbilityTypeId } from "../ability-type";
3
+ import { ObjectDataEntryLevelFieldValueSupplier } from "../../entry";
4
+ export declare class PermanentInvisibilityAbilityType extends AbilityType {
5
+ static readonly BASE_ID: AbilityTypeId;
6
+ get shouldAutoAcquireAttackTargets(): boolean[];
7
+ set shouldAutoAcquireAttackTargets(shouldAutoAcquireAttackTargets: ObjectDataEntryLevelFieldValueSupplier<boolean>);
8
+ }
@@ -0,0 +1,26 @@
1
+ local ____lualib = require("lualib_bundle")
2
+ local __TS__Class = ____lualib.__TS__Class
3
+ local __TS__ClassExtends = ____lualib.__TS__ClassExtends
4
+ local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
5
+ local ____exports = {}
6
+ local ____ability_2Dtype = require("engine.object-data.entry.ability-type")
7
+ local AbilityType = ____ability_2Dtype.AbilityType
8
+ ____exports.PermanentInvisibilityAbilityType = __TS__Class()
9
+ local PermanentInvisibilityAbilityType = ____exports.PermanentInvisibilityAbilityType
10
+ PermanentInvisibilityAbilityType.name = "PermanentInvisibilityAbilityType"
11
+ __TS__ClassExtends(PermanentInvisibilityAbilityType, AbilityType)
12
+ PermanentInvisibilityAbilityType.BASE_ID = fourCC("Apiv")
13
+ __TS__SetDescriptor(
14
+ PermanentInvisibilityAbilityType.prototype,
15
+ "shouldAutoAcquireAttackTargets",
16
+ {
17
+ get = function(self)
18
+ return self:getBooleanLevelField("Gho1")
19
+ end,
20
+ set = function(self, shouldAutoAcquireAttackTargets)
21
+ self:setBooleanLevelField("Gho1", shouldAutoAcquireAttackTargets)
22
+ end
23
+ },
24
+ true
25
+ )
26
+ return ____exports
@@ -38,6 +38,8 @@ local ____sound = require("core.types.sound")
38
38
  local isSoundLabelCustom = ____sound.isSoundLabelCustom
39
39
  local Sound3D = ____sound.Sound3D
40
40
  local SoundSettings = ____sound.SoundSettings
41
+ local ____lua_2Dsets = require("utility.lua-sets")
42
+ local luaSetOf = ____lua_2Dsets.luaSetOf
41
43
  local castAnimationFQNByAbilityTypeId = {}
42
44
  local isButtonVisibleFalseAbilityTypes = {}
43
45
  local casterCastingEffectPresetsByAbilityTypeId = {}
@@ -979,9 +981,7 @@ for abilityTypeId, animationFQN in pairs(postcompile(function() return castAnima
979
981
  4,
980
982
  function(caster, ability)
981
983
  if ability:getField(ABILITY_RLF_CASTING_TIME) ~= 0 then
982
- Timer:run(function()
983
- caster:playAnimation(animationFQN)
984
- end)
984
+ Timer:run(caster, "playAnimation", animationFQN)
985
985
  end
986
986
  end
987
987
  )
@@ -1006,9 +1006,10 @@ for abilityTypeId, soundPresetId in pairs(postcompile(function() return targetEf
1006
1006
  )
1007
1007
  end
1008
1008
  end
1009
+ local unsupportedEffectSoundAbilityTypeIds = luaSetOf(fourCC("AAns"))
1009
1010
  Unit.abilityChannelingStartEvent:addListener(function(caster, ability)
1010
1011
  local soundPresetId = ability:getField(ABILITY_SF_EFFECT_SOUND)
1011
- if isSoundLabelCustom(soundPresetId) then
1012
+ if isSoundLabelCustom(soundPresetId) or soundPresetId ~= "" and unsupportedEffectSoundAbilityTypeIds[ability.parentTypeId] ~= nil then
1012
1013
  Sound3D:playFromLabel(soundPresetId, SoundSettings.Ability, caster)
1013
1014
  end
1014
1015
  end)
@@ -13,6 +13,7 @@ import type { AbilityTypeId } from "./ability-type";
13
13
  import type { UpgradeId } from "./upgrade";
14
14
  import { AnimationQualifier } from "../auxiliary/animation-qualifier";
15
15
  import { AttackType } from "../auxiliary/attack-type";
16
+ import { ArmorType } from "../auxiliary/armor-type";
16
17
  export type UnitTypeId = ObjectDataEntryId & number & {
17
18
  readonly __unitTypeId: unique symbol;
18
19
  };
@@ -144,6 +145,8 @@ export declare abstract class UnitType<Id extends UnitTypeId = UnitTypeId> exten
144
145
  set runSpeedSD(runSpeedSD: number);
145
146
  get runSpeedHD(): number;
146
147
  set runSpeedHD(runSpeedHD: number);
148
+ get selectionCircleHeight(): number;
149
+ set selectionCircleHeight(height: number);
147
150
  get selectionCircleScale(): number;
148
151
  set selectionCircleScale(selectionCircleScale: number);
149
152
  get selectionCircleScaleSD(): number;
@@ -182,16 +185,20 @@ export declare abstract class UnitType<Id extends UnitTypeId = UnitTypeId> exten
182
185
  set walkSpeedSD(walkSpeedSD: number);
183
186
  get walkSpeedHD(): number;
184
187
  set walkSpeedHD(walkSpeedHD: number);
188
+ get armor(): number;
189
+ set armor(armor: number);
185
190
  get armorSoundType(): ArmorSoundType;
186
191
  set armorSoundType(armorSoundType: ArmorSoundType);
187
192
  get armorSoundTypeSD(): ArmorSoundType;
188
193
  set armorSoundTypeSD(armorSoundTypeSD: ArmorSoundType);
189
194
  get armorSoundTypeHD(): ArmorSoundType;
190
195
  set armorSoundTypeHD(armorSoundTypeHD: ArmorSoundType);
196
+ get armorType(): ArmorType;
197
+ set armorType(armorType: ArmorType);
191
198
  get combatClassifications(): CombatClassifications;
192
199
  set combatClassifications(combatClassifications: CombatClassifications);
193
- get unitClassifications(): UnitClassifications;
194
- set unitClassifications(unitClassifications: UnitClassifications);
200
+ get classifications(): UnitClassifications;
201
+ set classifications(unitClassifications: UnitClassifications);
195
202
  get weapons(): TupleOf<UnitTypeWeapon, 2>;
196
203
  get firstWeapon(): UnitTypeWeapon;
197
204
  get secondWeapon(): UnitTypeWeapon;
@@ -225,6 +232,8 @@ export declare abstract class UnitType<Id extends UnitTypeId = UnitTypeId> exten
225
232
  set goldCost(goldCost: number);
226
233
  get healthRegenerationRate(): number;
227
234
  set healthRegenerationRate(healthRegenerationRate: number);
235
+ get level(): number;
236
+ set level(level: number);
228
237
  get manaRegenerationRate(): number;
229
238
  set manaRegenerationRate(manaRegenerationRate: number);
230
239
  get maximumHealth(): number;
@@ -27,6 +27,9 @@ local attackTypeToString = ____attack_2Dtype.attackTypeToString
27
27
  local stringToAttackType = ____attack_2Dtype.stringToAttackType
28
28
  local ____config = require("config")
29
29
  local WarscriptConfig = ____config.WarscriptConfig
30
+ local ____armor_2Dtype = require("engine.object-data.auxiliary.armor-type")
31
+ local armorTypeToString = ____armor_2Dtype.armorTypeToString
32
+ local stringToArmorType = ____armor_2Dtype.stringToArmorType
30
33
  local getOrCreateUnitTypeWeapons
31
34
  ____exports.UnitTypeWeapon = __TS__Class()
32
35
  local UnitTypeWeapon = ____exports.UnitTypeWeapon
@@ -936,6 +939,19 @@ __TS__SetDescriptor(
936
939
  },
937
940
  true
938
941
  )
942
+ __TS__SetDescriptor(
943
+ UnitType.prototype,
944
+ "selectionCircleHeight",
945
+ {
946
+ get = function(self)
947
+ return self:getNumberField("uslz")
948
+ end,
949
+ set = function(self, height)
950
+ self:setNumberField("uslz", height)
951
+ end
952
+ },
953
+ true
954
+ )
939
955
  __TS__SetDescriptor(
940
956
  UnitType.prototype,
941
957
  "selectionCircleScale",
@@ -1183,6 +1199,19 @@ __TS__SetDescriptor(
1183
1199
  },
1184
1200
  true
1185
1201
  )
1202
+ __TS__SetDescriptor(
1203
+ UnitType.prototype,
1204
+ "armor",
1205
+ {
1206
+ get = function(self)
1207
+ return self:getNumberField("udef")
1208
+ end,
1209
+ set = function(self, armor)
1210
+ self:setNumberField("udef", armor)
1211
+ end
1212
+ },
1213
+ true
1214
+ )
1186
1215
  __TS__SetDescriptor(
1187
1216
  UnitType.prototype,
1188
1217
  "armorSoundType",
@@ -1222,6 +1251,22 @@ __TS__SetDescriptor(
1222
1251
  },
1223
1252
  true
1224
1253
  )
1254
+ __TS__SetDescriptor(
1255
+ UnitType.prototype,
1256
+ "armorType",
1257
+ {
1258
+ get = function(self)
1259
+ return stringToArmorType(self:getStringField("udty"))
1260
+ end,
1261
+ set = function(self, armorType)
1262
+ self:setStringField(
1263
+ "udty",
1264
+ armorTypeToString(armorType)
1265
+ )
1266
+ end
1267
+ },
1268
+ true
1269
+ )
1225
1270
  __TS__SetDescriptor(
1226
1271
  UnitType.prototype,
1227
1272
  "combatClassifications",
@@ -1240,7 +1285,7 @@ __TS__SetDescriptor(
1240
1285
  )
1241
1286
  __TS__SetDescriptor(
1242
1287
  UnitType.prototype,
1243
- "unitClassifications",
1288
+ "classifications",
1244
1289
  {
1245
1290
  get = function(self)
1246
1291
  return stringArrayToUnitClassifications(self:getStringsField("utyp"))
@@ -1476,6 +1521,19 @@ __TS__SetDescriptor(
1476
1521
  },
1477
1522
  true
1478
1523
  )
1524
+ __TS__SetDescriptor(
1525
+ UnitType.prototype,
1526
+ "level",
1527
+ {
1528
+ get = function(self)
1529
+ return self:getNumberField("ulev")
1530
+ end,
1531
+ set = function(self, level)
1532
+ self:setNumberField("ulev", level)
1533
+ end
1534
+ },
1535
+ true
1536
+ )
1479
1537
  __TS__SetDescriptor(
1480
1538
  UnitType.prototype,
1481
1539
  "manaRegenerationRate",
@@ -12,7 +12,7 @@ import { ReadonlyNonEmptyLinkedSet } from "../../utility/linked-set";
12
12
  export declare abstract class AbilityField<ValueType extends number | string | boolean = number | string | boolean, NativeFieldType extends jabilityfield = jabilityfield> extends ObjectField<AbilityType, Ability, ValueType, NativeFieldType> {
13
13
  protected get instanceClass(): typeof Ability;
14
14
  protected getObjectDataEntryId(instance: Ability): AbilityTypeId;
15
- protected hasNativeFieldValue(instance: Ability): boolean;
15
+ protected hasNativeFieldValue(abilityTypeId: AbilityTypeId): boolean;
16
16
  static get valueChangeEvent(): ObjectFieldValueChangeEvent<ReadonlyObjectFieldType<AbilityField>>;
17
17
  }
18
18
  export declare class AbilityBooleanField extends AbilityField<boolean, jabilitybooleanfield> {
@@ -48,7 +48,7 @@ export declare class AbilityStringField extends AbilityField<string, jabilitystr
48
48
  export declare abstract class AbilityArrayField<ValueType extends number | string | boolean = number | string | boolean, NativeFieldType extends jabilityfield = jabilityfield> extends ObjectArrayField<AbilityType, Ability, ValueType, NativeFieldType> {
49
49
  protected get instanceClass(): typeof Ability;
50
50
  protected getObjectDataEntryId(instance: Ability): AbilityTypeId;
51
- protected hasNativeFieldValue(instance: Ability): boolean;
51
+ protected hasNativeFieldValue(abilityTypeId: AbilityTypeId): boolean;
52
52
  }
53
53
  export declare class AbilityStringArrayField extends AbilityArrayField<string, jabilitystringlevelfield> {
54
54
  protected get defaultValue(): string;
@@ -68,7 +68,7 @@ export declare abstract class AbilityLevelField<ValueType extends number | strin
68
68
  protected get instanceClass(): typeof Ability;
69
69
  protected getLevelCount(entry: AbilityType | Ability): number;
70
70
  protected getObjectDataEntryId(instance: Ability): AbilityTypeId;
71
- protected hasNativeFieldValue(instance: Ability): boolean;
71
+ protected hasNativeFieldValue(abilityTypeId: AbilityTypeId): boolean;
72
72
  static get valueChangeEvent(): ObjectLevelFieldValueChangeEvent<ReadonlyObjectLevelFieldType<AbilityLevelField>>;
73
73
  }
74
74
  export declare class AbilityBooleanLevelField extends AbilityLevelField<boolean, boolean, jabilityintegerlevelfield> {
@@ -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,
@@ -4,6 +4,7 @@ import { ObjectField, ObjectLevelField, ObjectLevelFieldValueChangeEvent, Readon
4
4
  import { UnitType, UnitTypeId } from "../object-data/entry/unit-type";
5
5
  import { ReadonlyNonEmptyLinkedSet } from "../../utility/linked-set";
6
6
  import { AttackType } from "../object-data/auxiliary/attack-type";
7
+ import { UnitClassifications } from "../object-data/auxiliary/unit-classification";
7
8
  export declare abstract class UnitField<ValueType extends number | string | boolean = number | string | boolean, NativeFieldType = any> extends ObjectField<UnitType, Unit, ValueType, NativeFieldType> {
8
9
  protected get instanceClass(): typeof Unit;
9
10
  protected getObjectDataEntryId(instance: Unit): UnitTypeId;
@@ -56,4 +57,14 @@ export declare abstract class UnitEnumWeaponField<T extends number> extends Unit
56
57
  export declare class UnitAttackTypeWeaponField extends UnitEnumWeaponField<AttackType> {
57
58
  protected values: ReadonlyNonEmptyLinkedSet<AttackType>;
58
59
  }
60
+ export declare class UnitClassificationsField extends UnitField<UnitClassifications, junitintegerfield> {
61
+ protected get defaultValue(): UnitClassifications;
62
+ protected getNativeFieldById(id: number): junitintegerfield;
63
+ protected getNativeFieldValue(instance: Unit): UnitClassifications;
64
+ protected setNativeFieldValue(instance: Unit, value: UnitClassifications): boolean;
65
+ }
66
+ export declare class UnitPropulsionWindowField extends UnitFloatField {
67
+ protected getNativeFieldValue(instance: Unit): number;
68
+ protected setNativeFieldValue(instance: Unit, value: number): boolean;
69
+ }
59
70
  export {};
@@ -18,6 +18,8 @@ local convertUnitStringField = ConvertUnitStringField
18
18
  local convertUnitWeaponIntegerField = ConvertUnitWeaponIntegerField
19
19
  local getUnitWeaponIntegerField = BlzGetUnitWeaponIntegerField
20
20
  local setUnitWeaponIntegerField = BlzSetUnitWeaponIntegerField
21
+ local getUnitPropulsionWindow = GetUnitPropWindow
22
+ local setUnitPropulsionWindow = SetUnitPropWindow
21
23
  ____exports.UnitField = __TS__Class()
22
24
  local UnitField = ____exports.UnitField
23
25
  UnitField.name = "UnitField"
@@ -215,4 +217,36 @@ function UnitAttackTypeWeaponField.prototype.____constructor(self, ...)
215
217
  6
216
218
  )
217
219
  end
220
+ ____exports.UnitClassificationsField = __TS__Class()
221
+ local UnitClassificationsField = ____exports.UnitClassificationsField
222
+ UnitClassificationsField.name = "UnitClassificationsField"
223
+ __TS__ClassExtends(UnitClassificationsField, ____exports.UnitField)
224
+ function UnitClassificationsField.prototype.getNativeFieldById(self, id)
225
+ return convertUnitIntegerField(id)
226
+ end
227
+ function UnitClassificationsField.prototype.getNativeFieldValue(self, instance)
228
+ return instance:getField(self.nativeField)
229
+ end
230
+ function UnitClassificationsField.prototype.setNativeFieldValue(self, instance, value)
231
+ return instance:setField(self.nativeField, value)
232
+ end
233
+ __TS__SetDescriptor(
234
+ UnitClassificationsField.prototype,
235
+ "defaultValue",
236
+ {get = function(self)
237
+ return 0
238
+ end},
239
+ true
240
+ )
241
+ ____exports.UnitPropulsionWindowField = __TS__Class()
242
+ local UnitPropulsionWindowField = ____exports.UnitPropulsionWindowField
243
+ UnitPropulsionWindowField.name = "UnitPropulsionWindowField"
244
+ __TS__ClassExtends(UnitPropulsionWindowField, ____exports.UnitFloatField)
245
+ function UnitPropulsionWindowField.prototype.getNativeFieldValue(self, instance)
246
+ return getUnitPropulsionWindow(instance.handle)
247
+ end
248
+ function UnitPropulsionWindowField.prototype.setNativeFieldValue(self, instance, value)
249
+ setUnitPropulsionWindow(instance.handle, value)
250
+ return true
251
+ end
218
252
  return ____exports
@@ -5,9 +5,10 @@ import { ObjectDataEntry, ObjectDataEntryIdType, ObjectDataEntryLevelFieldValueS
5
5
  export type ObjectFieldId = number & {
6
6
  readonly __objectDataEntryFieldId: unique symbol;
7
7
  };
8
- export type ObjectFieldConstructor<T extends ObjectFieldBase<any, any, any, any>> = OmitConstructor<typeof ObjectFieldBase> & (new (id: number) => T);
8
+ export type ObjectFieldConstructor<T extends ObjectFieldBase<any, any, any, any>> = OmitConstructor<typeof ObjectFieldBase> & (new (id: number, isGlobal?: boolean) => T);
9
9
  export type ObjectFieldAbstractConstructor<T extends ObjectFieldBase<any, any, any, any>> = OmitConstructor<typeof ObjectFieldBase> & (abstract new (id: number) => T);
10
10
  declare abstract class ObjectFieldBase<ObjectDataEntryType extends ObjectDataEntry, InstanceType extends AnyNotNil, ValueType, NativeFieldType> {
11
+ readonly isGlobal: boolean;
11
12
  protected abstract readonly instanceClass: AbstractConstructor<InstanceType> | Function;
12
13
  supports(instance: AnyNotNil): instance is InstanceType & {
13
14
  readonly __oneSidedTypeGuard: unique symbol;
@@ -16,10 +17,10 @@ declare abstract class ObjectFieldBase<ObjectDataEntryType extends ObjectDataEnt
16
17
  readonly id: ObjectFieldId;
17
18
  protected abstract getNativeFieldById(id: number): NativeFieldType;
18
19
  protected abstract getObjectDataEntryId(instance: InstanceType): ObjectDataEntryIdType<ObjectDataEntryType>;
19
- protected abstract hasNativeFieldValue(instance: InstanceType): boolean;
20
- hasValue(instance: InstanceType): boolean;
21
- constructor(id: number);
22
- static create<T extends ObjectFieldBase<any, any, any, any>>(this: ObjectFieldConstructor<T>, id?: number): T & symbol;
20
+ protected abstract hasNativeFieldValue(objectDataEntryId: ObjectDataEntryIdType<ObjectDataEntryType>): boolean;
21
+ hasValue(objectDataEntryId: ObjectDataEntryIdType<ObjectDataEntryType>): boolean;
22
+ constructor(id: number, isGlobal?: boolean);
23
+ static create<T extends ObjectFieldBase<any, any, any, any>>(this: ObjectFieldConstructor<T>, id?: number, isGlobal?: boolean): T & symbol;
23
24
  static of<T extends ObjectFieldBase<any, any, any, any>>(this: ObjectFieldAbstractConstructor<T>, id: number): T | undefined;
24
25
  }
25
26
  export type ObjectFieldValueChangeEvent<T extends ObjectField<any, any, any, any> | ReadonlyObjectFieldType<ObjectField<any, any, any, any>>> = T extends ObjectField<any, infer InstanceType, infer ValueType, any> ? DispatchingEvent<[
@@ -79,6 +80,8 @@ export declare abstract class ObjectArrayField<ObjectDataEntryType extends Objec
79
80
  setValue(entry: ObjectDataEntryType | InstanceType, value: ValueType[]): boolean;
80
81
  }
81
82
  export declare abstract class ObjectLevelField<ObjectDataEntryType extends ObjectDataEntry = ObjectDataEntry, InstanceType extends AnyNotNil = AnyNotNil, ValueType extends number | string | boolean = number | string | boolean, InputValueType extends ValueType = never, NativeFieldType = unknown> extends ObjectFieldBase<ObjectDataEntryType, InstanceType, ValueType[], NativeFieldType> {
83
+ private originalValueByLevelByInstance?;
84
+ private modifiersByInstance?;
82
85
  protected abstract readonly defaultValue: ValueType;
83
86
  protected abstract getNativeFieldValue(instance: InstanceType, level: number): ValueType;
84
87
  protected abstract setNativeFieldValue(instance: InstanceType, level: number, value: ValueType): boolean;