warscript 0.0.1-dev.90f1d49 → 0.0.1-dev.91a4dce
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 +1 -2
- package/attributes.lua +9 -0
- package/core/types/frame.lua +24 -21
- package/core/types/player.d.ts +15 -0
- package/core/types/player.lua +40 -7
- package/core/types/playerCamera.d.ts +2 -0
- package/core/types/playerCamera.lua +123 -5
- package/core/types/tileCell.d.ts +9 -0
- package/core/types/tileCell.lua +92 -0
- package/core/types/timer.d.ts +3 -1
- package/core/types/timer.lua +27 -2
- package/decl/native.d.ts +6 -4
- package/engine/behavior.d.ts +5 -0
- package/engine/behavior.lua +106 -27
- package/engine/behaviour/ability/apply-buff.lua +1 -1
- package/engine/behaviour/ability/emulate-impact.d.ts +1 -1
- package/engine/behaviour/ability/emulate-impact.lua +11 -3
- package/engine/behaviour/ability/remove-buffs.d.ts +9 -0
- package/engine/behaviour/ability/remove-buffs.lua +21 -0
- package/engine/behaviour/ability/restore-mana.d.ts +1 -1
- package/engine/behaviour/ability/restore-mana.lua +6 -6
- package/engine/behaviour/ability.lua +8 -17
- package/engine/behaviour/unit/stun-immunity.d.ts +7 -3
- package/engine/behaviour/unit/stun-immunity.lua +52 -27
- package/engine/behaviour/unit.d.ts +33 -1
- package/engine/behaviour/unit.lua +190 -4
- package/engine/buff.d.ts +2 -4
- package/engine/buff.lua +68 -83
- package/engine/internal/ability.d.ts +7 -1
- package/engine/internal/ability.lua +49 -9
- package/engine/internal/item/ability.lua +63 -11
- package/engine/internal/item+owner.lua +12 -6
- package/engine/internal/item.d.ts +16 -16
- package/engine/internal/item.lua +135 -49
- package/engine/internal/misc/frame-coordinates.d.ts +2 -0
- package/engine/internal/misc/frame-coordinates.lua +21 -0
- package/engine/internal/misc/get-terrain-z.d.ts +2 -0
- package/engine/internal/misc/get-terrain-z.lua +11 -0
- package/engine/internal/misc/player-local-handle.d.ts +2 -0
- package/engine/internal/misc/player-local-handle.lua +5 -0
- package/engine/internal/unit/ability.d.ts +35 -0
- package/engine/internal/unit/ability.lua +98 -9
- package/engine/internal/unit/allowed-targets.d.ts +1 -1
- package/engine/internal/unit/allowed-targets.lua +9 -1
- package/engine/internal/unit/main-selected.lua +12 -27
- package/engine/internal/unit/order.d.ts +20 -0
- package/engine/internal/unit/order.lua +136 -0
- package/engine/internal/unit+ability.lua +10 -1
- package/engine/internal/unit-missile-launch.lua +42 -14
- package/engine/internal/unit.d.ts +16 -7
- package/engine/internal/unit.lua +182 -86
- package/engine/object-data/auxiliary/armor-type.d.ts +11 -0
- package/engine/object-data/auxiliary/armor-type.lua +46 -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.lua +5 -4
- package/engine/object-data/entry/unit-type.d.ts +11 -2
- package/engine/object-data/entry/unit-type.lua +59 -1
- package/engine/object-field/ability.d.ts +3 -3
- package/engine/object-field/ability.lua +7 -6
- package/engine/object-field/unit.d.ts +11 -0
- package/engine/object-field/unit.lua +34 -0
- package/engine/object-field.d.ts +8 -5
- package/engine/object-field.lua +90 -76
- package/engine/random.d.ts +9 -0
- package/engine/random.lua +13 -0
- package/engine/standard/fields/unit.d.ts +4 -0
- package/engine/standard/fields/unit.lua +7 -0
- package/engine/synchronization.d.ts +11 -0
- package/engine/synchronization.lua +77 -0
- package/engine/text-tag.d.ts +36 -2
- package/engine/text-tag.lua +249 -10
- package/engine/unit.d.ts +1 -0
- package/engine/unit.lua +1 -0
- package/net/socket.lua +1 -1
- package/objutil/buff.lua +1 -1
- package/package.json +2 -2
- package/patch-lualib.lua +1 -1
- package/utility/arrays.d.ts +1 -0
- package/utility/arrays.lua +8 -0
- package/utility/callback-array.d.ts +17 -0
- package/utility/callback-array.lua +61 -0
- package/utility/functions.d.ts +7 -0
- package/utility/functions.lua +12 -0
- package/utility/linked-set.d.ts +1 -0
- package/utility/linked-set.lua +19 -1
- package/utility/lua-maps.d.ts +12 -2
- package/utility/lua-maps.lua +37 -2
- package/utility/lua-sets.d.ts +1 -0
- package/utility/lua-sets.lua +4 -0
- package/utility/types.d.ts +3 -0
- package/core/types/order.d.ts +0 -25
- package/core/types/order.lua +0 -55
|
@@ -27,6 +27,9 @@ local attackTypeToString = ____attack_2Dtype.attackTypeToString
|
|
|
27
27
|
local stringToAttackType = ____attack_2Dtype.stringToAttackType
|
|
28
28
|
local ____config = require("config")
|
|
29
29
|
local WarscriptConfig = ____config.WarscriptConfig
|
|
30
|
+
local ____armor_2Dtype = require("engine.object-data.auxiliary.armor-type")
|
|
31
|
+
local armorTypeToString = ____armor_2Dtype.armorTypeToString
|
|
32
|
+
local stringToArmorType = ____armor_2Dtype.stringToArmorType
|
|
30
33
|
local getOrCreateUnitTypeWeapons
|
|
31
34
|
____exports.UnitTypeWeapon = __TS__Class()
|
|
32
35
|
local UnitTypeWeapon = ____exports.UnitTypeWeapon
|
|
@@ -936,6 +939,19 @@ __TS__SetDescriptor(
|
|
|
936
939
|
},
|
|
937
940
|
true
|
|
938
941
|
)
|
|
942
|
+
__TS__SetDescriptor(
|
|
943
|
+
UnitType.prototype,
|
|
944
|
+
"selectionCircleHeight",
|
|
945
|
+
{
|
|
946
|
+
get = function(self)
|
|
947
|
+
return self:getNumberField("uslz")
|
|
948
|
+
end,
|
|
949
|
+
set = function(self, height)
|
|
950
|
+
self:setNumberField("uslz", height)
|
|
951
|
+
end
|
|
952
|
+
},
|
|
953
|
+
true
|
|
954
|
+
)
|
|
939
955
|
__TS__SetDescriptor(
|
|
940
956
|
UnitType.prototype,
|
|
941
957
|
"selectionCircleScale",
|
|
@@ -1183,6 +1199,19 @@ __TS__SetDescriptor(
|
|
|
1183
1199
|
},
|
|
1184
1200
|
true
|
|
1185
1201
|
)
|
|
1202
|
+
__TS__SetDescriptor(
|
|
1203
|
+
UnitType.prototype,
|
|
1204
|
+
"armor",
|
|
1205
|
+
{
|
|
1206
|
+
get = function(self)
|
|
1207
|
+
return self:getNumberField("udef")
|
|
1208
|
+
end,
|
|
1209
|
+
set = function(self, armor)
|
|
1210
|
+
self:setNumberField("udef", armor)
|
|
1211
|
+
end
|
|
1212
|
+
},
|
|
1213
|
+
true
|
|
1214
|
+
)
|
|
1186
1215
|
__TS__SetDescriptor(
|
|
1187
1216
|
UnitType.prototype,
|
|
1188
1217
|
"armorSoundType",
|
|
@@ -1222,6 +1251,22 @@ __TS__SetDescriptor(
|
|
|
1222
1251
|
},
|
|
1223
1252
|
true
|
|
1224
1253
|
)
|
|
1254
|
+
__TS__SetDescriptor(
|
|
1255
|
+
UnitType.prototype,
|
|
1256
|
+
"armorType",
|
|
1257
|
+
{
|
|
1258
|
+
get = function(self)
|
|
1259
|
+
return stringToArmorType(self:getStringField("udty"))
|
|
1260
|
+
end,
|
|
1261
|
+
set = function(self, armorType)
|
|
1262
|
+
self:setStringField(
|
|
1263
|
+
"udty",
|
|
1264
|
+
armorTypeToString(armorType)
|
|
1265
|
+
)
|
|
1266
|
+
end
|
|
1267
|
+
},
|
|
1268
|
+
true
|
|
1269
|
+
)
|
|
1225
1270
|
__TS__SetDescriptor(
|
|
1226
1271
|
UnitType.prototype,
|
|
1227
1272
|
"combatClassifications",
|
|
@@ -1240,7 +1285,7 @@ __TS__SetDescriptor(
|
|
|
1240
1285
|
)
|
|
1241
1286
|
__TS__SetDescriptor(
|
|
1242
1287
|
UnitType.prototype,
|
|
1243
|
-
"
|
|
1288
|
+
"classifications",
|
|
1244
1289
|
{
|
|
1245
1290
|
get = function(self)
|
|
1246
1291
|
return stringArrayToUnitClassifications(self:getStringsField("utyp"))
|
|
@@ -1476,6 +1521,19 @@ __TS__SetDescriptor(
|
|
|
1476
1521
|
},
|
|
1477
1522
|
true
|
|
1478
1523
|
)
|
|
1524
|
+
__TS__SetDescriptor(
|
|
1525
|
+
UnitType.prototype,
|
|
1526
|
+
"level",
|
|
1527
|
+
{
|
|
1528
|
+
get = function(self)
|
|
1529
|
+
return self:getNumberField("ulev")
|
|
1530
|
+
end,
|
|
1531
|
+
set = function(self, level)
|
|
1532
|
+
self:setNumberField("ulev", level)
|
|
1533
|
+
end
|
|
1534
|
+
},
|
|
1535
|
+
true
|
|
1536
|
+
)
|
|
1479
1537
|
__TS__SetDescriptor(
|
|
1480
1538
|
UnitType.prototype,
|
|
1481
1539
|
"manaRegenerationRate",
|
|
@@ -12,7 +12,7 @@ import { ReadonlyNonEmptyLinkedSet } from "../../utility/linked-set";
|
|
|
12
12
|
export declare abstract class AbilityField<ValueType extends number | string | boolean = number | string | boolean, NativeFieldType extends jabilityfield = jabilityfield> extends ObjectField<AbilityType, Ability, ValueType, NativeFieldType> {
|
|
13
13
|
protected get instanceClass(): typeof Ability;
|
|
14
14
|
protected getObjectDataEntryId(instance: Ability): AbilityTypeId;
|
|
15
|
-
protected hasNativeFieldValue(
|
|
15
|
+
protected hasNativeFieldValue(abilityTypeId: AbilityTypeId): boolean;
|
|
16
16
|
static get valueChangeEvent(): ObjectFieldValueChangeEvent<ReadonlyObjectFieldType<AbilityField>>;
|
|
17
17
|
}
|
|
18
18
|
export declare class AbilityBooleanField extends AbilityField<boolean, jabilitybooleanfield> {
|
|
@@ -48,7 +48,7 @@ export declare class AbilityStringField extends AbilityField<string, jabilitystr
|
|
|
48
48
|
export declare abstract class AbilityArrayField<ValueType extends number | string | boolean = number | string | boolean, NativeFieldType extends jabilityfield = jabilityfield> extends ObjectArrayField<AbilityType, Ability, ValueType, NativeFieldType> {
|
|
49
49
|
protected get instanceClass(): typeof Ability;
|
|
50
50
|
protected getObjectDataEntryId(instance: Ability): AbilityTypeId;
|
|
51
|
-
protected hasNativeFieldValue(
|
|
51
|
+
protected hasNativeFieldValue(abilityTypeId: AbilityTypeId): boolean;
|
|
52
52
|
}
|
|
53
53
|
export declare class AbilityStringArrayField extends AbilityArrayField<string, jabilitystringlevelfield> {
|
|
54
54
|
protected get defaultValue(): string;
|
|
@@ -68,7 +68,7 @@ export declare abstract class AbilityLevelField<ValueType extends number | strin
|
|
|
68
68
|
protected get instanceClass(): typeof Ability;
|
|
69
69
|
protected getLevelCount(entry: AbilityType | Ability): number;
|
|
70
70
|
protected getObjectDataEntryId(instance: Ability): AbilityTypeId;
|
|
71
|
-
protected hasNativeFieldValue(
|
|
71
|
+
protected hasNativeFieldValue(abilityTypeId: AbilityTypeId): boolean;
|
|
72
72
|
static get valueChangeEvent(): ObjectLevelFieldValueChangeEvent<ReadonlyObjectLevelFieldType<AbilityLevelField>>;
|
|
73
73
|
}
|
|
74
74
|
export declare class AbilityBooleanLevelField extends AbilityLevelField<boolean, boolean, jabilityintegerlevelfield> {
|
|
@@ -7,6 +7,7 @@ local __TS__InstanceOf = ____lualib.__TS__InstanceOf
|
|
|
7
7
|
local ____exports = {}
|
|
8
8
|
local ____ability = require("engine.internal.ability")
|
|
9
9
|
local Ability = ____ability.Ability
|
|
10
|
+
local abilityTypeHasField = ____ability.abilityTypeHasField
|
|
10
11
|
local ____object_2Dfield = require("engine.object-field")
|
|
11
12
|
local ObjectArrayField = ____object_2Dfield.ObjectArrayField
|
|
12
13
|
local ObjectField = ____object_2Dfield.ObjectField
|
|
@@ -29,8 +30,8 @@ __TS__ClassExtends(AbilityField, ObjectField)
|
|
|
29
30
|
function AbilityField.prototype.getObjectDataEntryId(self, instance)
|
|
30
31
|
return instance.typeId
|
|
31
32
|
end
|
|
32
|
-
function AbilityField.prototype.hasNativeFieldValue(self,
|
|
33
|
-
return
|
|
33
|
+
function AbilityField.prototype.hasNativeFieldValue(self, abilityTypeId)
|
|
34
|
+
return abilityTypeHasField(abilityTypeId, self.nativeField)
|
|
34
35
|
end
|
|
35
36
|
__TS__SetDescriptor(
|
|
36
37
|
AbilityField.prototype,
|
|
@@ -197,8 +198,8 @@ __TS__ClassExtends(AbilityArrayField, ObjectArrayField)
|
|
|
197
198
|
function AbilityArrayField.prototype.getObjectDataEntryId(self, instance)
|
|
198
199
|
return instance.typeId
|
|
199
200
|
end
|
|
200
|
-
function AbilityArrayField.prototype.hasNativeFieldValue(self,
|
|
201
|
-
return
|
|
201
|
+
function AbilityArrayField.prototype.hasNativeFieldValue(self, abilityTypeId)
|
|
202
|
+
return abilityTypeHasField(abilityTypeId, self.nativeField)
|
|
202
203
|
end
|
|
203
204
|
__TS__SetDescriptor(
|
|
204
205
|
AbilityArrayField.prototype,
|
|
@@ -269,8 +270,8 @@ end
|
|
|
269
270
|
function AbilityLevelField.prototype.getObjectDataEntryId(self, instance)
|
|
270
271
|
return instance.typeId
|
|
271
272
|
end
|
|
272
|
-
function AbilityLevelField.prototype.hasNativeFieldValue(self,
|
|
273
|
-
return
|
|
273
|
+
function AbilityLevelField.prototype.hasNativeFieldValue(self, abilityTypeId)
|
|
274
|
+
return abilityTypeHasField(abilityTypeId, self.nativeField)
|
|
274
275
|
end
|
|
275
276
|
__TS__SetDescriptor(
|
|
276
277
|
AbilityLevelField.prototype,
|
|
@@ -4,6 +4,7 @@ import { ObjectField, ObjectLevelField, ObjectLevelFieldValueChangeEvent, Readon
|
|
|
4
4
|
import { UnitType, UnitTypeId } from "../object-data/entry/unit-type";
|
|
5
5
|
import { ReadonlyNonEmptyLinkedSet } from "../../utility/linked-set";
|
|
6
6
|
import { AttackType } from "../object-data/auxiliary/attack-type";
|
|
7
|
+
import { UnitClassifications } from "../object-data/auxiliary/unit-classification";
|
|
7
8
|
export declare abstract class UnitField<ValueType extends number | string | boolean = number | string | boolean, NativeFieldType = any> extends ObjectField<UnitType, Unit, ValueType, NativeFieldType> {
|
|
8
9
|
protected get instanceClass(): typeof Unit;
|
|
9
10
|
protected getObjectDataEntryId(instance: Unit): UnitTypeId;
|
|
@@ -56,4 +57,14 @@ export declare abstract class UnitEnumWeaponField<T extends number> extends Unit
|
|
|
56
57
|
export declare class UnitAttackTypeWeaponField extends UnitEnumWeaponField<AttackType> {
|
|
57
58
|
protected values: ReadonlyNonEmptyLinkedSet<AttackType>;
|
|
58
59
|
}
|
|
60
|
+
export declare class UnitClassificationsField extends UnitField<UnitClassifications, junitintegerfield> {
|
|
61
|
+
protected get defaultValue(): UnitClassifications;
|
|
62
|
+
protected getNativeFieldById(id: number): junitintegerfield;
|
|
63
|
+
protected getNativeFieldValue(instance: Unit): UnitClassifications;
|
|
64
|
+
protected setNativeFieldValue(instance: Unit, value: UnitClassifications): boolean;
|
|
65
|
+
}
|
|
66
|
+
export declare class UnitPropulsionWindowField extends UnitFloatField {
|
|
67
|
+
protected getNativeFieldValue(instance: Unit): number;
|
|
68
|
+
protected setNativeFieldValue(instance: Unit, value: number): boolean;
|
|
69
|
+
}
|
|
59
70
|
export {};
|
|
@@ -18,6 +18,8 @@ local convertUnitStringField = ConvertUnitStringField
|
|
|
18
18
|
local convertUnitWeaponIntegerField = ConvertUnitWeaponIntegerField
|
|
19
19
|
local getUnitWeaponIntegerField = BlzGetUnitWeaponIntegerField
|
|
20
20
|
local setUnitWeaponIntegerField = BlzSetUnitWeaponIntegerField
|
|
21
|
+
local getUnitPropulsionWindow = GetUnitPropWindow
|
|
22
|
+
local setUnitPropulsionWindow = SetUnitPropWindow
|
|
21
23
|
____exports.UnitField = __TS__Class()
|
|
22
24
|
local UnitField = ____exports.UnitField
|
|
23
25
|
UnitField.name = "UnitField"
|
|
@@ -215,4 +217,36 @@ function UnitAttackTypeWeaponField.prototype.____constructor(self, ...)
|
|
|
215
217
|
6
|
|
216
218
|
)
|
|
217
219
|
end
|
|
220
|
+
____exports.UnitClassificationsField = __TS__Class()
|
|
221
|
+
local UnitClassificationsField = ____exports.UnitClassificationsField
|
|
222
|
+
UnitClassificationsField.name = "UnitClassificationsField"
|
|
223
|
+
__TS__ClassExtends(UnitClassificationsField, ____exports.UnitField)
|
|
224
|
+
function UnitClassificationsField.prototype.getNativeFieldById(self, id)
|
|
225
|
+
return convertUnitIntegerField(id)
|
|
226
|
+
end
|
|
227
|
+
function UnitClassificationsField.prototype.getNativeFieldValue(self, instance)
|
|
228
|
+
return instance:getField(self.nativeField)
|
|
229
|
+
end
|
|
230
|
+
function UnitClassificationsField.prototype.setNativeFieldValue(self, instance, value)
|
|
231
|
+
return instance:setField(self.nativeField, value)
|
|
232
|
+
end
|
|
233
|
+
__TS__SetDescriptor(
|
|
234
|
+
UnitClassificationsField.prototype,
|
|
235
|
+
"defaultValue",
|
|
236
|
+
{get = function(self)
|
|
237
|
+
return 0
|
|
238
|
+
end},
|
|
239
|
+
true
|
|
240
|
+
)
|
|
241
|
+
____exports.UnitPropulsionWindowField = __TS__Class()
|
|
242
|
+
local UnitPropulsionWindowField = ____exports.UnitPropulsionWindowField
|
|
243
|
+
UnitPropulsionWindowField.name = "UnitPropulsionWindowField"
|
|
244
|
+
__TS__ClassExtends(UnitPropulsionWindowField, ____exports.UnitFloatField)
|
|
245
|
+
function UnitPropulsionWindowField.prototype.getNativeFieldValue(self, instance)
|
|
246
|
+
return getUnitPropulsionWindow(instance.handle)
|
|
247
|
+
end
|
|
248
|
+
function UnitPropulsionWindowField.prototype.setNativeFieldValue(self, instance, value)
|
|
249
|
+
setUnitPropulsionWindow(instance.handle, value)
|
|
250
|
+
return true
|
|
251
|
+
end
|
|
218
252
|
return ____exports
|
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;
|
|
@@ -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(
|
|
20
|
-
hasValue(
|
|
21
|
-
constructor(id: number);
|
|
22
|
-
static create<T extends ObjectFieldBase<any, any, any, any>>(this: ObjectFieldConstructor<T>, id?: number): T & symbol;
|
|
20
|
+
protected abstract hasNativeFieldValue(objectDataEntryId: ObjectDataEntryIdType<ObjectDataEntryType>): boolean;
|
|
21
|
+
hasValue(objectDataEntryId: ObjectDataEntryIdType<ObjectDataEntryType>): boolean;
|
|
22
|
+
constructor(id: number, isGlobal?: boolean);
|
|
23
|
+
static create<T extends ObjectFieldBase<any, any, any, any>>(this: ObjectFieldConstructor<T>, id?: number, isGlobal?: boolean): T & symbol;
|
|
23
24
|
static of<T extends ObjectFieldBase<any, any, any, any>>(this: ObjectFieldAbstractConstructor<T>, id: number): T | undefined;
|
|
24
25
|
}
|
|
25
26
|
export type ObjectFieldValueChangeEvent<T extends ObjectField<any, any, any, any> | ReadonlyObjectFieldType<ObjectField<any, any, any, any>>> = T extends ObjectField<any, infer InstanceType, infer ValueType, any> ? DispatchingEvent<[
|
|
@@ -79,6 +80,8 @@ export declare abstract class ObjectArrayField<ObjectDataEntryType extends Objec
|
|
|
79
80
|
setValue(entry: ObjectDataEntryType | InstanceType, value: ValueType[]): boolean;
|
|
80
81
|
}
|
|
81
82
|
export declare abstract class ObjectLevelField<ObjectDataEntryType extends ObjectDataEntry = ObjectDataEntry, InstanceType extends AnyNotNil = AnyNotNil, ValueType extends number | string | boolean = number | string | boolean, InputValueType extends ValueType = never, NativeFieldType = unknown> extends ObjectFieldBase<ObjectDataEntryType, InstanceType, ValueType[], NativeFieldType> {
|
|
83
|
+
private originalValueByLevelByInstance?;
|
|
84
|
+
private modifiersByInstance?;
|
|
82
85
|
protected abstract readonly defaultValue: ValueType;
|
|
83
86
|
protected abstract getNativeFieldValue(instance: InstanceType, level: number): ValueType;
|
|
84
87
|
protected abstract setNativeFieldValue(instance: InstanceType, level: number, value: ValueType): boolean;
|
package/engine/object-field.lua
CHANGED
|
@@ -23,8 +23,11 @@ local ObjectDataEntryIdGenerator = ____object_2Ddata_2Dentry_2Did_2Dgenerator.Ob
|
|
|
23
23
|
local ____linked_2Dset = require("utility.linked-set")
|
|
24
24
|
local mutableLinkedSet = ____linked_2Dset.mutableLinkedSet
|
|
25
25
|
local ____lua_2Dmaps = require("utility.lua-maps")
|
|
26
|
+
local emptyLuaMap = ____lua_2Dmaps.emptyLuaMap
|
|
26
27
|
local getOrPut = ____lua_2Dmaps.getOrPut
|
|
27
28
|
local mutableWeakLuaMap = ____lua_2Dmaps.mutableWeakLuaMap
|
|
29
|
+
local ____arrays = require("utility.arrays")
|
|
30
|
+
local emptyArray = ____arrays.emptyArray
|
|
28
31
|
local compiletimeDefaultValueByObjectDataEntryIdByObjectFieldId = {}
|
|
29
32
|
local defaultValueByObjectDataEntryIdByObjectFieldId = postcompile(function() return compiletimeDefaultValueByObjectDataEntryIdByObjectFieldId end)
|
|
30
33
|
local objectFieldById = {}
|
|
@@ -34,7 +37,11 @@ local idGenerator = __TS__New(
|
|
|
34
37
|
)
|
|
35
38
|
local ObjectFieldBase = __TS__Class()
|
|
36
39
|
ObjectFieldBase.name = "ObjectFieldBase"
|
|
37
|
-
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
|
|
38
45
|
self.valueByInstance = setmetatable({}, {__mode = "k"})
|
|
39
46
|
if objectFieldById[id] ~= nil then
|
|
40
47
|
error(
|
|
@@ -51,14 +58,15 @@ end
|
|
|
51
58
|
function ObjectFieldBase.prototype.supports(self, instance)
|
|
52
59
|
return __TS__InstanceOf(instance, self.instanceClass)
|
|
53
60
|
end
|
|
54
|
-
function ObjectFieldBase.prototype.hasValue(self,
|
|
61
|
+
function ObjectFieldBase.prototype.hasValue(self, objectDataEntryId)
|
|
55
62
|
local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
|
|
56
|
-
return defaultValueByObjectDataEntryId ~= nil and defaultValueByObjectDataEntryId[
|
|
63
|
+
return self.isGlobal or defaultValueByObjectDataEntryId ~= nil and defaultValueByObjectDataEntryId[objectDataEntryId] ~= nil or self:hasNativeFieldValue(objectDataEntryId)
|
|
57
64
|
end
|
|
58
|
-
function ObjectFieldBase.create(self, id)
|
|
65
|
+
function ObjectFieldBase.create(self, id, isGlobal)
|
|
59
66
|
return __TS__New(
|
|
60
67
|
self,
|
|
61
|
-
id or idGenerator:next()
|
|
68
|
+
id or idGenerator:next(),
|
|
69
|
+
isGlobal
|
|
62
70
|
)
|
|
63
71
|
end
|
|
64
72
|
function ObjectFieldBase.of(self, id)
|
|
@@ -185,36 +193,41 @@ function ObjectField.prototype.trySetValue(self, entry, value)
|
|
|
185
193
|
end
|
|
186
194
|
function ObjectField.prototype.getActualValue(self, instance)
|
|
187
195
|
local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
|
|
188
|
-
if defaultValueByObjectDataEntryId ~= nil then
|
|
189
|
-
local defaultValue = defaultValueByObjectDataEntryId[self:getObjectDataEntryId(instance)]
|
|
190
|
-
if defaultValue ~= nil then
|
|
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
|
|
191
199
|
local ____self_valueByInstance_instance_0 = self.valueByInstance[instance]
|
|
192
200
|
if ____self_valueByInstance_instance_0 == nil then
|
|
193
201
|
____self_valueByInstance_instance_0 = defaultValue
|
|
194
202
|
end
|
|
195
|
-
|
|
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
|
|
196
208
|
end
|
|
197
209
|
end
|
|
198
|
-
local
|
|
199
|
-
if
|
|
200
|
-
|
|
210
|
+
local ____temp_2 = self:getNativeFieldValue(instance)
|
|
211
|
+
if ____temp_2 == nil then
|
|
212
|
+
____temp_2 = self.defaultValue
|
|
201
213
|
end
|
|
202
|
-
return
|
|
214
|
+
return ____temp_2
|
|
203
215
|
end
|
|
204
216
|
function ObjectField.prototype.setActualValue(self, instance, value)
|
|
205
217
|
local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
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
|
|
212
225
|
end
|
|
213
|
-
local
|
|
214
|
-
if
|
|
215
|
-
|
|
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
|
|
216
229
|
end
|
|
217
|
-
local previousValue =
|
|
230
|
+
local previousValue = ____self_valueByInstance_instance_3_4
|
|
218
231
|
if value ~= previousValue then
|
|
219
232
|
self.valueByInstance[instance] = value
|
|
220
233
|
self:invokeValueChangeEvent(instance, self, previousValue, value)
|
|
@@ -222,7 +235,7 @@ function ObjectField.prototype.setActualValue(self, instance, value)
|
|
|
222
235
|
return true
|
|
223
236
|
end
|
|
224
237
|
end
|
|
225
|
-
if not self:hasNativeFieldValue(
|
|
238
|
+
if not self:hasNativeFieldValue(objectDataEntryId) then
|
|
226
239
|
return false
|
|
227
240
|
end
|
|
228
241
|
local previousValue = self:getNativeFieldValue(instance)
|
|
@@ -235,10 +248,10 @@ function ObjectField.prototype.setActualValue(self, instance, value)
|
|
|
235
248
|
return true
|
|
236
249
|
end
|
|
237
250
|
function ObjectField.prototype.calculateActualValue(self, instance)
|
|
238
|
-
local
|
|
239
|
-
local originalValue =
|
|
240
|
-
local
|
|
241
|
-
local modifiers =
|
|
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]
|
|
242
255
|
if originalValue ~= nil then
|
|
243
256
|
local value = originalValue
|
|
244
257
|
if modifiers ~= nil then
|
|
@@ -303,37 +316,37 @@ function ObjectArrayField.prototype.getValue(self, entry, index)
|
|
|
303
316
|
if defaultValueByObjectDataEntryId ~= nil then
|
|
304
317
|
local value = defaultValueByObjectDataEntryId[entry.id]
|
|
305
318
|
if value ~= nil then
|
|
306
|
-
local
|
|
319
|
+
local ____temp_10
|
|
307
320
|
if index == nil then
|
|
308
|
-
|
|
321
|
+
____temp_10 = value
|
|
309
322
|
else
|
|
310
|
-
local
|
|
311
|
-
if
|
|
312
|
-
|
|
323
|
+
local ____value_index_9 = value[index + 1]
|
|
324
|
+
if ____value_index_9 == nil then
|
|
325
|
+
____value_index_9 = self.defaultValue
|
|
313
326
|
end
|
|
314
|
-
|
|
327
|
+
____temp_10 = ____value_index_9
|
|
315
328
|
end
|
|
316
|
-
return
|
|
329
|
+
return ____temp_10
|
|
317
330
|
end
|
|
318
331
|
end
|
|
319
332
|
return index == nil and ({}) or self.defaultValue
|
|
320
333
|
end
|
|
321
334
|
local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
|
|
322
|
-
if defaultValueByObjectDataEntryId ~= nil then
|
|
323
|
-
local defaultValue = defaultValueByObjectDataEntryId[self:getObjectDataEntryId(entry)]
|
|
324
|
-
if defaultValue ~= nil then
|
|
325
|
-
local value = self.valueByInstance[entry] or defaultValue
|
|
326
|
-
local
|
|
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
|
|
327
340
|
if index == nil then
|
|
328
|
-
|
|
341
|
+
____temp_12 = value
|
|
329
342
|
else
|
|
330
|
-
local
|
|
331
|
-
if
|
|
332
|
-
|
|
343
|
+
local ____value_index_11 = value[index + 1]
|
|
344
|
+
if ____value_index_11 == nil then
|
|
345
|
+
____value_index_11 = self.defaultValue
|
|
333
346
|
end
|
|
334
|
-
|
|
347
|
+
____temp_12 = ____value_index_11
|
|
335
348
|
end
|
|
336
|
-
return
|
|
349
|
+
return ____temp_12
|
|
337
350
|
end
|
|
338
351
|
end
|
|
339
352
|
if index ~= nil then
|
|
@@ -378,36 +391,36 @@ function ObjectLevelField.prototype.getValue(self, entry, level)
|
|
|
378
391
|
if defaultValueByObjectDataEntryId ~= nil then
|
|
379
392
|
local valueByLevel = defaultValueByObjectDataEntryId[entry.id]
|
|
380
393
|
if valueByLevel ~= nil then
|
|
381
|
-
local
|
|
382
|
-
if
|
|
383
|
-
|
|
394
|
+
local ____valueByLevel_index_13 = valueByLevel[level + 1]
|
|
395
|
+
if ____valueByLevel_index_13 == nil then
|
|
396
|
+
____valueByLevel_index_13 = self.defaultValue
|
|
384
397
|
end
|
|
385
|
-
return
|
|
398
|
+
return ____valueByLevel_index_13
|
|
386
399
|
end
|
|
387
400
|
end
|
|
388
401
|
return self.defaultValue
|
|
389
402
|
end
|
|
390
403
|
local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
|
|
391
|
-
if defaultValueByObjectDataEntryId ~= nil then
|
|
392
|
-
local defaultValueByLevel = defaultValueByObjectDataEntryId[self:getObjectDataEntryId(entry)]
|
|
393
|
-
if defaultValueByLevel ~= nil then
|
|
394
|
-
local
|
|
395
|
-
local
|
|
396
|
-
if
|
|
397
|
-
|
|
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]
|
|
398
411
|
end
|
|
399
|
-
local
|
|
400
|
-
if
|
|
401
|
-
|
|
412
|
+
local ____temp_16_17 = ____temp_16
|
|
413
|
+
if ____temp_16_17 == nil then
|
|
414
|
+
____temp_16_17 = self.defaultValue
|
|
402
415
|
end
|
|
403
|
-
return
|
|
416
|
+
return ____temp_16_17
|
|
404
417
|
end
|
|
405
418
|
end
|
|
406
|
-
local
|
|
407
|
-
if
|
|
408
|
-
|
|
419
|
+
local ____temp_18 = self:getNativeFieldValue(entry, level)
|
|
420
|
+
if ____temp_18 == nil then
|
|
421
|
+
____temp_18 = self.defaultValue
|
|
409
422
|
end
|
|
410
|
-
return
|
|
423
|
+
return ____temp_18
|
|
411
424
|
end
|
|
412
425
|
function ObjectLevelField.prototype.setValue(self, entry, levelOrValue, value)
|
|
413
426
|
if value == nil then
|
|
@@ -448,23 +461,24 @@ function ObjectLevelField.prototype.setValue(self, entry, levelOrValue, value)
|
|
|
448
461
|
return true
|
|
449
462
|
end
|
|
450
463
|
local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
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
|
|
454
468
|
local valueByLevel = self.valueByInstance[entry]
|
|
455
469
|
if valueByLevel == nil then
|
|
456
470
|
valueByLevel = {}
|
|
457
471
|
self.valueByInstance[entry] = valueByLevel
|
|
458
472
|
end
|
|
459
|
-
local
|
|
460
|
-
if
|
|
461
|
-
|
|
473
|
+
local ____valueByLevel_index_19 = valueByLevel[level + 1]
|
|
474
|
+
if ____valueByLevel_index_19 == nil then
|
|
475
|
+
____valueByLevel_index_19 = (defaultValueByLevel or emptyArray())[level + 1]
|
|
462
476
|
end
|
|
463
|
-
local
|
|
464
|
-
if
|
|
465
|
-
|
|
477
|
+
local ____valueByLevel_index_19_20 = ____valueByLevel_index_19
|
|
478
|
+
if ____valueByLevel_index_19_20 == nil then
|
|
479
|
+
____valueByLevel_index_19_20 = self.defaultValue
|
|
466
480
|
end
|
|
467
|
-
local previousValue =
|
|
481
|
+
local previousValue = ____valueByLevel_index_19_20
|
|
468
482
|
if value ~= previousValue then
|
|
469
483
|
valueByLevel[level + 1] = value
|
|
470
484
|
self:invokeValueChangeEvent(
|
|
@@ -478,7 +492,7 @@ function ObjectLevelField.prototype.setValue(self, entry, levelOrValue, value)
|
|
|
478
492
|
return true
|
|
479
493
|
end
|
|
480
494
|
end
|
|
481
|
-
if not self:hasNativeFieldValue(
|
|
495
|
+
if not self:hasNativeFieldValue(objectDataEntryId) then
|
|
482
496
|
return false
|
|
483
497
|
end
|
|
484
498
|
local previousValue = self:getNativeFieldValue(entry, level)
|
package/engine/random.d.ts
CHANGED
|
@@ -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,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
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** @noSelfInFile */
|
|
2
|
+
import { Player } from "../core/types/player";
|
|
3
|
+
import { Event } from "../event";
|
|
4
|
+
export declare const synchronizer: <T, K extends number>(getSyncId: (object: T) => K, getObject: (syncId: K) => T | undefined) => ((player: Player, object: T | undefined) => Promise<T | undefined>);
|
|
5
|
+
export declare class ObjectBus<T, K extends number> {
|
|
6
|
+
private readonly getSyncId;
|
|
7
|
+
readonly event: Event<[Player, T | undefined]>;
|
|
8
|
+
private readonly syncSlider;
|
|
9
|
+
constructor(getSyncId: (object: T) => K, getObject: (syncId: K) => T | undefined);
|
|
10
|
+
send(object: T | undefined): void;
|
|
11
|
+
}
|