warscript 0.0.1-dev.ea69747 → 0.0.1-dev.eb24bc1

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 (236) hide show
  1. package/attributes.d.ts +17 -0
  2. package/attributes.lua +23 -0
  3. package/binaryreader.d.ts +1 -0
  4. package/binaryreader.lua +3 -0
  5. package/config.d.ts +5 -0
  6. package/config.lua +10 -0
  7. package/core/types/effect.d.ts +14 -6
  8. package/core/types/effect.lua +131 -35
  9. package/core/types/frame.d.ts +8 -1
  10. package/core/types/frame.lua +93 -1
  11. package/core/types/group.d.ts +0 -1
  12. package/core/types/handle.d.ts +2 -1
  13. package/core/types/handle.lua +5 -0
  14. package/core/types/image.d.ts +0 -1
  15. package/core/types/missile.d.ts +2 -2
  16. package/core/types/missile.lua +8 -2
  17. package/core/types/sound.d.ts +17 -24
  18. package/core/types/sound.lua +99 -24
  19. package/core/types/timer.d.ts +6 -7
  20. package/core/types/timer.lua +18 -21
  21. package/core/types/unit.lua +8 -0
  22. package/core/util.d.ts +1 -1
  23. package/core/util.lua +18 -1
  24. package/decl/index.d.ts +1 -0
  25. package/decl/native.d.ts +840 -786
  26. package/engine/ability.d.ts +1 -1
  27. package/engine/behavior.d.ts +10 -10
  28. package/engine/behavior.lua +6 -6
  29. package/engine/behaviour/ability/always-enabled.d.ts +7 -0
  30. package/engine/behaviour/ability/always-enabled.lua +31 -0
  31. package/engine/behaviour/ability/apply-buff.d.ts +8 -5
  32. package/engine/behaviour/ability/apply-buff.lua +32 -0
  33. package/engine/behaviour/ability/apply-unit-behavior.d.ts +13 -4
  34. package/engine/behaviour/ability/apply-unit-behavior.lua +32 -9
  35. package/engine/behaviour/ability/damage.d.ts +39 -11
  36. package/engine/behaviour/ability/damage.lua +83 -37
  37. package/engine/behaviour/ability/emulate-impact.d.ts +6 -0
  38. package/engine/behaviour/ability/emulate-impact.lua +35 -0
  39. package/engine/behaviour/ability/heal.d.ts +33 -6
  40. package/engine/behaviour/ability/heal.lua +89 -10
  41. package/engine/behaviour/ability/instant-impact.d.ts +2 -2
  42. package/engine/behaviour/ability/instant-impact.lua +4 -15
  43. package/engine/behaviour/ability/on-command-impact.d.ts +8 -0
  44. package/engine/behaviour/ability/on-command-impact.lua +25 -0
  45. package/engine/behaviour/ability/remove-buffs.d.ts +16 -0
  46. package/engine/behaviour/ability/remove-buffs.lua +28 -0
  47. package/engine/behaviour/ability/restore-mana.d.ts +15 -0
  48. package/engine/behaviour/ability/restore-mana.lua +29 -0
  49. package/engine/behaviour/ability.d.ts +27 -4
  50. package/engine/behaviour/ability.lua +152 -17
  51. package/engine/behaviour/unit/stun-immunity.d.ts +0 -1
  52. package/engine/behaviour/unit.d.ts +10 -2
  53. package/engine/behaviour/unit.lua +27 -0
  54. package/engine/buff.d.ts +103 -41
  55. package/engine/buff.lua +465 -212
  56. package/engine/game-map.d.ts +7 -0
  57. package/engine/game-map.lua +32 -0
  58. package/engine/internal/ability.d.ts +17 -14
  59. package/engine/internal/ability.lua +80 -76
  60. package/engine/internal/item/ability.lua +106 -0
  61. package/engine/internal/item+owner.lua +2 -2
  62. package/engine/internal/item.d.ts +4 -3
  63. package/engine/internal/item.lua +56 -25
  64. package/engine/internal/mechanics/ability-duration.d.ts +1 -3
  65. package/engine/internal/mechanics/ability-duration.lua +3 -1
  66. package/engine/internal/mechanics/cast-ability.d.ts +2 -0
  67. package/engine/internal/mechanics/cast-ability.lua +86 -0
  68. package/engine/internal/misc/ability-disable-counter.d.ts +2 -0
  69. package/engine/internal/misc/ability-disable-counter.lua +13 -0
  70. package/engine/internal/misc/damage-metadata-by-target.d.ts +2 -0
  71. package/engine/internal/misc/damage-metadata-by-target.lua +5 -0
  72. package/engine/internal/object-data/auto-attack-speed-increase.d.ts +1 -1
  73. package/engine/internal/object-data/auto-attack-speed-increase.lua +2 -0
  74. package/engine/internal/object-data/evasion-probability.d.ts +2 -0
  75. package/engine/internal/object-data/evasion-probability.lua +16 -0
  76. package/engine/internal/unit/ability.d.ts +10 -1
  77. package/engine/internal/unit/ability.lua +36 -14
  78. package/engine/internal/unit/add-item-to-slot-init.d.ts +2 -0
  79. package/engine/internal/unit/add-item-to-slot-init.lua +23 -0
  80. package/engine/internal/unit/add-item-to-slot.d.ts +2 -0
  81. package/engine/internal/unit/add-item-to-slot.lua +52 -0
  82. package/engine/internal/unit/bonus.d.ts +11 -8
  83. package/engine/internal/unit/bonus.lua +23 -1
  84. package/engine/internal/unit/detach-missiles.d.ts +7 -0
  85. package/engine/internal/unit/detach-missiles.lua +30 -0
  86. package/engine/internal/unit/ignore-events-items.d.ts +2 -0
  87. package/engine/internal/unit/ignore-events-items.lua +5 -0
  88. package/engine/internal/unit/item.d.ts +24 -0
  89. package/engine/internal/unit/item.lua +78 -0
  90. package/engine/internal/unit/main-selected.d.ts +13 -0
  91. package/engine/internal/unit/main-selected.lua +51 -0
  92. package/engine/internal/unit+ability.lua +2 -2
  93. package/engine/internal/unit+damage.d.ts +2 -11
  94. package/engine/internal/unit+damage.lua +10 -14
  95. package/engine/internal/unit+spellSteal.lua +1 -2
  96. package/engine/internal/unit+transport.lua +4 -10
  97. package/engine/internal/unit-missile-launch.lua +25 -6
  98. package/engine/internal/unit.d.ts +76 -18
  99. package/engine/internal/unit.lua +466 -167
  100. package/engine/internal/utility.lua +12 -0
  101. package/engine/lightning.d.ts +12 -5
  102. package/engine/lightning.lua +48 -14
  103. package/engine/local-client.d.ts +7 -2
  104. package/engine/local-client.lua +82 -0
  105. package/engine/object-data/auxiliary/animation-name.d.ts +1 -0
  106. package/engine/object-data/auxiliary/animation-name.lua +16 -0
  107. package/engine/object-data/auxiliary/attachment-preset.d.ts +7 -3
  108. package/engine/object-data/auxiliary/attachment-preset.lua +4 -3
  109. package/engine/object-data/auxiliary/attack-type.d.ts +7 -8
  110. package/engine/object-data/auxiliary/attack-type.lua +42 -0
  111. package/engine/object-data/auxiliary/combat-classification.d.ts +0 -2
  112. package/engine/object-data/auxiliary/movement-type.d.ts +7 -7
  113. package/engine/object-data/auxiliary/movement-type.lua +22 -0
  114. package/engine/object-data/auxiliary/sound-eax.d.ts +10 -0
  115. package/engine/object-data/auxiliary/sound-eax.lua +2 -0
  116. package/engine/object-data/auxiliary/sound-preset-name.d.ts +5 -1
  117. package/engine/object-data/auxiliary/tech-tree-dependency.d.ts +1 -1
  118. package/engine/object-data/auxiliary/unit-attribute.d.ts +6 -0
  119. package/engine/object-data/auxiliary/unit-attribute.lua +9 -0
  120. package/engine/object-data/entry/ability-type/berserk.d.ts +2 -0
  121. package/engine/object-data/entry/ability-type/berserk.lua +13 -0
  122. package/engine/object-data/entry/ability-type/blank-configurable.d.ts +0 -1
  123. package/engine/object-data/entry/ability-type/blank-configurable.lua +12 -1
  124. package/engine/object-data/entry/ability-type/blank-passive.d.ts +0 -1
  125. package/engine/object-data/entry/ability-type/blink.d.ts +10 -0
  126. package/engine/object-data/entry/ability-type/blink.lua +39 -0
  127. package/engine/object-data/entry/ability-type/carrion-swarm.d.ts +14 -0
  128. package/engine/object-data/entry/ability-type/carrion-swarm.lua +65 -0
  129. package/engine/object-data/entry/ability-type/channel.d.ts +0 -1
  130. package/engine/object-data/entry/ability-type/disease-cloud.lua +2 -2
  131. package/engine/object-data/entry/ability-type/engineering-upgrade.lua +4 -4
  132. package/engine/object-data/entry/ability-type/ensnare.d.ts +12 -0
  133. package/engine/object-data/entry/ability-type/ensnare.lua +52 -0
  134. package/engine/object-data/entry/ability-type/feral-spirit.lua +2 -2
  135. package/engine/object-data/entry/ability-type/mine.d.ts +10 -0
  136. package/engine/object-data/entry/ability-type/mine.lua +39 -0
  137. package/engine/object-data/entry/ability-type/phase-shift.d.ts +10 -0
  138. package/engine/object-data/entry/ability-type/phase-shift.lua +39 -0
  139. package/engine/object-data/entry/ability-type/phoenix-morph.lua +4 -4
  140. package/engine/object-data/entry/ability-type/raise-dead.d.ts +17 -0
  141. package/engine/object-data/entry/ability-type/raise-dead.lua +78 -0
  142. package/engine/object-data/entry/ability-type/shock-wave.d.ts +4 -0
  143. package/engine/object-data/entry/ability-type/shock-wave.lua +26 -0
  144. package/engine/object-data/entry/ability-type/slow-poison.d.ts +10 -0
  145. package/engine/object-data/entry/ability-type/slow-poison.lua +58 -0
  146. package/engine/object-data/entry/ability-type/spirit-touch.d.ts +2 -2
  147. package/engine/object-data/entry/ability-type/spirit-touch.lua +6 -6
  148. package/engine/object-data/entry/ability-type/summon-quilbeast.lua +2 -2
  149. package/engine/object-data/entry/ability-type/summon-water-elemental.lua +2 -2
  150. package/engine/object-data/entry/ability-type/web.d.ts +12 -0
  151. package/engine/object-data/entry/ability-type/web.lua +52 -0
  152. package/engine/object-data/entry/ability-type.d.ts +20 -18
  153. package/engine/object-data/entry/ability-type.lua +90 -33
  154. package/engine/object-data/entry/buff-type/applicable.d.ts +0 -1
  155. package/engine/object-data/entry/buff-type/applicable.lua +39 -102
  156. package/engine/object-data/entry/buff-type/blank.d.ts +0 -1
  157. package/engine/object-data/entry/buff-type.d.ts +6 -13
  158. package/engine/object-data/entry/buff-type.lua +13 -29
  159. package/engine/object-data/entry/destructible-type.d.ts +1 -2
  160. package/engine/object-data/entry/item-type/blank.d.ts +0 -1
  161. package/engine/object-data/entry/item-type.d.ts +15 -2
  162. package/engine/object-data/entry/item-type.lua +93 -2
  163. package/engine/object-data/entry/lightning-type.d.ts +1 -2
  164. package/engine/object-data/entry/sound-preset.d.ts +33 -0
  165. package/engine/object-data/entry/sound-preset.lua +140 -0
  166. package/engine/object-data/entry/unit-type.d.ts +50 -3
  167. package/engine/object-data/entry/unit-type.lua +452 -61
  168. package/engine/object-data/entry/upgrade/blank.d.ts +0 -1
  169. package/engine/object-data/entry/upgrade.d.ts +1 -2
  170. package/engine/object-data/entry/upgrade.lua +4 -4
  171. package/engine/object-data/entry.d.ts +18 -17
  172. package/engine/object-data/entry.lua +60 -32
  173. package/engine/object-data/utility/object-data-entry-id-generator.lua +7 -0
  174. package/engine/object-field/ability.d.ts +33 -8
  175. package/engine/object-field/ability.lua +60 -1
  176. package/engine/object-field/unit.d.ts +46 -2
  177. package/engine/object-field/unit.lua +173 -4
  178. package/engine/object-field.d.ts +15 -5
  179. package/engine/object-field.lua +196 -84
  180. package/engine/random.d.ts +1 -0
  181. package/engine/random.lua +9 -0
  182. package/engine/standard/entries/buff-type.d.ts +3 -0
  183. package/engine/standard/entries/buff-type.lua +3 -0
  184. package/engine/standard/entries/sound-preset.d.ts +10 -0
  185. package/engine/standard/entries/sound-preset.lua +10 -0
  186. package/engine/standard/entries/unit-type.d.ts +42 -1
  187. package/engine/standard/entries/unit-type.lua +42 -1
  188. package/engine/standard/fields/ability.d.ts +3 -1
  189. package/engine/standard/fields/ability.lua +3 -1
  190. package/engine/unit.d.ts +4 -0
  191. package/engine/unit.lua +13 -2
  192. package/event.d.ts +2 -3
  193. package/event.lua +9 -5
  194. package/exception.d.ts +2 -0
  195. package/exception.lua +4 -0
  196. package/global/vec2.lua +1 -0
  197. package/index.d.ts +1 -0
  198. package/index.lua +1 -0
  199. package/lualib_bundle.lua +146 -42
  200. package/math/vec2.d.ts +2 -9
  201. package/math.d.ts +0 -2
  202. package/net/socket.d.ts +7 -1
  203. package/net/socket.lua +45 -4
  204. package/network.d.ts +1 -0
  205. package/network.lua +3 -2
  206. package/objutil/ability.d.ts +0 -1
  207. package/objutil/buff.d.ts +0 -1
  208. package/objutil/buff.lua +2 -3
  209. package/objutil/object.d.ts +0 -1
  210. package/objutil/unit.d.ts +0 -1
  211. package/objutil/unit.lua +8 -0
  212. package/package.json +13 -14
  213. package/patch-lua.d.ts +0 -0
  214. package/patch-lua.lua +10 -0
  215. package/property.d.ts +55 -0
  216. package/property.lua +374 -0
  217. package/string.d.ts +30 -0
  218. package/string.lua +14 -0
  219. package/util/stream.d.ts +0 -1
  220. package/utility/arrays.d.ts +13 -6
  221. package/utility/arrays.lua +41 -4
  222. package/utility/bit-set.d.ts +0 -2
  223. package/utility/functions.d.ts +1 -0
  224. package/utility/functions.lua +1 -0
  225. package/utility/lazy.d.ts +2 -0
  226. package/utility/lazy.lua +14 -0
  227. package/utility/linked-set.d.ts +32 -9
  228. package/utility/linked-set.lua +24 -2
  229. package/utility/lua-maps.d.ts +4 -2
  230. package/utility/lua-maps.lua +16 -0
  231. package/utility/lua-sets.d.ts +2 -2
  232. package/utility/lua-sets.lua +3 -0
  233. package/utility/reflection.lua +11 -7
  234. package/utility/types.d.ts +3 -2
  235. package/core/mapbounds.d.ts +0 -8
  236. package/core/mapbounds.lua +0 -12
@@ -1,15 +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
33
  protected getNativeFieldValue(instance: Unit): string;
13
- protected getObjectDataEntryId(instance: Unit): UnitTypeId;
14
34
  protected setNativeFieldValue(instance: Unit, value: string): boolean;
15
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,19 +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)
107
+ return convertUnitStringField(id)
31
108
  end
32
109
  function UnitStringField.prototype.getNativeFieldValue(self, instance)
33
110
  return instance:getField(self.nativeField)
34
111
  end
35
- function UnitStringField.prototype.getObjectDataEntryId(self, instance)
36
- return instance.typeId
37
- end
38
112
  function UnitStringField.prototype.setNativeFieldValue(self, instance, value)
39
113
  return instance:setField(self.nativeField, value)
40
114
  end
@@ -46,4 +120,99 @@ __TS__SetDescriptor(
46
120
  end},
47
121
  true
48
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
49
218
  return ____exports
@@ -1,4 +1,3 @@
1
- /// <reference types="@typescript-to-lua/language-extensions" />
2
1
  /** @noSelfInFile */
3
2
  import { DispatchingEvent } from "../event";
4
3
  import { AbstractConstructor } from "../utility/types";
@@ -9,7 +8,6 @@ export type ObjectFieldId = number & {
9
8
  export type ObjectFieldConstructor<T extends ObjectFieldBase<any, any, any, any>> = OmitConstructor<typeof ObjectFieldBase> & (new (id: number) => T);
10
9
  export type ObjectFieldAbstractConstructor<T extends ObjectFieldBase<any, any, any, any>> = OmitConstructor<typeof ObjectFieldBase> & (abstract new (id: number) => T);
11
10
  declare abstract class ObjectFieldBase<ObjectDataEntryType extends ObjectDataEntry, InstanceType extends AnyNotNil, ValueType, NativeFieldType> {
12
- protected readonly valueByInstance: LuaMap<InstanceType, ValueType>;
13
11
  protected abstract readonly instanceClass: AbstractConstructor<InstanceType> | Function;
14
12
  supports(instance: AnyNotNil): instance is InstanceType & {
15
13
  readonly __oneSidedTypeGuard: unique symbol;
@@ -18,6 +16,8 @@ declare abstract class ObjectFieldBase<ObjectDataEntryType extends ObjectDataEnt
18
16
  readonly id: ObjectFieldId;
19
17
  protected abstract getNativeFieldById(id: number): NativeFieldType;
20
18
  protected abstract getObjectDataEntryId(instance: InstanceType): ObjectDataEntryIdType<ObjectDataEntryType>;
19
+ protected abstract hasNativeFieldValue(instance: InstanceType): boolean;
20
+ hasValue(instance: InstanceType): boolean;
21
21
  constructor(id: number);
22
22
  static create<T extends ObjectFieldBase<any, any, any, any>>(this: ObjectFieldConstructor<T>, id?: number): T & symbol;
23
23
  static of<T extends ObjectFieldBase<any, any, any, any>>(this: ObjectFieldAbstractConstructor<T>, id: number): T | undefined;
@@ -33,21 +33,30 @@ export type ObjectFieldValueChangeEvent<T extends ObjectField<any, any, any, any
33
33
  previousValue: ValueType,
34
34
  newValue: ValueType
35
35
  ]> : never;
36
- export type ReadonlyObjectFieldType<T extends ObjectField<any, any, any, any>> = Omit<T, "setValue" | "removeValue">;
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;
50
+ trySetValue(entry: ObjectDataEntryType | InstanceType, value: unknown): boolean;
51
+ private getActualValue;
52
+ private setActualValue;
53
+ private calculateActualValue;
45
54
  private invokeValueChangeEvent;
46
55
  private invokeValueChangeEventRecursive;
47
56
  protected static getOrCreateValueChangeEvent<T extends ObjectField, R extends ReadonlyObjectFieldType<T>>(this: ReadonlyObjectFieldConstructor<T>): ObjectFieldValueChangeEvent<R>;
48
57
  static get valueChangeEvent(): ObjectFieldValueChangeEvent<ReadonlyObjectFieldType<ObjectField>>;
49
58
  }
50
- export type ReadonlyObjectLevelFieldType<T extends ObjectLevelField<any, any, any, any>> = Omit<T, "setValue">;
59
+ export type ReadonlyObjectLevelFieldType<T extends ObjectLevelField<any, any, any, any>> = Omit<T, "setValue" | "trySetValue">;
51
60
  export type ObjectLevelFieldValueChangeEvent<T extends ObjectLevelField<any, any, any, any> | ReadonlyObjectLevelFieldType<ObjectLevelField<any, any, any, any>>> = T extends ObjectLevelField<any, infer InstanceType, infer ValueType, any, any> ? DispatchingEvent<[
52
61
  instance: InstanceType,
53
62
  field: T,
@@ -76,6 +85,7 @@ export declare abstract class ObjectLevelField<ObjectDataEntryType extends Objec
76
85
  protected abstract getLevelCount(entry: ObjectDataEntryType | InstanceType): number;
77
86
  getValue<LevelType extends [number] | []>(entry: ObjectDataEntryType | InstanceType, ...[level]: LevelType): LevelType extends [number] ? ValueType : ValueType[];
78
87
  setValue(entry: ObjectDataEntryType | InstanceType, ...[levelOrValue, value]: [value: ObjectDataEntryLevelFieldValueSupplier<InputValueType, ValueType>] | [level: number, value: InputValueType]): boolean;
88
+ trySetValue(entry: ObjectDataEntryType | InstanceType, levelOrValue: number | unknown, value?: unknown): boolean;
79
89
  private invokeValueChangeEvent;
80
90
  private invokeValueChangeEventRecursive;
81
91
  protected static getOrCreateValueChangeEvent<T extends ObjectLevelField, R extends ReadonlyObjectLevelFieldType<T>>(this: ReadonlyObjectLevelFieldConstructor<T>): ObjectLevelFieldValueChangeEvent<R>;