warscript 0.0.1-dev.148c073 → 0.0.1-dev.1766d07
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.
- package/attributes.d.ts +5 -0
- package/attributes.lua +8 -1
- package/core/types/effect.d.ts +1 -3
- package/core/types/effect.lua +26 -29
- package/core/types/order.d.ts +1 -0
- package/core/types/order.lua +11 -1
- package/core/types/sound.lua +5 -0
- package/core/types/timer.d.ts +6 -7
- package/core/types/timer.lua +18 -21
- package/decl/native.d.ts +840 -786
- package/engine/behaviour/ability/damage.d.ts +6 -3
- package/engine/behaviour/ability/damage.lua +24 -36
- package/engine/behaviour/ability/emulate-impact.lua +16 -2
- package/engine/behaviour/ability.d.ts +4 -1
- package/engine/behaviour/ability.lua +7 -5
- package/engine/behaviour/unit.d.ts +15 -0
- package/engine/behaviour/unit.lua +114 -4
- package/engine/internal/ability.d.ts +4 -0
- package/engine/internal/ability.lua +17 -0
- package/engine/internal/item/ability.lua +12 -10
- package/engine/internal/item.d.ts +5 -2
- package/engine/internal/item.lua +75 -3
- package/engine/internal/misc/damage-metadata-by-target.d.ts +2 -0
- package/engine/internal/misc/damage-metadata-by-target.lua +5 -0
- package/engine/internal/unit/ability.d.ts +5 -0
- package/engine/internal/unit/ability.lua +14 -0
- package/engine/internal/unit/allowed-targets.d.ts +1 -1
- package/engine/internal/unit/allowed-targets.lua +9 -1
- package/engine/internal/unit+damage.d.ts +2 -11
- package/engine/internal/unit+damage.lua +10 -14
- package/engine/internal/unit+spellSteal.lua +1 -2
- package/engine/internal/unit-missile-launch.lua +1 -1
- package/engine/internal/unit.d.ts +20 -3
- package/engine/internal/unit.lua +163 -37
- package/engine/object-data/auxiliary/attachment-preset.d.ts +7 -2
- package/engine/object-data/auxiliary/attachment-preset.lua +4 -3
- package/engine/object-data/auxiliary/attack-type.d.ts +7 -8
- package/engine/object-data/auxiliary/attack-type.lua +42 -0
- package/engine/object-data/auxiliary/movement-type.d.ts +7 -7
- package/engine/object-data/auxiliary/movement-type.lua +22 -0
- package/engine/object-data/auxiliary/unit-attribute.d.ts +6 -0
- package/engine/object-data/auxiliary/unit-attribute.lua +9 -0
- package/engine/object-data/entry/ability-type/berserk.d.ts +2 -0
- package/engine/object-data/entry/ability-type/berserk.lua +13 -0
- package/engine/object-data/entry/ability-type/permanent-invisibility.d.ts +8 -0
- package/engine/object-data/entry/ability-type/permanent-invisibility.lua +26 -0
- package/engine/object-data/entry/ability-type/slow-poison.d.ts +10 -0
- package/engine/object-data/entry/ability-type/slow-poison.lua +58 -0
- package/engine/object-data/entry/ability-type.d.ts +11 -11
- package/engine/object-data/entry/ability-type.lua +27 -6
- package/engine/object-data/entry/buff-type/applicable.lua +5 -0
- package/engine/object-data/entry/buff-type.d.ts +5 -11
- package/engine/object-data/entry/buff-type.lua +11 -27
- package/engine/object-data/entry/unit-type.d.ts +2 -2
- package/engine/object-data/entry/unit-type.lua +94 -84
- package/engine/object-field/ability.d.ts +1 -1
- package/engine/object-field/unit.d.ts +46 -3
- package/engine/object-field/unit.lua +173 -7
- package/engine/object-field.d.ts +13 -4
- package/engine/object-field.lua +170 -81
- package/engine/standard/entries/buff-type.d.ts +3 -0
- package/engine/standard/entries/buff-type.lua +3 -0
- package/objutil/buff.lua +1 -2
- package/package.json +2 -2
- package/utility/arrays.d.ts +1 -0
- package/utility/arrays.lua +3 -0
- package/utility/functions.d.ts +1 -0
- package/utility/functions.lua +1 -0
- package/utility/linked-set.d.ts +1 -0
- package/utility/linked-set.lua +3 -0
- package/utility/lua-maps.d.ts +3 -0
- package/utility/lua-maps.lua +16 -0
- package/utility/lua-sets.d.ts +1 -0
- package/utility/lua-sets.lua +3 -0
package/engine/object-field.d.ts
CHANGED
|
@@ -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;
|
|
@@ -18,8 +19,8 @@ declare abstract class ObjectFieldBase<ObjectDataEntryType extends ObjectDataEnt
|
|
|
18
19
|
protected abstract getObjectDataEntryId(instance: InstanceType): ObjectDataEntryIdType<ObjectDataEntryType>;
|
|
19
20
|
protected abstract hasNativeFieldValue(instance: InstanceType): boolean;
|
|
20
21
|
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;
|
|
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
|
-
|
|
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>;
|
package/engine/object-field.lua
CHANGED
|
@@ -20,6 +20,13 @@ 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 getOrPut = ____lua_2Dmaps.getOrPut
|
|
27
|
+
local mutableWeakLuaMap = ____lua_2Dmaps.mutableWeakLuaMap
|
|
28
|
+
local ____arrays = require("utility.arrays")
|
|
29
|
+
local emptyArray = ____arrays.emptyArray
|
|
23
30
|
local compiletimeDefaultValueByObjectDataEntryIdByObjectFieldId = {}
|
|
24
31
|
local defaultValueByObjectDataEntryIdByObjectFieldId = postcompile(function() return compiletimeDefaultValueByObjectDataEntryIdByObjectFieldId end)
|
|
25
32
|
local objectFieldById = {}
|
|
@@ -29,7 +36,11 @@ local idGenerator = __TS__New(
|
|
|
29
36
|
)
|
|
30
37
|
local ObjectFieldBase = __TS__Class()
|
|
31
38
|
ObjectFieldBase.name = "ObjectFieldBase"
|
|
32
|
-
function ObjectFieldBase.prototype.____constructor(self, id)
|
|
39
|
+
function ObjectFieldBase.prototype.____constructor(self, id, isGlobal)
|
|
40
|
+
if isGlobal == nil then
|
|
41
|
+
isGlobal = true
|
|
42
|
+
end
|
|
43
|
+
self.isGlobal = isGlobal
|
|
33
44
|
self.valueByInstance = setmetatable({}, {__mode = "k"})
|
|
34
45
|
if objectFieldById[id] ~= nil then
|
|
35
46
|
error(
|
|
@@ -48,12 +59,13 @@ function ObjectFieldBase.prototype.supports(self, instance)
|
|
|
48
59
|
end
|
|
49
60
|
function ObjectFieldBase.prototype.hasValue(self, instance)
|
|
50
61
|
local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
|
|
51
|
-
return defaultValueByObjectDataEntryId ~= nil and defaultValueByObjectDataEntryId[self:getObjectDataEntryId(instance)] ~= nil or self:hasNativeFieldValue(instance)
|
|
62
|
+
return self.isGlobal or defaultValueByObjectDataEntryId ~= nil and defaultValueByObjectDataEntryId[self:getObjectDataEntryId(instance)] ~= nil or self:hasNativeFieldValue(instance)
|
|
52
63
|
end
|
|
53
|
-
function ObjectFieldBase.create(self, id)
|
|
64
|
+
function ObjectFieldBase.create(self, id, isGlobal)
|
|
54
65
|
return __TS__New(
|
|
55
66
|
self,
|
|
56
|
-
id or idGenerator:next()
|
|
67
|
+
id or idGenerator:next(),
|
|
68
|
+
isGlobal
|
|
57
69
|
)
|
|
58
70
|
end
|
|
59
71
|
function ObjectFieldBase.of(self, id)
|
|
@@ -75,7 +87,7 @@ ____exports.ObjectField = __TS__Class()
|
|
|
75
87
|
local ObjectField = ____exports.ObjectField
|
|
76
88
|
ObjectField.name = "ObjectField"
|
|
77
89
|
__TS__ClassExtends(ObjectField, ObjectFieldBase)
|
|
78
|
-
function ObjectField.prototype.getValue(self, entry)
|
|
90
|
+
function ObjectField.prototype.getValue(self, entry, includeModifiers)
|
|
79
91
|
if __TS__InstanceOf(entry, ObjectDataEntry) then
|
|
80
92
|
local defaultValueByObjectDataEntryId = (warpack.compiletime and compiletimeDefaultValueByObjectDataEntryIdByObjectFieldId or defaultValueByObjectDataEntryIdByObjectFieldId)[self.id]
|
|
81
93
|
if defaultValueByObjectDataEntryId ~= nil then
|
|
@@ -86,22 +98,16 @@ function ObjectField.prototype.getValue(self, entry)
|
|
|
86
98
|
end
|
|
87
99
|
return self.defaultValue
|
|
88
100
|
end
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
____self_valueByInstance_entry_0 = defaultValue
|
|
101
|
+
if includeModifiers == false then
|
|
102
|
+
local originalValueByInstance = self.originalValueByInstance
|
|
103
|
+
if originalValueByInstance ~= nil then
|
|
104
|
+
local originalValue = originalValueByInstance[entry]
|
|
105
|
+
if originalValue ~= nil then
|
|
106
|
+
return originalValue
|
|
96
107
|
end
|
|
97
|
-
return ____self_valueByInstance_entry_0
|
|
98
108
|
end
|
|
99
109
|
end
|
|
100
|
-
|
|
101
|
-
if ____temp_1 == nil then
|
|
102
|
-
____temp_1 = self.defaultValue
|
|
103
|
-
end
|
|
104
|
-
return ____temp_1
|
|
110
|
+
return self:getActualValue(entry)
|
|
105
111
|
end
|
|
106
112
|
function ObjectField.prototype.setValue(self, entry, value)
|
|
107
113
|
if __TS__InstanceOf(entry, ObjectDataEntry) then
|
|
@@ -116,37 +122,53 @@ function ObjectField.prototype.setValue(self, entry, value)
|
|
|
116
122
|
defaultValueByObjectDataEntryId[entry.id] = value
|
|
117
123
|
return true
|
|
118
124
|
end
|
|
119
|
-
local
|
|
120
|
-
if
|
|
121
|
-
local
|
|
122
|
-
if
|
|
123
|
-
local
|
|
124
|
-
if
|
|
125
|
-
|
|
126
|
-
|
|
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
|
|
130
|
-
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)
|
|
125
|
+
local modifiersByInstance = self.modifiersByInstance
|
|
126
|
+
if modifiersByInstance ~= nil then
|
|
127
|
+
local modifiers = modifiersByInstance[entry]
|
|
128
|
+
if modifiers ~= nil and modifiers.size ~= 0 then
|
|
129
|
+
local originalValueByInstance = self.originalValueByInstance
|
|
130
|
+
if originalValueByInstance == nil then
|
|
131
|
+
originalValueByInstance = mutableWeakLuaMap()
|
|
132
|
+
self.originalValueByInstance = originalValueByInstance
|
|
135
133
|
end
|
|
136
|
-
|
|
134
|
+
originalValueByInstance[entry] = value
|
|
135
|
+
value = self:calculateActualValue(entry)
|
|
137
136
|
end
|
|
138
137
|
end
|
|
139
|
-
|
|
140
|
-
|
|
138
|
+
return self:setActualValue(entry, value)
|
|
139
|
+
end
|
|
140
|
+
function ObjectField.prototype.applyModifier(self, instance, modifier)
|
|
141
|
+
local modifiersByInstance = self.modifiersByInstance
|
|
142
|
+
if modifiersByInstance == nil then
|
|
143
|
+
modifiersByInstance = mutableWeakLuaMap()
|
|
144
|
+
self.modifiersByInstance = modifiersByInstance
|
|
145
|
+
end
|
|
146
|
+
if getOrPut(modifiersByInstance, instance, mutableLinkedSet):add(modifier) then
|
|
147
|
+
local originalValueByInstance = self.originalValueByInstance
|
|
148
|
+
if originalValueByInstance == nil then
|
|
149
|
+
originalValueByInstance = mutableWeakLuaMap()
|
|
150
|
+
self.originalValueByInstance = originalValueByInstance
|
|
151
|
+
end
|
|
152
|
+
originalValueByInstance[instance] = self:getActualValue(instance)
|
|
153
|
+
self:setActualValue(
|
|
154
|
+
instance,
|
|
155
|
+
self:calculateActualValue(instance)
|
|
156
|
+
)
|
|
141
157
|
end
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
158
|
+
end
|
|
159
|
+
function ObjectField.prototype.removeModifier(self, instance, modifier)
|
|
160
|
+
local modifiersByInstance = self.modifiersByInstance
|
|
161
|
+
if modifiersByInstance ~= nil then
|
|
162
|
+
local modifiers = modifiersByInstance[instance]
|
|
163
|
+
if modifiers ~= nil and modifiers:remove(modifier) then
|
|
164
|
+
self:setActualValue(
|
|
165
|
+
instance,
|
|
166
|
+
self:calculateActualValue(instance)
|
|
167
|
+
)
|
|
168
|
+
return true
|
|
146
169
|
end
|
|
147
|
-
self:invokeValueChangeEvent(entry, self, previousValue, value)
|
|
148
170
|
end
|
|
149
|
-
return
|
|
171
|
+
return false
|
|
150
172
|
end
|
|
151
173
|
function ObjectField.prototype.removeValue(self, entry)
|
|
152
174
|
if not warpack.compiletime then
|
|
@@ -168,6 +190,73 @@ function ObjectField.prototype.trySetValue(self, entry, value)
|
|
|
168
190
|
end
|
|
169
191
|
return self:setValue(entry, value)
|
|
170
192
|
end
|
|
193
|
+
function ObjectField.prototype.getActualValue(self, instance)
|
|
194
|
+
local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
|
|
195
|
+
if defaultValueByObjectDataEntryId ~= nil then
|
|
196
|
+
local defaultValue = defaultValueByObjectDataEntryId[self:getObjectDataEntryId(instance)]
|
|
197
|
+
if defaultValue ~= nil then
|
|
198
|
+
local ____self_valueByInstance_instance_0 = self.valueByInstance[instance]
|
|
199
|
+
if ____self_valueByInstance_instance_0 == nil then
|
|
200
|
+
____self_valueByInstance_instance_0 = defaultValue
|
|
201
|
+
end
|
|
202
|
+
return ____self_valueByInstance_instance_0
|
|
203
|
+
end
|
|
204
|
+
end
|
|
205
|
+
local ____temp_1 = self:getNativeFieldValue(instance)
|
|
206
|
+
if ____temp_1 == nil then
|
|
207
|
+
____temp_1 = self.defaultValue
|
|
208
|
+
end
|
|
209
|
+
return ____temp_1
|
|
210
|
+
end
|
|
211
|
+
function ObjectField.prototype.setActualValue(self, instance, value)
|
|
212
|
+
local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
|
|
213
|
+
if defaultValueByObjectDataEntryId ~= nil then
|
|
214
|
+
local defaultValue = defaultValueByObjectDataEntryId[self:getObjectDataEntryId(instance)]
|
|
215
|
+
if defaultValue ~= nil or self.isGlobal then
|
|
216
|
+
local ____self_valueByInstance_instance_2 = self.valueByInstance[instance]
|
|
217
|
+
if ____self_valueByInstance_instance_2 == nil then
|
|
218
|
+
____self_valueByInstance_instance_2 = defaultValue
|
|
219
|
+
end
|
|
220
|
+
local ____self_valueByInstance_instance_2_3 = ____self_valueByInstance_instance_2
|
|
221
|
+
if ____self_valueByInstance_instance_2_3 == nil then
|
|
222
|
+
____self_valueByInstance_instance_2_3 = self.defaultValue
|
|
223
|
+
end
|
|
224
|
+
local previousValue = ____self_valueByInstance_instance_2_3
|
|
225
|
+
if value ~= previousValue then
|
|
226
|
+
self.valueByInstance[instance] = value
|
|
227
|
+
self:invokeValueChangeEvent(instance, self, previousValue, value)
|
|
228
|
+
end
|
|
229
|
+
return true
|
|
230
|
+
end
|
|
231
|
+
end
|
|
232
|
+
if not self:hasNativeFieldValue(instance) then
|
|
233
|
+
return false
|
|
234
|
+
end
|
|
235
|
+
local previousValue = self:getNativeFieldValue(instance)
|
|
236
|
+
if value ~= previousValue then
|
|
237
|
+
if not self:setNativeFieldValue(instance, value) then
|
|
238
|
+
return false
|
|
239
|
+
end
|
|
240
|
+
self:invokeValueChangeEvent(instance, self, previousValue, value)
|
|
241
|
+
end
|
|
242
|
+
return true
|
|
243
|
+
end
|
|
244
|
+
function ObjectField.prototype.calculateActualValue(self, instance)
|
|
245
|
+
local ____opt_4 = self.originalValueByInstance
|
|
246
|
+
local originalValue = ____opt_4 and ____opt_4[instance]
|
|
247
|
+
local ____opt_6 = self.modifiersByInstance
|
|
248
|
+
local modifiers = ____opt_6 and ____opt_6[instance]
|
|
249
|
+
if originalValue ~= nil then
|
|
250
|
+
local value = originalValue
|
|
251
|
+
if modifiers ~= nil then
|
|
252
|
+
for modifier in pairs(modifiers) do
|
|
253
|
+
value = modifier(instance, value, originalValue)
|
|
254
|
+
end
|
|
255
|
+
end
|
|
256
|
+
return value
|
|
257
|
+
end
|
|
258
|
+
return self.defaultValue
|
|
259
|
+
end
|
|
171
260
|
function ObjectField.prototype.invokeValueChangeEvent(self, ...)
|
|
172
261
|
self:invokeValueChangeEventRecursive(
|
|
173
262
|
getClass(self),
|
|
@@ -221,17 +310,17 @@ function ObjectArrayField.prototype.getValue(self, entry, index)
|
|
|
221
310
|
if defaultValueByObjectDataEntryId ~= nil then
|
|
222
311
|
local value = defaultValueByObjectDataEntryId[entry.id]
|
|
223
312
|
if value ~= nil then
|
|
224
|
-
local
|
|
313
|
+
local ____temp_9
|
|
225
314
|
if index == nil then
|
|
226
|
-
|
|
315
|
+
____temp_9 = value
|
|
227
316
|
else
|
|
228
|
-
local
|
|
229
|
-
if
|
|
230
|
-
|
|
317
|
+
local ____value_index_8 = value[index + 1]
|
|
318
|
+
if ____value_index_8 == nil then
|
|
319
|
+
____value_index_8 = self.defaultValue
|
|
231
320
|
end
|
|
232
|
-
|
|
321
|
+
____temp_9 = ____value_index_8
|
|
233
322
|
end
|
|
234
|
-
return
|
|
323
|
+
return ____temp_9
|
|
235
324
|
end
|
|
236
325
|
end
|
|
237
326
|
return index == nil and ({}) or self.defaultValue
|
|
@@ -241,17 +330,17 @@ function ObjectArrayField.prototype.getValue(self, entry, index)
|
|
|
241
330
|
local defaultValue = defaultValueByObjectDataEntryId[self:getObjectDataEntryId(entry)]
|
|
242
331
|
if defaultValue ~= nil then
|
|
243
332
|
local value = self.valueByInstance[entry] or defaultValue
|
|
244
|
-
local
|
|
333
|
+
local ____temp_11
|
|
245
334
|
if index == nil then
|
|
246
|
-
|
|
335
|
+
____temp_11 = value
|
|
247
336
|
else
|
|
248
|
-
local
|
|
249
|
-
if
|
|
250
|
-
|
|
337
|
+
local ____value_index_10 = value[index + 1]
|
|
338
|
+
if ____value_index_10 == nil then
|
|
339
|
+
____value_index_10 = self.defaultValue
|
|
251
340
|
end
|
|
252
|
-
|
|
341
|
+
____temp_11 = ____value_index_10
|
|
253
342
|
end
|
|
254
|
-
return
|
|
343
|
+
return ____temp_11
|
|
255
344
|
end
|
|
256
345
|
end
|
|
257
346
|
if index ~= nil then
|
|
@@ -296,11 +385,11 @@ function ObjectLevelField.prototype.getValue(self, entry, level)
|
|
|
296
385
|
if defaultValueByObjectDataEntryId ~= nil then
|
|
297
386
|
local valueByLevel = defaultValueByObjectDataEntryId[entry.id]
|
|
298
387
|
if valueByLevel ~= nil then
|
|
299
|
-
local
|
|
300
|
-
if
|
|
301
|
-
|
|
388
|
+
local ____valueByLevel_index_12 = valueByLevel[level + 1]
|
|
389
|
+
if ____valueByLevel_index_12 == nil then
|
|
390
|
+
____valueByLevel_index_12 = self.defaultValue
|
|
302
391
|
end
|
|
303
|
-
return
|
|
392
|
+
return ____valueByLevel_index_12
|
|
304
393
|
end
|
|
305
394
|
end
|
|
306
395
|
return self.defaultValue
|
|
@@ -309,23 +398,23 @@ function ObjectLevelField.prototype.getValue(self, entry, level)
|
|
|
309
398
|
if defaultValueByObjectDataEntryId ~= nil then
|
|
310
399
|
local defaultValueByLevel = defaultValueByObjectDataEntryId[self:getObjectDataEntryId(entry)]
|
|
311
400
|
if defaultValueByLevel ~= nil then
|
|
312
|
-
local
|
|
313
|
-
local
|
|
314
|
-
if
|
|
315
|
-
|
|
401
|
+
local ____opt_13 = self.valueByInstance[entry]
|
|
402
|
+
local ____temp_15 = ____opt_13 and ____opt_13[level + 1]
|
|
403
|
+
if ____temp_15 == nil then
|
|
404
|
+
____temp_15 = defaultValueByLevel[level + 1]
|
|
316
405
|
end
|
|
317
|
-
local
|
|
318
|
-
if
|
|
319
|
-
|
|
406
|
+
local ____temp_15_16 = ____temp_15
|
|
407
|
+
if ____temp_15_16 == nil then
|
|
408
|
+
____temp_15_16 = self.defaultValue
|
|
320
409
|
end
|
|
321
|
-
return
|
|
410
|
+
return ____temp_15_16
|
|
322
411
|
end
|
|
323
412
|
end
|
|
324
|
-
local
|
|
325
|
-
if
|
|
326
|
-
|
|
413
|
+
local ____temp_17 = self:getNativeFieldValue(entry, level)
|
|
414
|
+
if ____temp_17 == nil then
|
|
415
|
+
____temp_17 = self.defaultValue
|
|
327
416
|
end
|
|
328
|
-
return
|
|
417
|
+
return ____temp_17
|
|
329
418
|
end
|
|
330
419
|
function ObjectLevelField.prototype.setValue(self, entry, levelOrValue, value)
|
|
331
420
|
if value == nil then
|
|
@@ -368,21 +457,21 @@ function ObjectLevelField.prototype.setValue(self, entry, levelOrValue, value)
|
|
|
368
457
|
local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
|
|
369
458
|
if defaultValueByObjectDataEntryId ~= nil then
|
|
370
459
|
local defaultValueByLevel = defaultValueByObjectDataEntryId[self:getObjectDataEntryId(entry)]
|
|
371
|
-
if defaultValueByLevel ~= nil then
|
|
460
|
+
if defaultValueByLevel ~= nil or self.isGlobal then
|
|
372
461
|
local valueByLevel = self.valueByInstance[entry]
|
|
373
462
|
if valueByLevel == nil then
|
|
374
463
|
valueByLevel = {}
|
|
375
464
|
self.valueByInstance[entry] = valueByLevel
|
|
376
465
|
end
|
|
377
|
-
local
|
|
378
|
-
if
|
|
379
|
-
|
|
466
|
+
local ____valueByLevel_index_18 = valueByLevel[level + 1]
|
|
467
|
+
if ____valueByLevel_index_18 == nil then
|
|
468
|
+
____valueByLevel_index_18 = (defaultValueByLevel or emptyArray())[level + 1]
|
|
380
469
|
end
|
|
381
|
-
local
|
|
382
|
-
if
|
|
383
|
-
|
|
470
|
+
local ____valueByLevel_index_18_19 = ____valueByLevel_index_18
|
|
471
|
+
if ____valueByLevel_index_18_19 == nil then
|
|
472
|
+
____valueByLevel_index_18_19 = self.defaultValue
|
|
384
473
|
end
|
|
385
|
-
local previousValue =
|
|
474
|
+
local previousValue = ____valueByLevel_index_18_19
|
|
386
475
|
if value ~= previousValue then
|
|
387
476
|
valueByLevel[level + 1] = value
|
|
388
477
|
self:invokeValueChangeEvent(
|
package/objutil/buff.lua
CHANGED
|
@@ -20,7 +20,6 @@ local AbilityDefinitionInnerFire = ____ability.AbilityDefinitionInnerFire
|
|
|
20
20
|
local AbilityDefinitionSearingArrows = ____ability.AbilityDefinitionSearingArrows
|
|
21
21
|
local AbilityDefinitionSlowPoison = ____ability.AbilityDefinitionSlowPoison
|
|
22
22
|
local ____unit = require("core.types.unit")
|
|
23
|
-
local AttackType = ____unit.AttackType
|
|
24
23
|
local DamageType = ____unit.DamageType
|
|
25
24
|
local Unit = ____unit.Unit
|
|
26
25
|
local ____dummy = require("core.dummy")
|
|
@@ -756,7 +755,7 @@ for ____, pointDispelAbilityId in ipairs(pointDispelAbilityIds) do
|
|
|
756
755
|
end)
|
|
757
756
|
end
|
|
758
757
|
Unit.onDamaging:addListener(function(source, target, event)
|
|
759
|
-
if event.amount == 0 and event.attackType ==
|
|
758
|
+
if event.amount == 0 and event.attackType == 0 and event.damageType == DamageType.NORMAL and not event.isAttack then
|
|
760
759
|
Timer:run(function()
|
|
761
760
|
checkBuffs(target, true, source)
|
|
762
761
|
end)
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json.schemastore.org/package",
|
|
3
3
|
"name": "warscript",
|
|
4
|
-
"version": "0.0.1-dev.
|
|
4
|
+
"version": "0.0.1-dev.1766d07",
|
|
5
5
|
"description": "A typescript library for Warcraft III using Warpack.",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"warcraft",
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
"@warscript/language-extensions": "^0.0.1",
|
|
25
25
|
"@warscript/tstl-plugin": "^0.0.4",
|
|
26
26
|
"lua-types": "^2.13.1",
|
|
27
|
-
"warpack": "0.0.1-dev.
|
|
27
|
+
"warpack": "0.0.1-dev.fa5e065"
|
|
28
28
|
},
|
|
29
29
|
"devDependencies": {
|
|
30
30
|
"@typescript-eslint/eslint-plugin": "^8.13.0",
|
package/utility/arrays.d.ts
CHANGED
|
@@ -22,6 +22,7 @@ export declare const mapToLuaSet: {
|
|
|
22
22
|
<T, R extends AnyNotNil>(array: readonly T[], transform: (value: T) => R): LuaSet<R>;
|
|
23
23
|
<T, K extends KeysOfType<T, AnyNotNil>>(array: readonly T[], key: K): LuaSet<T[K] extends AnyNotNil ? T[K] : never>;
|
|
24
24
|
};
|
|
25
|
+
export declare const flatten: <T>(array: readonly (readonly T[])[]) => T[];
|
|
25
26
|
export declare const flatMap: {
|
|
26
27
|
<T, R>(array: readonly T[], transform: (value: T) => readonly R[]): R[];
|
|
27
28
|
<T, K extends KeysOfType<T, readonly any[]>>(array: readonly T[], key: K): (T[K] extends readonly (infer R)[] ? R : never)[];
|
package/utility/arrays.lua
CHANGED
|
@@ -3,6 +3,8 @@ local __TS__New = ____lualib.__TS__New
|
|
|
3
3
|
local ____exports = {}
|
|
4
4
|
local ____exception = require("exception")
|
|
5
5
|
local IllegalArgumentException = ____exception.IllegalArgumentException
|
|
6
|
+
local ____functions = require("utility.functions")
|
|
7
|
+
local identity = ____functions.identity
|
|
6
8
|
local mathMax = math.max
|
|
7
9
|
local mathMin = math.min
|
|
8
10
|
local select = _G.select
|
|
@@ -120,6 +122,7 @@ ____exports.mapToLuaSet = function(array, transform)
|
|
|
120
122
|
end
|
|
121
123
|
return result
|
|
122
124
|
end
|
|
125
|
+
____exports.flatten = function(array) return ____exports.flatMap(array, identity) end
|
|
123
126
|
____exports.flatMap = function(array, transform)
|
|
124
127
|
local result = {}
|
|
125
128
|
local k = 1
|
package/utility/functions.d.ts
CHANGED
|
@@ -3,3 +3,4 @@ export declare const apply: {
|
|
|
3
3
|
<T, ConsumerParameters extends any[]>(object: T, consumer: (value: T, ...parameters: ConsumerParameters) => void, ...parameters: ConsumerParameters): T;
|
|
4
4
|
<T, ConsumerParameters extends any[], K extends KeysOfType<T, (...parameters: ConsumerParameters) => void>>(object: T, key: K, ...parameters: ConsumerParameters): T;
|
|
5
5
|
};
|
|
6
|
+
export declare const identity: <T>(value: T) => T;
|
package/utility/functions.lua
CHANGED
package/utility/linked-set.d.ts
CHANGED
|
@@ -50,6 +50,7 @@ export declare class LinkedSet<T extends AnyNotNil> implements ReadonlyLinkedSet
|
|
|
50
50
|
protected __pairs(this: LinkedSet<T>): LuaIterator<T | undefined, IteratorState<T>>;
|
|
51
51
|
}
|
|
52
52
|
export declare const emptyLinkedSet: <T extends AnyNotNil>() => ReadonlyLinkedSet<T>;
|
|
53
|
+
export declare const mutableLinkedSet: <T extends AnyNotNil>() => LinkedSet<T>;
|
|
53
54
|
export declare const mutableLinkedSetOf: <T extends AnyNotNil>(...elements: ReadonlyArray<T>) => LinkedSet<T>;
|
|
54
55
|
export declare const mutableLinkedSetOfNotNull: <T extends AnyNotNil>(...elements: readonly (T | undefined | null)[]) => LinkedSet<T>;
|
|
55
56
|
export declare const linkedSetOf: <T extends AnyNotNil>(...elements: ReadonlyArray<T>) => ReadonlyLinkedSet<T>;
|
package/utility/linked-set.lua
CHANGED
|
@@ -177,6 +177,9 @@ local EMPTY_LINKED_SET = __TS__New(EmptyLinkedSet)
|
|
|
177
177
|
____exports.emptyLinkedSet = function()
|
|
178
178
|
return EMPTY_LINKED_SET
|
|
179
179
|
end
|
|
180
|
+
____exports.mutableLinkedSet = function()
|
|
181
|
+
return __TS__New(____exports.LinkedSet)
|
|
182
|
+
end
|
|
180
183
|
____exports.mutableLinkedSetOf = function(...)
|
|
181
184
|
local linkedSet = __TS__New(____exports.LinkedSet)
|
|
182
185
|
for i = 1, select("#", ...) do
|
package/utility/lua-maps.d.ts
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
/** @noSelfInFile */
|
|
2
2
|
import { Flatten, TupleOf } from "./types";
|
|
3
|
+
export declare const mutableLuaMap: <K extends AnyNotNil, V>() => LuaMap<K, V>;
|
|
4
|
+
export declare const mutableWeakLuaMap: <K extends AnyNotNil, V>() => LuaMap<K, V>;
|
|
3
5
|
export declare const luaMapOf: <K extends AnyNotNil, V>(...pairs: Flatten<TupleOf<[K, V], 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40>>) => LuaMap<K, V>;
|
|
4
6
|
export declare const luaMapInvert: <K extends AnyNotNil, V extends AnyNotNil>(luaMap: LuaMap<K, V>) => LuaMap<V, K>;
|
|
5
7
|
export declare const mapValues: <K extends AnyNotNil, V1, V2>(luaMap: LuaMap<K, V1>, transform: (value: V1) => V2) => LuaMap<K, V2>;
|
|
8
|
+
export declare const getOrPut: <K extends AnyNotNil, V>(luaMap: LuaMap<K, V>, key: K, defaultValue: () => V) => V;
|
package/utility/lua-maps.lua
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
local ____exports = {}
|
|
2
2
|
local select = _G.select
|
|
3
|
+
local setmetatable = _G.setmetatable
|
|
4
|
+
local weakKeysMetatable = {__mode = "k"}
|
|
5
|
+
____exports.mutableLuaMap = function()
|
|
6
|
+
return {}
|
|
7
|
+
end
|
|
8
|
+
____exports.mutableWeakLuaMap = function()
|
|
9
|
+
return setmetatable({}, weakKeysMetatable)
|
|
10
|
+
end
|
|
3
11
|
____exports.luaMapOf = function(...)
|
|
4
12
|
local luaMap = {}
|
|
5
13
|
for i = 1, select("#", ...), 2 do
|
|
@@ -22,4 +30,12 @@ ____exports.mapValues = function(luaMap, transform)
|
|
|
22
30
|
end
|
|
23
31
|
return result
|
|
24
32
|
end
|
|
33
|
+
____exports.getOrPut = function(luaMap, key, defaultValue)
|
|
34
|
+
local value = luaMap[key]
|
|
35
|
+
if value == nil then
|
|
36
|
+
value = defaultValue()
|
|
37
|
+
luaMap[key] = value
|
|
38
|
+
end
|
|
39
|
+
return value
|
|
40
|
+
end
|
|
25
41
|
return ____exports
|
package/utility/lua-sets.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
/** @noSelfInFile */
|
|
2
|
+
export declare const mutableLuaSet: <T extends AnyNotNil>() => LuaSet<T>;
|
|
2
3
|
export declare const luaSetOf: <T extends AnyNotNil>(...elements: readonly T[]) => LuaSet<T>;
|
|
3
4
|
export declare const luaSetOfNotNull: <T extends AnyNotNil>(...elements: readonly (T | undefined | null)[]) => LuaSet<T>;
|
|
4
5
|
export declare const luaSetIntersection: <T extends AnyNotNil>(firstLuaSet: ReadonlyLuaSet<T>, secondLuaSet: ReadonlyLuaSet<T>) => LuaSet<T>;
|