warscript 0.0.1-dev.ed60fea → 0.0.1-dev.eda504c

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 (175) hide show
  1. package/attributes.d.ts +6 -0
  2. package/attributes.lua +17 -1
  3. package/config.d.ts +5 -0
  4. package/config.lua +10 -0
  5. package/core/types/effect.d.ts +1 -3
  6. package/core/types/effect.lua +26 -29
  7. package/core/types/frame.lua +24 -21
  8. package/core/types/player.lua +3 -1
  9. package/core/types/playerCamera.d.ts +2 -0
  10. package/core/types/playerCamera.lua +123 -5
  11. package/core/types/sound.d.ts +17 -24
  12. package/core/types/sound.lua +99 -24
  13. package/core/types/tileCell.d.ts +9 -0
  14. package/core/types/tileCell.lua +92 -0
  15. package/core/types/timer.d.ts +9 -8
  16. package/core/types/timer.lua +45 -23
  17. package/core/util.lua +6 -1
  18. package/decl/native.d.ts +846 -790
  19. package/engine/behavior.d.ts +5 -0
  20. package/engine/behavior.lua +106 -27
  21. package/engine/behaviour/ability/apply-buff.d.ts +5 -0
  22. package/engine/behaviour/ability/apply-buff.lua +32 -0
  23. package/engine/behaviour/ability/apply-unit-behavior.lua +1 -0
  24. package/engine/behaviour/ability/damage.d.ts +9 -3
  25. package/engine/behaviour/ability/damage.lua +26 -38
  26. package/engine/behaviour/ability/emulate-impact.d.ts +1 -1
  27. package/engine/behaviour/ability/emulate-impact.lua +18 -3
  28. package/engine/behaviour/ability/restore-mana.d.ts +1 -1
  29. package/engine/behaviour/ability/restore-mana.lua +6 -6
  30. package/engine/behaviour/ability.d.ts +7 -2
  31. package/engine/behaviour/ability.lua +42 -24
  32. package/engine/behaviour/unit/stun-immunity.d.ts +7 -3
  33. package/engine/behaviour/unit/stun-immunity.lua +52 -27
  34. package/engine/behaviour/unit.d.ts +34 -0
  35. package/engine/behaviour/unit.lua +190 -4
  36. package/engine/buff.d.ts +57 -44
  37. package/engine/buff.lua +273 -221
  38. package/engine/internal/ability.d.ts +7 -1
  39. package/engine/internal/ability.lua +49 -11
  40. package/engine/internal/item/ability.lua +82 -14
  41. package/engine/internal/item+owner.lua +12 -6
  42. package/engine/internal/item.d.ts +20 -19
  43. package/engine/internal/item.lua +191 -74
  44. package/engine/internal/mechanics/ability-duration.lua +1 -1
  45. package/engine/internal/misc/damage-metadata-by-target.d.ts +2 -0
  46. package/engine/internal/misc/damage-metadata-by-target.lua +5 -0
  47. package/engine/internal/misc/frame-coordinates.d.ts +2 -0
  48. package/engine/internal/misc/frame-coordinates.lua +21 -0
  49. package/engine/internal/misc/get-terrain-z.d.ts +2 -0
  50. package/engine/internal/misc/get-terrain-z.lua +11 -0
  51. package/engine/internal/misc/player-local-handle.d.ts +2 -0
  52. package/engine/internal/misc/player-local-handle.lua +5 -0
  53. package/engine/internal/object-data/auto-attack-speed-increase.d.ts +1 -1
  54. package/engine/internal/object-data/auto-attack-speed-increase.lua +2 -0
  55. package/engine/internal/object-data/evasion-probability.d.ts +2 -0
  56. package/engine/internal/object-data/evasion-probability.lua +16 -0
  57. package/engine/internal/unit/ability.d.ts +35 -0
  58. package/engine/internal/unit/ability.lua +98 -9
  59. package/engine/internal/unit/add-item-to-slot-init.d.ts +2 -0
  60. package/engine/internal/unit/add-item-to-slot-init.lua +23 -0
  61. package/engine/internal/unit/add-item-to-slot.d.ts +2 -0
  62. package/engine/internal/unit/add-item-to-slot.lua +52 -0
  63. package/engine/internal/unit/allowed-targets.d.ts +1 -1
  64. package/engine/internal/unit/allowed-targets.lua +9 -1
  65. package/engine/internal/unit/bonus.d.ts +2 -0
  66. package/engine/internal/unit/bonus.lua +17 -0
  67. package/engine/internal/unit/ignore-events-items.d.ts +2 -0
  68. package/engine/internal/unit/ignore-events-items.lua +5 -0
  69. package/engine/internal/unit/item.lua +3 -4
  70. package/engine/internal/unit/order.d.ts +20 -0
  71. package/engine/internal/unit/order.lua +136 -0
  72. package/engine/internal/unit+ability.lua +10 -1
  73. package/engine/internal/unit+damage.d.ts +2 -11
  74. package/engine/internal/unit+damage.lua +10 -14
  75. package/engine/internal/unit+spellSteal.lua +1 -2
  76. package/engine/internal/unit-missile-launch.lua +42 -14
  77. package/engine/internal/unit.d.ts +35 -10
  78. package/engine/internal/unit.lua +290 -119
  79. package/engine/lightning.d.ts +12 -5
  80. package/engine/lightning.lua +48 -14
  81. package/engine/object-data/auxiliary/animation-name.d.ts +1 -0
  82. package/engine/object-data/auxiliary/animation-name.lua +16 -0
  83. package/engine/object-data/auxiliary/armor-type.d.ts +11 -0
  84. package/engine/object-data/auxiliary/armor-type.lua +46 -0
  85. package/engine/object-data/auxiliary/attachment-preset.d.ts +7 -2
  86. package/engine/object-data/auxiliary/attachment-preset.lua +4 -3
  87. package/engine/object-data/auxiliary/attack-type.d.ts +7 -8
  88. package/engine/object-data/auxiliary/attack-type.lua +42 -0
  89. package/engine/object-data/auxiliary/movement-type.d.ts +7 -7
  90. package/engine/object-data/auxiliary/movement-type.lua +22 -0
  91. package/engine/object-data/auxiliary/sound-eax.d.ts +10 -0
  92. package/engine/object-data/auxiliary/sound-eax.lua +2 -0
  93. package/engine/object-data/auxiliary/tech-tree-dependency.d.ts +1 -1
  94. package/engine/object-data/auxiliary/unit-attribute.d.ts +6 -0
  95. package/engine/object-data/auxiliary/unit-attribute.lua +9 -0
  96. package/engine/object-data/entry/ability-type/berserk.d.ts +2 -0
  97. package/engine/object-data/entry/ability-type/berserk.lua +13 -0
  98. package/engine/object-data/entry/ability-type/blank-configurable.lua +12 -1
  99. package/engine/object-data/entry/ability-type/carrion-swarm.d.ts +14 -0
  100. package/engine/object-data/entry/ability-type/carrion-swarm.lua +65 -0
  101. package/engine/object-data/entry/ability-type/disease-cloud.lua +2 -2
  102. package/engine/object-data/entry/ability-type/engineering-upgrade.lua +2 -2
  103. package/engine/object-data/entry/ability-type/ensnare.d.ts +12 -0
  104. package/engine/object-data/entry/ability-type/ensnare.lua +52 -0
  105. package/engine/object-data/entry/ability-type/feral-spirit.lua +2 -2
  106. package/engine/object-data/entry/ability-type/permanent-invisibility.d.ts +8 -0
  107. package/engine/object-data/entry/ability-type/permanent-invisibility.lua +26 -0
  108. package/engine/object-data/entry/ability-type/phase-shift.d.ts +10 -0
  109. package/engine/object-data/entry/ability-type/phase-shift.lua +39 -0
  110. package/engine/object-data/entry/ability-type/phoenix-morph.lua +4 -4
  111. package/engine/object-data/entry/ability-type/raise-dead.d.ts +17 -0
  112. package/engine/object-data/entry/ability-type/raise-dead.lua +78 -0
  113. package/engine/object-data/entry/ability-type/shock-wave.d.ts +4 -0
  114. package/engine/object-data/entry/ability-type/shock-wave.lua +26 -0
  115. package/engine/object-data/entry/ability-type/slow-poison.d.ts +10 -0
  116. package/engine/object-data/entry/ability-type/slow-poison.lua +58 -0
  117. package/engine/object-data/entry/ability-type/summon-quilbeast.lua +2 -2
  118. package/engine/object-data/entry/ability-type/summon-water-elemental.lua +2 -2
  119. package/engine/object-data/entry/ability-type/web.d.ts +12 -0
  120. package/engine/object-data/entry/ability-type/web.lua +52 -0
  121. package/engine/object-data/entry/ability-type.d.ts +19 -17
  122. package/engine/object-data/entry/ability-type.lua +85 -24
  123. package/engine/object-data/entry/buff-type/applicable.lua +18 -37
  124. package/engine/object-data/entry/buff-type.d.ts +6 -12
  125. package/engine/object-data/entry/buff-type.lua +13 -29
  126. package/engine/object-data/entry/destructible-type.d.ts +1 -1
  127. package/engine/object-data/entry/item-type.d.ts +1 -1
  128. package/engine/object-data/entry/item-type.lua +4 -4
  129. package/engine/object-data/entry/lightning-type.d.ts +1 -1
  130. package/engine/object-data/entry/sound-preset.d.ts +33 -0
  131. package/engine/object-data/entry/sound-preset.lua +140 -0
  132. package/engine/object-data/entry/unit-type.d.ts +21 -5
  133. package/engine/object-data/entry/unit-type.lua +214 -93
  134. package/engine/object-data/entry/upgrade.d.ts +1 -1
  135. package/engine/object-data/entry/upgrade.lua +4 -4
  136. package/engine/object-data/entry.d.ts +16 -14
  137. package/engine/object-data/entry.lua +60 -32
  138. package/engine/object-field/ability.d.ts +4 -4
  139. package/engine/object-field/ability.lua +7 -6
  140. package/engine/object-field/unit.d.ts +57 -3
  141. package/engine/object-field/unit.lua +207 -7
  142. package/engine/object-field.d.ts +17 -6
  143. package/engine/object-field.lua +188 -92
  144. package/engine/random.d.ts +9 -0
  145. package/engine/random.lua +13 -0
  146. package/engine/standard/entries/buff-type.d.ts +3 -0
  147. package/engine/standard/entries/buff-type.lua +3 -0
  148. package/engine/standard/entries/sound-preset.d.ts +10 -0
  149. package/engine/standard/entries/sound-preset.lua +10 -0
  150. package/engine/standard/fields/unit.d.ts +4 -0
  151. package/engine/standard/fields/unit.lua +7 -0
  152. package/engine/text-tag.d.ts +36 -2
  153. package/engine/text-tag.lua +249 -10
  154. package/engine/unit.d.ts +2 -0
  155. package/engine/unit.lua +2 -0
  156. package/objutil/buff.lua +2 -3
  157. package/objutil/unit.lua +8 -0
  158. package/package.json +2 -2
  159. package/patch-lualib.lua +1 -1
  160. package/utility/arrays.d.ts +2 -0
  161. package/utility/arrays.lua +11 -0
  162. package/utility/callback-array.d.ts +17 -0
  163. package/utility/callback-array.lua +61 -0
  164. package/utility/functions.d.ts +8 -0
  165. package/utility/functions.lua +13 -0
  166. package/utility/linked-set.d.ts +1 -0
  167. package/utility/linked-set.lua +5 -1
  168. package/utility/lua-maps.d.ts +15 -2
  169. package/utility/lua-maps.lua +53 -2
  170. package/utility/lua-sets.d.ts +2 -0
  171. package/utility/lua-sets.lua +7 -0
  172. package/utility/reflection.lua +11 -7
  173. package/utility/types.d.ts +3 -0
  174. package/core/types/order.d.ts +0 -25
  175. package/core/types/order.lua +0 -55
@@ -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<[
@@ -35,14 +36,22 @@ export type ObjectFieldValueChangeEvent<T extends ObjectField<any, any, any, any
35
36
  ]> : never;
36
37
  export type ReadonlyObjectFieldType<T extends ObjectField<any, any, any, any>> = Omit<T, "setValue" | "removeValue" | "trySetValue">;
37
38
  type ReadonlyObjectFieldConstructor<T extends ObjectField> = OmitConstructor<typeof ObjectField> & (abstract new (...args: any[]) => ReadonlyObjectFieldType<T>);
39
+ type ObjectFieldModifier<InstanceType extends AnyNotNil, ValueType extends number | string | boolean> = (instance: InstanceType, currentValue: ValueType, originalValue: ValueType) => ValueType;
38
40
  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
41
  protected abstract readonly defaultValue: ValueType;
40
42
  protected abstract getNativeFieldValue(instance: InstanceType): ValueType;
41
43
  protected abstract setNativeFieldValue(instance: InstanceType, value: ValueType): boolean;
42
- getValue(entry: ObjectDataEntryType | InstanceType): ValueType;
44
+ private originalValueByInstance?;
45
+ private modifiersByInstance?;
46
+ getValue(entry: ObjectDataEntryType | InstanceType, includeModifiers?: boolean): ValueType;
43
47
  setValue(entry: ObjectDataEntryType | InstanceType, value: ValueType): boolean;
48
+ applyModifier(instance: InstanceType, modifier: ObjectFieldModifier<InstanceType, ValueType>): void;
49
+ removeModifier(instance: InstanceType, modifier: ObjectFieldModifier<InstanceType, ValueType>): boolean;
44
50
  removeValue(entry: ObjectDataEntryType): boolean;
45
51
  trySetValue(entry: ObjectDataEntryType | InstanceType, value: unknown): boolean;
52
+ private getActualValue;
53
+ private setActualValue;
54
+ private calculateActualValue;
46
55
  private invokeValueChangeEvent;
47
56
  private invokeValueChangeEventRecursive;
48
57
  protected static getOrCreateValueChangeEvent<T extends ObjectField, R extends ReadonlyObjectFieldType<T>>(this: ReadonlyObjectFieldConstructor<T>): ObjectFieldValueChangeEvent<R>;
@@ -71,6 +80,8 @@ export declare abstract class ObjectArrayField<ObjectDataEntryType extends Objec
71
80
  setValue(entry: ObjectDataEntryType | InstanceType, value: ValueType[]): boolean;
72
81
  }
73
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?;
74
85
  protected abstract readonly defaultValue: ValueType;
75
86
  protected abstract getNativeFieldValue(instance: InstanceType, level: number): ValueType;
76
87
  protected abstract setNativeFieldValue(instance: InstanceType, level: number, value: ValueType): boolean;
@@ -20,6 +20,14 @@ local extractObjectDataEntryLevelFieldValue = ____entry.extractObjectDataEntryLe
20
20
  local ObjectDataEntry = ____entry.ObjectDataEntry
21
21
  local ____object_2Ddata_2Dentry_2Did_2Dgenerator = require("engine.object-data.utility.object-data-entry-id-generator")
22
22
  local ObjectDataEntryIdGenerator = ____object_2Ddata_2Dentry_2Did_2Dgenerator.ObjectDataEntryIdGenerator
23
+ local ____linked_2Dset = require("utility.linked-set")
24
+ local mutableLinkedSet = ____linked_2Dset.mutableLinkedSet
25
+ local ____lua_2Dmaps = require("utility.lua-maps")
26
+ local emptyLuaMap = ____lua_2Dmaps.emptyLuaMap
27
+ local getOrPut = ____lua_2Dmaps.getOrPut
28
+ local mutableWeakLuaMap = ____lua_2Dmaps.mutableWeakLuaMap
29
+ local ____arrays = require("utility.arrays")
30
+ local emptyArray = ____arrays.emptyArray
23
31
  local compiletimeDefaultValueByObjectDataEntryIdByObjectFieldId = {}
24
32
  local defaultValueByObjectDataEntryIdByObjectFieldId = postcompile(function() return compiletimeDefaultValueByObjectDataEntryIdByObjectFieldId end)
25
33
  local objectFieldById = {}
@@ -29,7 +37,11 @@ local idGenerator = __TS__New(
29
37
  )
30
38
  local ObjectFieldBase = __TS__Class()
31
39
  ObjectFieldBase.name = "ObjectFieldBase"
32
- function ObjectFieldBase.prototype.____constructor(self, id)
40
+ function ObjectFieldBase.prototype.____constructor(self, id, isGlobal)
41
+ if isGlobal == nil then
42
+ isGlobal = false
43
+ end
44
+ self.isGlobal = isGlobal
33
45
  self.valueByInstance = setmetatable({}, {__mode = "k"})
34
46
  if objectFieldById[id] ~= nil then
35
47
  error(
@@ -46,14 +58,15 @@ end
46
58
  function ObjectFieldBase.prototype.supports(self, instance)
47
59
  return __TS__InstanceOf(instance, self.instanceClass)
48
60
  end
49
- function ObjectFieldBase.prototype.hasValue(self, instance)
61
+ function ObjectFieldBase.prototype.hasValue(self, objectDataEntryId)
50
62
  local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
51
- return defaultValueByObjectDataEntryId ~= nil and defaultValueByObjectDataEntryId[self:getObjectDataEntryId(instance)] ~= nil or self:hasNativeFieldValue(instance)
63
+ return self.isGlobal or defaultValueByObjectDataEntryId ~= nil and defaultValueByObjectDataEntryId[objectDataEntryId] ~= nil or self:hasNativeFieldValue(objectDataEntryId)
52
64
  end
53
- function ObjectFieldBase.create(self, id)
65
+ function ObjectFieldBase.create(self, id, isGlobal)
54
66
  return __TS__New(
55
67
  self,
56
- id or idGenerator:next()
68
+ id or idGenerator:next(),
69
+ isGlobal
57
70
  )
58
71
  end
59
72
  function ObjectFieldBase.of(self, id)
@@ -75,7 +88,7 @@ ____exports.ObjectField = __TS__Class()
75
88
  local ObjectField = ____exports.ObjectField
76
89
  ObjectField.name = "ObjectField"
77
90
  __TS__ClassExtends(ObjectField, ObjectFieldBase)
78
- function ObjectField.prototype.getValue(self, entry)
91
+ function ObjectField.prototype.getValue(self, entry, includeModifiers)
79
92
  if __TS__InstanceOf(entry, ObjectDataEntry) then
80
93
  local defaultValueByObjectDataEntryId = (warpack.compiletime and compiletimeDefaultValueByObjectDataEntryIdByObjectFieldId or defaultValueByObjectDataEntryIdByObjectFieldId)[self.id]
81
94
  if defaultValueByObjectDataEntryId ~= nil then
@@ -86,22 +99,16 @@ function ObjectField.prototype.getValue(self, entry)
86
99
  end
87
100
  return self.defaultValue
88
101
  end
89
- local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
90
- if defaultValueByObjectDataEntryId ~= nil then
91
- local defaultValue = defaultValueByObjectDataEntryId[self:getObjectDataEntryId(entry)]
92
- if defaultValue ~= nil then
93
- local ____self_valueByInstance_entry_0 = self.valueByInstance[entry]
94
- if ____self_valueByInstance_entry_0 == nil then
95
- ____self_valueByInstance_entry_0 = defaultValue
102
+ if includeModifiers == false then
103
+ local originalValueByInstance = self.originalValueByInstance
104
+ if originalValueByInstance ~= nil then
105
+ local originalValue = originalValueByInstance[entry]
106
+ if originalValue ~= nil then
107
+ return originalValue
96
108
  end
97
- return ____self_valueByInstance_entry_0
98
109
  end
99
110
  end
100
- local ____temp_1 = self:getNativeFieldValue(entry)
101
- if ____temp_1 == nil then
102
- ____temp_1 = self.defaultValue
103
- end
104
- return ____temp_1
111
+ return self:getActualValue(entry)
105
112
  end
106
113
  function ObjectField.prototype.setValue(self, entry, value)
107
114
  if __TS__InstanceOf(entry, ObjectDataEntry) then
@@ -116,37 +123,53 @@ function ObjectField.prototype.setValue(self, entry, value)
116
123
  defaultValueByObjectDataEntryId[entry.id] = value
117
124
  return true
118
125
  end
119
- local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
120
- if defaultValueByObjectDataEntryId ~= nil then
121
- local defaultValue = defaultValueByObjectDataEntryId[self:getObjectDataEntryId(entry)]
122
- if defaultValue ~= nil then
123
- local ____self_valueByInstance_entry_2 = self.valueByInstance[entry]
124
- if ____self_valueByInstance_entry_2 == nil then
125
- ____self_valueByInstance_entry_2 = defaultValue
126
- end
127
- local ____self_valueByInstance_entry_2_3 = ____self_valueByInstance_entry_2
128
- if ____self_valueByInstance_entry_2_3 == nil then
129
- ____self_valueByInstance_entry_2_3 = self.defaultValue
126
+ local modifiersByInstance = self.modifiersByInstance
127
+ if modifiersByInstance ~= nil then
128
+ local modifiers = modifiersByInstance[entry]
129
+ if modifiers ~= nil and modifiers.size ~= 0 then
130
+ local originalValueByInstance = self.originalValueByInstance
131
+ if originalValueByInstance == nil then
132
+ originalValueByInstance = mutableWeakLuaMap()
133
+ self.originalValueByInstance = originalValueByInstance
130
134
  end
131
- local previousValue = ____self_valueByInstance_entry_2_3
132
- if value ~= previousValue then
133
- self.valueByInstance[entry] = value
134
- self:invokeValueChangeEvent(entry, self, previousValue, value)
135
- end
136
- return true
135
+ originalValueByInstance[entry] = value
136
+ value = self:calculateActualValue(entry)
137
137
  end
138
138
  end
139
- if not self:hasNativeFieldValue(entry) then
140
- return false
139
+ return self:setActualValue(entry, value)
140
+ end
141
+ function ObjectField.prototype.applyModifier(self, instance, modifier)
142
+ local modifiersByInstance = self.modifiersByInstance
143
+ if modifiersByInstance == nil then
144
+ modifiersByInstance = mutableWeakLuaMap()
145
+ self.modifiersByInstance = modifiersByInstance
146
+ end
147
+ if getOrPut(modifiersByInstance, instance, mutableLinkedSet):add(modifier) then
148
+ local originalValueByInstance = self.originalValueByInstance
149
+ if originalValueByInstance == nil then
150
+ originalValueByInstance = mutableWeakLuaMap()
151
+ self.originalValueByInstance = originalValueByInstance
152
+ end
153
+ originalValueByInstance[instance] = self:getActualValue(instance)
154
+ self:setActualValue(
155
+ instance,
156
+ self:calculateActualValue(instance)
157
+ )
141
158
  end
142
- local previousValue = self:getNativeFieldValue(entry)
143
- if value ~= previousValue then
144
- if not self:setNativeFieldValue(entry, value) then
145
- return false
159
+ end
160
+ function ObjectField.prototype.removeModifier(self, instance, modifier)
161
+ local modifiersByInstance = self.modifiersByInstance
162
+ if modifiersByInstance ~= nil then
163
+ local modifiers = modifiersByInstance[instance]
164
+ if modifiers ~= nil and modifiers:remove(modifier) then
165
+ self:setActualValue(
166
+ instance,
167
+ self:calculateActualValue(instance)
168
+ )
169
+ return true
146
170
  end
147
- self:invokeValueChangeEvent(entry, self, previousValue, value)
148
171
  end
149
- return true
172
+ return false
150
173
  end
151
174
  function ObjectField.prototype.removeValue(self, entry)
152
175
  if not warpack.compiletime then
@@ -168,6 +191,78 @@ function ObjectField.prototype.trySetValue(self, entry, value)
168
191
  end
169
192
  return self:setValue(entry, value)
170
193
  end
194
+ function ObjectField.prototype.getActualValue(self, instance)
195
+ local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
196
+ if defaultValueByObjectDataEntryId ~= nil or self.isGlobal then
197
+ local defaultValue = (defaultValueByObjectDataEntryId or emptyLuaMap())[self:getObjectDataEntryId(instance)]
198
+ if defaultValue ~= nil or self.isGlobal then
199
+ local ____self_valueByInstance_instance_0 = self.valueByInstance[instance]
200
+ if ____self_valueByInstance_instance_0 == nil then
201
+ ____self_valueByInstance_instance_0 = defaultValue
202
+ end
203
+ local ____self_valueByInstance_instance_0_1 = ____self_valueByInstance_instance_0
204
+ if ____self_valueByInstance_instance_0_1 == nil then
205
+ ____self_valueByInstance_instance_0_1 = self.defaultValue
206
+ end
207
+ return ____self_valueByInstance_instance_0_1
208
+ end
209
+ end
210
+ local ____temp_2 = self:getNativeFieldValue(instance)
211
+ if ____temp_2 == nil then
212
+ ____temp_2 = self.defaultValue
213
+ end
214
+ return ____temp_2
215
+ end
216
+ function ObjectField.prototype.setActualValue(self, instance, value)
217
+ local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
218
+ local objectDataEntryId = self:getObjectDataEntryId(instance)
219
+ if defaultValueByObjectDataEntryId ~= nil or self.isGlobal then
220
+ local defaultValue = (defaultValueByObjectDataEntryId or emptyLuaMap())[objectDataEntryId]
221
+ if defaultValue ~= nil or self.isGlobal then
222
+ local ____self_valueByInstance_instance_3 = self.valueByInstance[instance]
223
+ if ____self_valueByInstance_instance_3 == nil then
224
+ ____self_valueByInstance_instance_3 = defaultValue
225
+ end
226
+ local ____self_valueByInstance_instance_3_4 = ____self_valueByInstance_instance_3
227
+ if ____self_valueByInstance_instance_3_4 == nil then
228
+ ____self_valueByInstance_instance_3_4 = self.defaultValue
229
+ end
230
+ local previousValue = ____self_valueByInstance_instance_3_4
231
+ if value ~= previousValue then
232
+ self.valueByInstance[instance] = value
233
+ self:invokeValueChangeEvent(instance, self, previousValue, value)
234
+ end
235
+ return true
236
+ end
237
+ end
238
+ if not self:hasNativeFieldValue(objectDataEntryId) then
239
+ return false
240
+ end
241
+ local previousValue = self:getNativeFieldValue(instance)
242
+ if value ~= previousValue then
243
+ if not self:setNativeFieldValue(instance, value) then
244
+ return false
245
+ end
246
+ self:invokeValueChangeEvent(instance, self, previousValue, value)
247
+ end
248
+ return true
249
+ end
250
+ function ObjectField.prototype.calculateActualValue(self, instance)
251
+ local ____opt_5 = self.originalValueByInstance
252
+ local originalValue = ____opt_5 and ____opt_5[instance]
253
+ local ____opt_7 = self.modifiersByInstance
254
+ local modifiers = ____opt_7 and ____opt_7[instance]
255
+ if originalValue ~= nil then
256
+ local value = originalValue
257
+ if modifiers ~= nil then
258
+ for modifier in pairs(modifiers) do
259
+ value = modifier(instance, value, originalValue)
260
+ end
261
+ end
262
+ return value
263
+ end
264
+ return self.defaultValue
265
+ end
171
266
  function ObjectField.prototype.invokeValueChangeEvent(self, ...)
172
267
  self:invokeValueChangeEventRecursive(
173
268
  getClass(self),
@@ -221,37 +316,37 @@ function ObjectArrayField.prototype.getValue(self, entry, index)
221
316
  if defaultValueByObjectDataEntryId ~= nil then
222
317
  local value = defaultValueByObjectDataEntryId[entry.id]
223
318
  if value ~= nil then
224
- local ____temp_5
319
+ local ____temp_10
225
320
  if index == nil then
226
- ____temp_5 = value
321
+ ____temp_10 = value
227
322
  else
228
- local ____value_index_4 = value[index + 1]
229
- if ____value_index_4 == nil then
230
- ____value_index_4 = self.defaultValue
323
+ local ____value_index_9 = value[index + 1]
324
+ if ____value_index_9 == nil then
325
+ ____value_index_9 = self.defaultValue
231
326
  end
232
- ____temp_5 = ____value_index_4
327
+ ____temp_10 = ____value_index_9
233
328
  end
234
- return ____temp_5
329
+ return ____temp_10
235
330
  end
236
331
  end
237
332
  return index == nil and ({}) or self.defaultValue
238
333
  end
239
334
  local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
240
- if defaultValueByObjectDataEntryId ~= nil then
241
- local defaultValue = defaultValueByObjectDataEntryId[self:getObjectDataEntryId(entry)]
242
- if defaultValue ~= nil then
243
- local value = self.valueByInstance[entry] or defaultValue
244
- local ____temp_7
335
+ if defaultValueByObjectDataEntryId ~= nil or self.isGlobal then
336
+ local defaultValue = (defaultValueByObjectDataEntryId or emptyLuaMap())[self:getObjectDataEntryId(entry)]
337
+ if defaultValue ~= nil or self.isGlobal then
338
+ local value = self.valueByInstance[entry] or defaultValue or emptyArray()
339
+ local ____temp_12
245
340
  if index == nil then
246
- ____temp_7 = value
341
+ ____temp_12 = value
247
342
  else
248
- local ____value_index_6 = value[index + 1]
249
- if ____value_index_6 == nil then
250
- ____value_index_6 = self.defaultValue
343
+ local ____value_index_11 = value[index + 1]
344
+ if ____value_index_11 == nil then
345
+ ____value_index_11 = self.defaultValue
251
346
  end
252
- ____temp_7 = ____value_index_6
347
+ ____temp_12 = ____value_index_11
253
348
  end
254
- return ____temp_7
349
+ return ____temp_12
255
350
  end
256
351
  end
257
352
  if index ~= nil then
@@ -296,36 +391,36 @@ function ObjectLevelField.prototype.getValue(self, entry, level)
296
391
  if defaultValueByObjectDataEntryId ~= nil then
297
392
  local valueByLevel = defaultValueByObjectDataEntryId[entry.id]
298
393
  if valueByLevel ~= nil then
299
- local ____valueByLevel_index_8 = valueByLevel[level + 1]
300
- if ____valueByLevel_index_8 == nil then
301
- ____valueByLevel_index_8 = self.defaultValue
394
+ local ____valueByLevel_index_13 = valueByLevel[level + 1]
395
+ if ____valueByLevel_index_13 == nil then
396
+ ____valueByLevel_index_13 = self.defaultValue
302
397
  end
303
- return ____valueByLevel_index_8
398
+ return ____valueByLevel_index_13
304
399
  end
305
400
  end
306
401
  return self.defaultValue
307
402
  end
308
403
  local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
309
- if defaultValueByObjectDataEntryId ~= nil then
310
- local defaultValueByLevel = defaultValueByObjectDataEntryId[self:getObjectDataEntryId(entry)]
311
- if defaultValueByLevel ~= nil then
312
- local ____opt_9 = self.valueByInstance[entry]
313
- local ____temp_11 = ____opt_9 and ____opt_9[level + 1]
314
- if ____temp_11 == nil then
315
- ____temp_11 = defaultValueByLevel[level + 1]
404
+ if defaultValueByObjectDataEntryId ~= nil or self.isGlobal then
405
+ local defaultValueByLevel = (defaultValueByObjectDataEntryId or emptyLuaMap())[self:getObjectDataEntryId(entry)]
406
+ if defaultValueByLevel ~= nil or self.isGlobal then
407
+ local ____opt_14 = self.valueByInstance[entry]
408
+ local ____temp_16 = ____opt_14 and ____opt_14[level + 1]
409
+ if ____temp_16 == nil then
410
+ ____temp_16 = (defaultValueByLevel or emptyArray())[level + 1]
316
411
  end
317
- local ____temp_11_12 = ____temp_11
318
- if ____temp_11_12 == nil then
319
- ____temp_11_12 = self.defaultValue
412
+ local ____temp_16_17 = ____temp_16
413
+ if ____temp_16_17 == nil then
414
+ ____temp_16_17 = self.defaultValue
320
415
  end
321
- return ____temp_11_12
416
+ return ____temp_16_17
322
417
  end
323
418
  end
324
- local ____temp_13 = self:getNativeFieldValue(entry, level)
325
- if ____temp_13 == nil then
326
- ____temp_13 = self.defaultValue
419
+ local ____temp_18 = self:getNativeFieldValue(entry, level)
420
+ if ____temp_18 == nil then
421
+ ____temp_18 = self.defaultValue
327
422
  end
328
- return ____temp_13
423
+ return ____temp_18
329
424
  end
330
425
  function ObjectLevelField.prototype.setValue(self, entry, levelOrValue, value)
331
426
  if value == nil then
@@ -366,23 +461,24 @@ function ObjectLevelField.prototype.setValue(self, entry, levelOrValue, value)
366
461
  return true
367
462
  end
368
463
  local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
369
- if defaultValueByObjectDataEntryId ~= nil then
370
- local defaultValueByLevel = defaultValueByObjectDataEntryId[self:getObjectDataEntryId(entry)]
371
- if defaultValueByLevel ~= nil then
464
+ local objectDataEntryId = self:getObjectDataEntryId(entry)
465
+ if defaultValueByObjectDataEntryId ~= nil or self.isGlobal then
466
+ local defaultValueByLevel = (defaultValueByObjectDataEntryId or emptyLuaMap())[objectDataEntryId]
467
+ if defaultValueByLevel ~= nil or self.isGlobal then
372
468
  local valueByLevel = self.valueByInstance[entry]
373
469
  if valueByLevel == nil then
374
470
  valueByLevel = {}
375
471
  self.valueByInstance[entry] = valueByLevel
376
472
  end
377
- local ____valueByLevel_index_14 = valueByLevel[level + 1]
378
- if ____valueByLevel_index_14 == nil then
379
- ____valueByLevel_index_14 = defaultValueByLevel[level + 1]
473
+ local ____valueByLevel_index_19 = valueByLevel[level + 1]
474
+ if ____valueByLevel_index_19 == nil then
475
+ ____valueByLevel_index_19 = (defaultValueByLevel or emptyArray())[level + 1]
380
476
  end
381
- local ____valueByLevel_index_14_15 = ____valueByLevel_index_14
382
- if ____valueByLevel_index_14_15 == nil then
383
- ____valueByLevel_index_14_15 = self.defaultValue
477
+ local ____valueByLevel_index_19_20 = ____valueByLevel_index_19
478
+ if ____valueByLevel_index_19_20 == nil then
479
+ ____valueByLevel_index_19_20 = self.defaultValue
384
480
  end
385
- local previousValue = ____valueByLevel_index_14_15
481
+ local previousValue = ____valueByLevel_index_19_20
386
482
  if value ~= previousValue then
387
483
  valueByLevel[level + 1] = value
388
484
  self:invokeValueChangeEvent(
@@ -396,7 +492,7 @@ function ObjectLevelField.prototype.setValue(self, entry, levelOrValue, value)
396
492
  return true
397
493
  end
398
494
  end
399
- if not self:hasNativeFieldValue(entry) then
495
+ if not self:hasNativeFieldValue(objectDataEntryId) then
400
496
  return false
401
497
  end
402
498
  local previousValue = self:getNativeFieldValue(entry, level)
@@ -1,4 +1,5 @@
1
1
  /** @noSelfInFile */
2
+ import { ReadonlyNonEmptyArray } from "../utility/types";
2
3
  export declare const randomAngle: () => number;
3
4
  export declare const randomInteger: {
4
5
  (upperBound?: number): number;
@@ -9,3 +10,11 @@ export declare const randomFloat: {
9
10
  (lowerBound: number, upperBound: number): number;
10
11
  };
11
12
  export declare const randomXY: (centerX: number, centerY: number, range: number) => LuaMultiReturn<[x: number, y: number]>;
13
+ export declare const randomElement: {
14
+ <T>(array: ReadonlyNonEmptyArray<T>): T;
15
+ <T>(array: ReadonlyArray<T>): T | undefined;
16
+ };
17
+ export declare const random: {
18
+ <T>(element: T, ...elements: T[]): T;
19
+ <T>(...elements: T[]): T | undefined;
20
+ };
package/engine/random.lua CHANGED
@@ -4,6 +4,7 @@ local MAXIMUM_INTEGER = ____math.MAXIMUM_INTEGER
4
4
  local PI = ____math.PI
5
5
  local getRandomInt = GetRandomInt
6
6
  local getRandomReal = GetRandomReal
7
+ local select = _G.select
7
8
  local cos = math.cos
8
9
  local sin = math.sin
9
10
  local sqrt = math.sqrt
@@ -15,4 +16,16 @@ ____exports.randomXY = function(centerX, centerY, range)
15
16
  local t = getRandomReal(0, 1) * 2 * PI
16
17
  return centerX + r * cos(t), centerY + r * sin(t)
17
18
  end
19
+ ____exports.randomElement = function(array)
20
+ return array[getRandomInt(1, #array)]
21
+ end
22
+ ____exports.random = function(...)
23
+ return (select(
24
+ getRandomInt(
25
+ 1,
26
+ select("#", ...)
27
+ ),
28
+ ...
29
+ ))
30
+ end
18
31
  return ____exports
@@ -0,0 +1,3 @@
1
+ /** @noSelfInFile */
2
+ import { StandardBuffTypeId } from "../../object-data/entry/buff-type";
3
+ export declare const CHEMICAL_RAGE_BUFF_TYPE_ID: StandardBuffTypeId;
@@ -0,0 +1,3 @@
1
+ local ____exports = {}
2
+ ____exports.CHEMICAL_RAGE_BUFF_TYPE_ID = fourCC("BNcr")
3
+ return ____exports
@@ -0,0 +1,10 @@
1
+ /** @noSelfInFile */
2
+ import { StandardSoundPresetId } from "../../object-data/entry/sound-preset";
3
+ export declare const ABOMINATION_PISSED_SOUND_PRESET_ID: StandardSoundPresetId;
4
+ export declare const ABOMINATION_READY_SOUND_PRESET_ID: StandardSoundPresetId;
5
+ export declare const ABOMINATION_WAR_CRY_SOUND_PRESET_ID: StandardSoundPresetId;
6
+ export declare const AXE_MEDIUM_CHOP_WOOD_SOUND_PRESET_ID: StandardSoundPresetId;
7
+ export declare const IMPALE_SOUND_PRESET_ID: StandardSoundPresetId;
8
+ export declare const IMPALE_HIT_SOUND_PRESET_ID: StandardSoundPresetId;
9
+ export declare const IMPALE_LAND_SOUND_PRESET_ID: StandardSoundPresetId;
10
+ export declare const IMPALE_CAST_SOUND_PRESET_ID: StandardSoundPresetId;
@@ -0,0 +1,10 @@
1
+ local ____exports = {}
2
+ ____exports.ABOMINATION_PISSED_SOUND_PRESET_ID = "AbominationPissed"
3
+ ____exports.ABOMINATION_READY_SOUND_PRESET_ID = "AbominationReady"
4
+ ____exports.ABOMINATION_WAR_CRY_SOUND_PRESET_ID = "AbominationWarcry"
5
+ ____exports.AXE_MEDIUM_CHOP_WOOD_SOUND_PRESET_ID = "AxeMediumChopWood"
6
+ ____exports.IMPALE_SOUND_PRESET_ID = "Impale"
7
+ ____exports.IMPALE_HIT_SOUND_PRESET_ID = "ImpaleHit"
8
+ ____exports.IMPALE_LAND_SOUND_PRESET_ID = "ImpaleLand"
9
+ ____exports.IMPALE_CAST_SOUND_PRESET_ID = "ImpaleCast"
10
+ return ____exports
@@ -0,0 +1,4 @@
1
+ /** @noSelfInFile */
2
+ import { UnitClassificationsField, UnitPropulsionWindowField } from "../../object-field/unit";
3
+ export declare const PROPULSION_WINDOW_UNIT_FLOAT_FIELD: UnitPropulsionWindowField & symbol;
4
+ export declare const UNIT_CLASSIFICATIONS_FIELD: UnitClassificationsField & symbol;
@@ -0,0 +1,7 @@
1
+ local ____exports = {}
2
+ local ____unit = require("engine.object-field.unit")
3
+ local UnitClassificationsField = ____unit.UnitClassificationsField
4
+ local UnitPropulsionWindowField = ____unit.UnitPropulsionWindowField
5
+ ____exports.PROPULSION_WINDOW_UNIT_FLOAT_FIELD = UnitPropulsionWindowField:create(fourCC("urpw"))
6
+ ____exports.UNIT_CLASSIFICATIONS_FIELD = UnitClassificationsField:create(fourCC("utyp"))
7
+ return ____exports
@@ -1,5 +1,7 @@
1
1
  /** @noSelfInFile */
2
2
  import { Color } from "../core/types/color";
3
+ import { Unit } from "./internal/unit";
4
+ import { AbstractDestroyable, Destructor } from "../destroyable";
3
5
  export type TextTagPreset = {
4
6
  fadepoint: number;
5
7
  lifespan: number;
@@ -10,9 +12,39 @@ export type TextTagPreset = {
10
12
  velocityY: number;
11
13
  color: Color;
12
14
  };
13
- export declare class TextTag {
14
- private readonly handle;
15
+ declare const enum TextTagPropertyKey {
16
+ UNIT = 100,
17
+ HANDLE = 101,
18
+ CONFIGURATION = 102,
19
+ TEXT = 103,
20
+ FONT_SIZE = 104,
21
+ COLOR = 105,
22
+ X = 106,
23
+ Y = 107
24
+ }
25
+ export declare class TextTag extends AbstractDestroyable {
26
+ private [TextTagPropertyKey.HANDLE]?;
27
+ private [TextTagPropertyKey.CONFIGURATION]?;
28
+ private [TextTagPropertyKey.TEXT]?;
29
+ private [TextTagPropertyKey.FONT_SIZE]?;
30
+ private [TextTagPropertyKey.COLOR]?;
31
+ private [TextTagPropertyKey.UNIT]?;
32
+ private [TextTagPropertyKey.X]?;
33
+ private [TextTagPropertyKey.Y]?;
15
34
  private constructor();
35
+ protected onDestroy(): Destructor;
36
+ get text(): string;
37
+ set text(text: string);
38
+ get fontSize(): number;
39
+ set fontSize(fontSize: number);
40
+ get color(): Color;
41
+ set color(color: Color);
42
+ get unit(): Unit | undefined;
43
+ set unit(unit: Unit | undefined);
44
+ get x(): number;
45
+ set x(x: number);
46
+ get y(): number;
47
+ set y(y: number);
16
48
  static BASE: Readonly<TextTagPreset>;
17
49
  static BASH: Readonly<TextTagPreset>;
18
50
  static CRITICAL_STRIKE: Readonly<TextTagPreset>;
@@ -22,4 +54,6 @@ export declare class TextTag {
22
54
  static MISS: Readonly<TextTagPreset>;
23
55
  static SHADOW_STRIKE: Readonly<TextTagPreset>;
24
56
  static flash(configuration: Readonly<TextTagPreset>, text: string, x: number, y: number, z?: number): void;
57
+ static create(configuration: Readonly<TextTagPreset>, text: string, unit: Unit): TextTag;
25
58
  }
59
+ export {};