warscript 0.0.1-dev.aaf0a9d → 0.0.1-dev.ba37a78
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/engine/behaviour/ability/apply-unit-behavior.d.ts +9 -4
- package/engine/behaviour/ability/apply-unit-behavior.lua +31 -9
- package/engine/internal/ability.d.ts +1 -1
- package/engine/internal/mechanics/ability-duration.d.ts +1 -3
- package/engine/internal/mechanics/ability-duration.lua +2 -0
- package/engine/internal/mechanics/cast-ability.d.ts +2 -0
- package/engine/internal/mechanics/cast-ability.lua +86 -0
- package/engine/internal/unit/detach-missiles.d.ts +7 -0
- package/engine/internal/unit/detach-missiles.lua +30 -0
- package/engine/object-data/entry/ability-type/blink.d.ts +10 -0
- package/engine/object-data/entry/ability-type/blink.lua +39 -0
- package/engine/object-data/entry/ability-type.d.ts +1 -0
- package/engine/object-data/entry/ability-type.lua +1 -0
- package/engine/object-data/entry/buff-type/applicable.lua +27 -71
- package/engine/object-field/ability.d.ts +7 -5
- package/engine/object-field/ability.lua +6 -0
- package/engine/object-field/unit.d.ts +1 -0
- package/engine/object-field/unit.lua +3 -0
- package/engine/object-field.d.ts +6 -4
- package/engine/object-field.lua +37 -15
- package/engine/unit.d.ts +1 -0
- package/engine/unit.lua +1 -0
- package/global/vec2.lua +1 -0
- package/package.json +1 -1
- package/utility/linked-set.d.ts +1 -0
- package/utility/linked-set.lua +16 -0
|
@@ -1,12 +1,17 @@
|
|
|
1
1
|
/** @noSelfInFile */
|
|
2
2
|
import { AbilityBehavior } from "../ability";
|
|
3
3
|
import { Ability } from "../../internal/ability";
|
|
4
|
-
import {
|
|
4
|
+
import { UnitBehavior } from "../unit";
|
|
5
5
|
import { Unit } from "../../internal/unit";
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
import { MutableKeys } from "../../../utility/types";
|
|
7
|
+
import { AbilityDependentValue } from "../../object-field/ability";
|
|
8
|
+
export declare class ApplyUnitBehaviorAbilityBehavior<T extends UnitBehavior> extends AbilityBehavior {
|
|
9
|
+
private readonly unitBehaviorConstructor;
|
|
10
|
+
private readonly parameters?;
|
|
11
|
+
private readonly keys?;
|
|
8
12
|
private unitBehavior?;
|
|
9
|
-
constructor(ability: Ability, unitBehaviorConstructor:
|
|
13
|
+
constructor(ability: Ability, unitBehaviorConstructor: new (unit: Unit) => T, parameters?: Partial<{ [K in MutableKeys<T> & KeysOfType<T, string | number | boolean>]: T[K] extends string | number | boolean ? AbilityDependentValue<T[K]> : never; }> | undefined);
|
|
14
|
+
update(): void;
|
|
10
15
|
onUnitGainAbility(unit: Unit): void;
|
|
11
16
|
onUnitLoseAbility(): void;
|
|
12
17
|
}
|
|
@@ -1,23 +1,38 @@
|
|
|
1
1
|
local ____lualib = require("lualib_bundle")
|
|
2
2
|
local __TS__Class = ____lualib.__TS__Class
|
|
3
3
|
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
|
|
4
|
+
local __TS__ObjectKeys = ____lualib.__TS__ObjectKeys
|
|
5
|
+
local __TS__ArraySort = ____lualib.__TS__ArraySort
|
|
4
6
|
local __TS__New = ____lualib.__TS__New
|
|
5
7
|
local ____exports = {}
|
|
6
8
|
local ____ability = require("engine.behaviour.ability")
|
|
7
9
|
local AbilityBehavior = ____ability.AbilityBehavior
|
|
10
|
+
local ____ability = require("engine.object-field.ability")
|
|
11
|
+
local AbilityField = ____ability.AbilityField
|
|
12
|
+
local AbilityLevelField = ____ability.AbilityLevelField
|
|
8
13
|
____exports.ApplyUnitBehaviorAbilityBehavior = __TS__Class()
|
|
9
14
|
local ApplyUnitBehaviorAbilityBehavior = ____exports.ApplyUnitBehaviorAbilityBehavior
|
|
10
15
|
ApplyUnitBehaviorAbilityBehavior.name = "ApplyUnitBehaviorAbilityBehavior"
|
|
11
16
|
__TS__ClassExtends(ApplyUnitBehaviorAbilityBehavior, AbilityBehavior)
|
|
12
|
-
function ApplyUnitBehaviorAbilityBehavior.prototype.____constructor(self, ability, unitBehaviorConstructor,
|
|
13
|
-
local args = {...}
|
|
17
|
+
function ApplyUnitBehaviorAbilityBehavior.prototype.____constructor(self, ability, unitBehaviorConstructor, parameters)
|
|
14
18
|
AbilityBehavior.prototype.____constructor(self, ability)
|
|
15
|
-
self.
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
19
|
+
self.unitBehaviorConstructor = unitBehaviorConstructor
|
|
20
|
+
self.parameters = parameters
|
|
21
|
+
if parameters ~= nil then
|
|
22
|
+
self.keys = __TS__ArraySort(__TS__ObjectKeys(parameters))
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
function ApplyUnitBehaviorAbilityBehavior.prototype.update(self)
|
|
26
|
+
local unitBehavior = self.unitBehavior
|
|
27
|
+
local parameters = self.parameters
|
|
28
|
+
local keys = self.keys
|
|
29
|
+
if unitBehavior ~= nil and parameters ~= nil and keys ~= nil then
|
|
30
|
+
for ____, key in ipairs(keys) do
|
|
31
|
+
local value = parameters[key]
|
|
32
|
+
if value ~= nil then
|
|
33
|
+
unitBehavior[key] = self:resolveCurrentAbilityDependentValue(value)
|
|
34
|
+
end
|
|
35
|
+
end
|
|
21
36
|
end
|
|
22
37
|
end
|
|
23
38
|
function ApplyUnitBehaviorAbilityBehavior.prototype.onUnitGainAbility(self, unit)
|
|
@@ -25,7 +40,8 @@ function ApplyUnitBehaviorAbilityBehavior.prototype.onUnitGainAbility(self, unit
|
|
|
25
40
|
if ____opt_0 ~= nil then
|
|
26
41
|
____opt_0:destroy()
|
|
27
42
|
end
|
|
28
|
-
self.unitBehavior = self
|
|
43
|
+
self.unitBehavior = __TS__New(self.unitBehaviorConstructor, unit)
|
|
44
|
+
self:update()
|
|
29
45
|
end
|
|
30
46
|
function ApplyUnitBehaviorAbilityBehavior.prototype.onUnitLoseAbility(self)
|
|
31
47
|
local ____opt_2 = self.unitBehavior
|
|
@@ -33,4 +49,10 @@ function ApplyUnitBehaviorAbilityBehavior.prototype.onUnitLoseAbility(self)
|
|
|
33
49
|
____opt_2:destroy()
|
|
34
50
|
end
|
|
35
51
|
end
|
|
52
|
+
AbilityField.valueChangeEvent:addListener(function(ability)
|
|
53
|
+
____exports.ApplyUnitBehaviorAbilityBehavior:forAll(ability, "update")
|
|
54
|
+
end)
|
|
55
|
+
AbilityLevelField.valueChangeEvent:addListener(function(ability)
|
|
56
|
+
____exports.ApplyUnitBehaviorAbilityBehavior:forAll(ability, "update")
|
|
57
|
+
end)
|
|
36
58
|
return ____exports
|
|
@@ -12,7 +12,7 @@ interface Fields<K, V> {
|
|
|
12
12
|
interface AbilityLevel {
|
|
13
13
|
realFields: Fields<jabilityreallevelfield, number>;
|
|
14
14
|
}
|
|
15
|
-
type jabilityfield = jabilityintegerfield | jabilityrealfield | jabilitybooleanfield | jabilitystringfield | jabilityintegerlevelfield | jabilityreallevelfield | jabilitybooleanlevelfield | jabilitystringlevelfield;
|
|
15
|
+
export type jabilityfield = jabilityintegerfield | jabilityrealfield | jabilitybooleanfield | jabilitystringfield | jabilityintegerlevelfield | jabilityreallevelfield | jabilitybooleanlevelfield | jabilitystringlevelfield;
|
|
16
16
|
export declare class AbilitySnapshot {
|
|
17
17
|
}
|
|
18
18
|
export declare abstract class Ability extends Handle<jability> {
|
|
@@ -4,6 +4,8 @@ local UnitClassification = ____unit.UnitClassification
|
|
|
4
4
|
local ____ability = require("engine.standard.fields.ability")
|
|
5
5
|
local DURATION_HERO_ABILITY_FLOAT_LEVEL_FIELD = ____ability.DURATION_HERO_ABILITY_FLOAT_LEVEL_FIELD
|
|
6
6
|
local DURATION_NORMAL_ABILITY_FLOAT_LEVEL_FIELD = ____ability.DURATION_NORMAL_ABILITY_FLOAT_LEVEL_FIELD
|
|
7
|
+
---
|
|
8
|
+
-- @internal For use by internal systems only.
|
|
7
9
|
____exports.getAbilityDuration = function(ability, target)
|
|
8
10
|
local level = ability.level
|
|
9
11
|
return target ~= nil and target:hasClassification(UnitClassification.RESISTANT) and DURATION_HERO_ABILITY_FLOAT_LEVEL_FIELD:getValue(ability, level) or DURATION_NORMAL_ABILITY_FLOAT_LEVEL_FIELD:getValue(ability, level)
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
local ____exports = {}
|
|
2
|
+
local ____ability_2Dtype = require("engine.object-data.entry.ability-type")
|
|
3
|
+
local AbilityType = ____ability_2Dtype.AbilityType
|
|
4
|
+
local ____dummy_2Ditem = require("engine.internal.object-data.dummy-item")
|
|
5
|
+
local DUMMY_ITEM_ID = ____dummy_2Ditem.DUMMY_ITEM_ID
|
|
6
|
+
local ____dummy_2Dunits = require("engine.internal.misc.dummy-units")
|
|
7
|
+
local INVENTORY_DUMMY_NATIVE_UNIT = ____dummy_2Dunits.INVENTORY_DUMMY_NATIVE_UNIT
|
|
8
|
+
local ____preconditions = require("utility.preconditions")
|
|
9
|
+
local checkNotNull = ____preconditions.checkNotNull
|
|
10
|
+
local ____dummy_2Dinventory = require("engine.internal.object-data.dummy-inventory")
|
|
11
|
+
local INVENTORY_ABILITY_TYPE_ID = ____dummy_2Dinventory.INVENTORY_ABILITY_TYPE_ID
|
|
12
|
+
local ____arrays = require("utility.arrays")
|
|
13
|
+
local map = ____arrays.map
|
|
14
|
+
local toLuaSet = ____arrays.toLuaSet
|
|
15
|
+
local createItem = CreateItem
|
|
16
|
+
local getAbilityId = BlzGetAbilityId
|
|
17
|
+
local getItemAbility = BlzGetItemAbility
|
|
18
|
+
local getUnitAbilityByIndex = BlzGetUnitAbilityByIndex
|
|
19
|
+
local itemAddAbility = BlzItemAddAbility
|
|
20
|
+
local setItemBooleanField = BlzSetItemBooleanField
|
|
21
|
+
local removeItem = RemoveItem
|
|
22
|
+
local unitAddAbility = UnitAddAbility
|
|
23
|
+
local unitAddItem = UnitAddItem
|
|
24
|
+
local unitDropItemSlot = UnitDropItemSlot
|
|
25
|
+
local unitInventorySize = UnitInventorySize
|
|
26
|
+
local unitRemoveAbility = UnitRemoveAbility
|
|
27
|
+
local unitRemoveItemFromSlot = UnitRemoveItemFromSlot
|
|
28
|
+
local INVENTORY_ABILITY_TYPE_IDS = postcompile(function()
|
|
29
|
+
return toLuaSet(AbilityType:getAllIdsByBaseIds(map({
|
|
30
|
+
"AInv",
|
|
31
|
+
"Aihn",
|
|
32
|
+
"Aien",
|
|
33
|
+
"Aion",
|
|
34
|
+
"Aiun"
|
|
35
|
+
}, fourCC)))
|
|
36
|
+
end)
|
|
37
|
+
---
|
|
38
|
+
-- @internal For use by internal systems only.
|
|
39
|
+
____exports.castAbility = function(nativeUnit, abilityTypeId, prepareAbility, ...)
|
|
40
|
+
local nativeItem = createItem(DUMMY_ITEM_ID, 0, 0)
|
|
41
|
+
unitAddItem(INVENTORY_DUMMY_NATIVE_UNIT, nativeItem)
|
|
42
|
+
itemAddAbility(nativeItem, abilityTypeId)
|
|
43
|
+
local nativeAbility = checkNotNull(getItemAbility(nativeItem, abilityTypeId))
|
|
44
|
+
if prepareAbility ~= nil then
|
|
45
|
+
prepareAbility(nativeAbility, ...)
|
|
46
|
+
end
|
|
47
|
+
setItemBooleanField(nativeItem, ITEM_BF_ACTIVELY_USED, true)
|
|
48
|
+
setItemBooleanField(nativeItem, ITEM_BF_USE_AUTOMATICALLY_WHEN_ACQUIRED, true)
|
|
49
|
+
local success
|
|
50
|
+
if unitAddItem(nativeUnit, nativeItem) then
|
|
51
|
+
success = true
|
|
52
|
+
else
|
|
53
|
+
local latestInventoryAbilityTypeId = 0
|
|
54
|
+
local nativeItemBySlot = {}
|
|
55
|
+
local inventorySize = unitInventorySize(nativeUnit)
|
|
56
|
+
if inventorySize ~= 0 then
|
|
57
|
+
for slot = 0, inventorySize - 1 do
|
|
58
|
+
nativeItemBySlot[slot] = unitRemoveItemFromSlot(nativeUnit, slot)
|
|
59
|
+
end
|
|
60
|
+
local unitNativeAbility = getUnitAbilityByIndex(nativeUnit, 0)
|
|
61
|
+
local i = 1
|
|
62
|
+
while unitNativeAbility ~= nil do
|
|
63
|
+
local abilityTypeId = getAbilityId(unitNativeAbility)
|
|
64
|
+
if INVENTORY_ABILITY_TYPE_IDS[abilityTypeId] ~= nil then
|
|
65
|
+
latestInventoryAbilityTypeId = abilityTypeId
|
|
66
|
+
end
|
|
67
|
+
unitNativeAbility = getUnitAbilityByIndex(nativeUnit, i)
|
|
68
|
+
i = i + 1
|
|
69
|
+
end
|
|
70
|
+
unitRemoveAbility(nativeUnit, latestInventoryAbilityTypeId)
|
|
71
|
+
end
|
|
72
|
+
unitAddAbility(nativeUnit, INVENTORY_ABILITY_TYPE_ID)
|
|
73
|
+
success = unitAddItem(nativeUnit, nativeItem)
|
|
74
|
+
unitRemoveAbility(nativeUnit, INVENTORY_ABILITY_TYPE_ID)
|
|
75
|
+
if latestInventoryAbilityTypeId ~= 0 then
|
|
76
|
+
unitAddAbility(nativeUnit, latestInventoryAbilityTypeId)
|
|
77
|
+
for slot, nativeItem in pairs(nativeItemBySlot) do
|
|
78
|
+
unitAddItem(nativeUnit, nativeItem)
|
|
79
|
+
unitDropItemSlot(nativeUnit, nativeItem, slot)
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
removeItem(nativeItem)
|
|
84
|
+
return success
|
|
85
|
+
end
|
|
86
|
+
return ____exports
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
local ____exports = {}
|
|
2
|
+
local ____unit = require("engine.internal.unit")
|
|
3
|
+
local Unit = ____unit.Unit
|
|
4
|
+
local ____cast_2Dability = require("engine.internal.mechanics.cast-ability")
|
|
5
|
+
local castAbility = ____cast_2Dability.castAbility
|
|
6
|
+
local ____blink = require("engine.object-data.entry.ability-type.blink")
|
|
7
|
+
local BlinkAbilityType = ____blink.BlinkAbilityType
|
|
8
|
+
local ____math = require("math")
|
|
9
|
+
local MAXIMUM_INTEGER = ____math.MAXIMUM_INTEGER
|
|
10
|
+
local getUnitX = GetUnitX
|
|
11
|
+
local getUnitY = GetUnitY
|
|
12
|
+
local setUnitX = SetUnitX
|
|
13
|
+
local setUnitY = SetUnitY
|
|
14
|
+
local BLINK_ABILITY_TYPE_ID = compiletime(function()
|
|
15
|
+
local abilityType = BlinkAbilityType:create()
|
|
16
|
+
abilityType.minimumRange = 0
|
|
17
|
+
abilityType.maximumRange = MAXIMUM_INTEGER
|
|
18
|
+
abilityType.manaCost = 0
|
|
19
|
+
abilityType.cooldown = 0
|
|
20
|
+
return abilityType.id
|
|
21
|
+
end)
|
|
22
|
+
Unit.prototype.detachMissiles = function(self)
|
|
23
|
+
local nativeUnit = self.handle
|
|
24
|
+
local x = getUnitX(nativeUnit)
|
|
25
|
+
local y = getUnitY(nativeUnit)
|
|
26
|
+
castAbility(nativeUnit, BLINK_ABILITY_TYPE_ID)
|
|
27
|
+
setUnitX(nativeUnit, x)
|
|
28
|
+
setUnitY(nativeUnit, y)
|
|
29
|
+
end
|
|
30
|
+
return ____exports
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/** @noSelfInFile */
|
|
2
|
+
import { AbilityType, AbilityTypeId } from "../ability-type";
|
|
3
|
+
import { ObjectDataEntryLevelFieldValueSupplier } from "../../entry";
|
|
4
|
+
export declare class BlinkAbilityType extends AbilityType {
|
|
5
|
+
static readonly BASE_ID: AbilityTypeId;
|
|
6
|
+
get maximumRange(): number[];
|
|
7
|
+
set maximumRange(maximumRange: ObjectDataEntryLevelFieldValueSupplier<number>);
|
|
8
|
+
get minimumRange(): number[];
|
|
9
|
+
set minimumRange(minimumRange: ObjectDataEntryLevelFieldValueSupplier<number>);
|
|
10
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
local ____lualib = require("lualib_bundle")
|
|
2
|
+
local __TS__Class = ____lualib.__TS__Class
|
|
3
|
+
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
|
|
4
|
+
local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
|
|
5
|
+
local ____exports = {}
|
|
6
|
+
local ____ability_2Dtype = require("engine.object-data.entry.ability-type")
|
|
7
|
+
local AbilityType = ____ability_2Dtype.AbilityType
|
|
8
|
+
____exports.BlinkAbilityType = __TS__Class()
|
|
9
|
+
local BlinkAbilityType = ____exports.BlinkAbilityType
|
|
10
|
+
BlinkAbilityType.name = "BlinkAbilityType"
|
|
11
|
+
__TS__ClassExtends(BlinkAbilityType, AbilityType)
|
|
12
|
+
BlinkAbilityType.BASE_ID = fourCC("AEbl")
|
|
13
|
+
__TS__SetDescriptor(
|
|
14
|
+
BlinkAbilityType.prototype,
|
|
15
|
+
"maximumRange",
|
|
16
|
+
{
|
|
17
|
+
get = function(self)
|
|
18
|
+
return self:getNumberLevelField("Ebl1")
|
|
19
|
+
end,
|
|
20
|
+
set = function(self, maximumRange)
|
|
21
|
+
self:setNumberLevelField("Ebl1", maximumRange)
|
|
22
|
+
end
|
|
23
|
+
},
|
|
24
|
+
true
|
|
25
|
+
)
|
|
26
|
+
__TS__SetDescriptor(
|
|
27
|
+
BlinkAbilityType.prototype,
|
|
28
|
+
"minimumRange",
|
|
29
|
+
{
|
|
30
|
+
get = function(self)
|
|
31
|
+
return self:getNumberLevelField("Ebl2")
|
|
32
|
+
end,
|
|
33
|
+
set = function(self, minimumRange)
|
|
34
|
+
self:setNumberLevelField("Ebl2", minimumRange)
|
|
35
|
+
end
|
|
36
|
+
},
|
|
37
|
+
true
|
|
38
|
+
)
|
|
39
|
+
return ____exports
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/// <reference types="warpack-types/warpack" />
|
|
2
2
|
/** @noSelfInFile */
|
|
3
|
+
import "../../internal/unit/ability";
|
|
3
4
|
import { TupleOf } from "../../../utility/types";
|
|
4
5
|
import { AnimationName } from "../auxiliary/animation-name";
|
|
5
6
|
import { AnimationQualifier } from "../auxiliary/animation-qualifier";
|
|
@@ -6,6 +6,7 @@ local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
|
|
|
6
6
|
local ____exports = {}
|
|
7
7
|
local ____unit = require("engine.internal.unit")
|
|
8
8
|
local Unit = ____unit.Unit
|
|
9
|
+
require("engine.internal.unit.ability")
|
|
9
10
|
local ____timer = require("core.types.timer")
|
|
10
11
|
local Timer = ____timer.Timer
|
|
11
12
|
local ____effect = require("core.types.effect")
|
|
@@ -7,6 +7,7 @@ local __TS__SparseArrayNew = ____lualib.__TS__SparseArrayNew
|
|
|
7
7
|
local __TS__SparseArrayPush = ____lualib.__TS__SparseArrayPush
|
|
8
8
|
local __TS__SparseArraySpread = ____lualib.__TS__SparseArraySpread
|
|
9
9
|
local ____exports = {}
|
|
10
|
+
local preparePhysicalPositiveApplicatorAbility
|
|
10
11
|
local ____ability_2Dtype = require("engine.object-data.entry.ability-type")
|
|
11
12
|
local AbilityType = ____ability_2Dtype.AbilityType
|
|
12
13
|
local ____cripple = require("engine.object-data.entry.ability-type.cripple")
|
|
@@ -34,20 +35,14 @@ local ____blood_2Dlust = require("engine.object-data.entry.ability-type.blood-lu
|
|
|
34
35
|
local BloodLustAbilityType = ____blood_2Dlust.BloodLustAbilityType
|
|
35
36
|
local ____berserk = require("engine.object-data.entry.ability-type.berserk")
|
|
36
37
|
local BerserkAbilityType = ____berserk.BerserkAbilityType
|
|
37
|
-
local ____dummy_2Ditem = require("engine.internal.object-data.dummy-item")
|
|
38
|
-
local DUMMY_ITEM_ID = ____dummy_2Ditem.DUMMY_ITEM_ID
|
|
39
|
-
local ____dummy_2Dinventory = require("engine.internal.object-data.dummy-inventory")
|
|
40
|
-
local INVENTORY_ABILITY_TYPE_ID = ____dummy_2Dinventory.INVENTORY_ABILITY_TYPE_ID
|
|
41
38
|
local ____blank = require("engine.object-data.entry.upgrade.blank")
|
|
42
39
|
local BlankUpgrade = ____blank.BlankUpgrade
|
|
43
|
-
local ____dummy_2Dunits = require("engine.internal.misc.dummy-units")
|
|
44
|
-
local INVENTORY_DUMMY_NATIVE_UNIT = ____dummy_2Dunits.INVENTORY_DUMMY_NATIVE_UNIT
|
|
45
|
-
local ____preconditions = require("utility.preconditions")
|
|
46
|
-
local checkNotNull = ____preconditions.checkNotNull
|
|
47
40
|
local ____unit_2Dtype = require("engine.object-data.entry.unit-type")
|
|
48
41
|
local UnitType = ____unit_2Dtype.UnitType
|
|
49
42
|
local ____permanent_2Dimmolation = require("engine.object-data.entry.ability-type.permanent-immolation")
|
|
50
43
|
local PermanentImmolationAbilityType = ____permanent_2Dimmolation.PermanentImmolationAbilityType
|
|
44
|
+
local ____cast_2Dability = require("engine.internal.mechanics.cast-ability")
|
|
45
|
+
local castAbility = ____cast_2Dability.castAbility
|
|
51
46
|
local createItem = CreateItem
|
|
52
47
|
local getAbilityId = BlzGetAbilityId
|
|
53
48
|
local getItemAbility = BlzGetItemAbility
|
|
@@ -260,75 +255,25 @@ ____exports.internalApplyBuff = function(unit, applicableBuffTypeId, polarity, r
|
|
|
260
255
|
return unitAddAbility(unit.handle, applicatorAbilityTypeId)
|
|
261
256
|
end
|
|
262
257
|
if applicatorType == 852100 then
|
|
263
|
-
local
|
|
264
|
-
|
|
265
|
-
local nativeItem = createItem(DUMMY_ITEM_ID, 0, 0)
|
|
266
|
-
unitAddItem(INVENTORY_DUMMY_NATIVE_UNIT, nativeItem)
|
|
267
|
-
itemAddAbility(nativeItem, applicatorAbilityTypeId)
|
|
268
|
-
local applicatorAbility = checkNotNull(getItemAbility(nativeItem, applicatorAbilityTypeId))
|
|
269
|
-
if level == nil then
|
|
270
|
-
level = 0
|
|
271
|
-
setAbilityIntegerField(applicatorAbility, ABILITY_IF_LEVELS, 1)
|
|
272
|
-
end
|
|
273
|
-
setAbilityRealLevelField(applicatorAbility, ABILITY_RLF_DURATION_NORMAL, level, duration or 0)
|
|
274
|
-
setAbilityRealLevelField(applicatorAbility, ABILITY_RLF_DURATION_HERO, level, duration or 0)
|
|
275
|
-
if movementSpeedIncreaseFactor ~= nil then
|
|
276
|
-
setAbilityRealLevelField(applicatorAbility, ABILITY_RLF_MOVEMENT_SPEED_INCREASE_BSK1, level, movementSpeedIncreaseFactor)
|
|
277
|
-
end
|
|
278
|
-
setItemBooleanField(nativeItem, ITEM_BF_ACTIVELY_USED, true)
|
|
279
|
-
setItemBooleanField(nativeItem, ITEM_BF_USE_AUTOMATICALLY_WHEN_ACQUIRED, true)
|
|
280
|
-
if level > 0 then
|
|
258
|
+
local nativePlayer = unit.owner.handle
|
|
259
|
+
if level ~= nil and level > 0 then
|
|
281
260
|
local upgradeId = applicatorUpgradeIdByApplicatorAbilityTypeId[applicatorAbilityTypeId]
|
|
282
261
|
if upgradeId ~= nil then
|
|
283
|
-
setPlayerTechResearched(
|
|
284
|
-
getOwningPlayer(nativeUnit),
|
|
285
|
-
upgradeId,
|
|
286
|
-
level
|
|
287
|
-
)
|
|
288
|
-
end
|
|
289
|
-
end
|
|
290
|
-
if not unitAddItem(nativeUnit, nativeItem) then
|
|
291
|
-
local latestInventoryAbilityTypeId = 0
|
|
292
|
-
local nativeItemBySlot = {}
|
|
293
|
-
local inventorySize = unitInventorySize(nativeUnit)
|
|
294
|
-
if inventorySize ~= 0 then
|
|
295
|
-
for slot = 0, inventorySize - 1 do
|
|
296
|
-
nativeItemBySlot[slot] = UnitRemoveItemFromSlot(nativeUnit, slot)
|
|
297
|
-
end
|
|
298
|
-
local unitNativeAbility = getUnitAbilityByIndex(nativeUnit, 0)
|
|
299
|
-
local i = 1
|
|
300
|
-
while unitNativeAbility ~= nil do
|
|
301
|
-
local abilityTypeId = getAbilityId(unitNativeAbility)
|
|
302
|
-
if INVENTORY_ABILITY_TYPE_IDS[abilityTypeId] ~= nil then
|
|
303
|
-
latestInventoryAbilityTypeId = abilityTypeId
|
|
304
|
-
end
|
|
305
|
-
unitNativeAbility = getUnitAbilityByIndex(nativeUnit, i)
|
|
306
|
-
i = i + 1
|
|
307
|
-
end
|
|
308
|
-
unitRemoveAbility(nativeUnit, latestInventoryAbilityTypeId)
|
|
262
|
+
setPlayerTechResearched(nativePlayer, upgradeId, level)
|
|
309
263
|
end
|
|
310
|
-
unitAddAbility(nativeUnit, INVENTORY_ABILITY_TYPE_ID)
|
|
311
|
-
success = unitAddItem(nativeUnit, nativeItem)
|
|
312
|
-
unitRemoveAbility(nativeUnit, INVENTORY_ABILITY_TYPE_ID)
|
|
313
|
-
if latestInventoryAbilityTypeId ~= 0 then
|
|
314
|
-
unitAddAbility(nativeUnit, latestInventoryAbilityTypeId)
|
|
315
|
-
for slot, nativeItem in pairs(nativeItemBySlot) do
|
|
316
|
-
unitAddItem(nativeUnit, nativeItem)
|
|
317
|
-
unitDropItemSlot(nativeUnit, nativeItem, slot)
|
|
318
|
-
end
|
|
319
|
-
end
|
|
320
|
-
else
|
|
321
|
-
success = true
|
|
322
264
|
end
|
|
323
|
-
|
|
324
|
-
|
|
265
|
+
local success = castAbility(
|
|
266
|
+
unit.handle,
|
|
267
|
+
applicatorAbilityTypeId,
|
|
268
|
+
preparePhysicalPositiveApplicatorAbility,
|
|
269
|
+
level,
|
|
270
|
+
duration or 0,
|
|
271
|
+
movementSpeedIncreaseFactor
|
|
272
|
+
)
|
|
273
|
+
if level ~= nil and level > 0 then
|
|
325
274
|
local upgradeId = applicatorUpgradeIdByApplicatorAbilityTypeId[applicatorAbilityTypeId]
|
|
326
275
|
if upgradeId ~= nil then
|
|
327
|
-
setPlayerTechResearched(
|
|
328
|
-
getOwningPlayer(nativeUnit),
|
|
329
|
-
upgradeId,
|
|
330
|
-
0
|
|
331
|
-
)
|
|
276
|
+
setPlayerTechResearched(nativePlayer, upgradeId, 0)
|
|
332
277
|
end
|
|
333
278
|
end
|
|
334
279
|
return success
|
|
@@ -364,6 +309,17 @@ ____exports.internalApplyBuff = function(unit, applicableBuffTypeId, polarity, r
|
|
|
364
309
|
end
|
|
365
310
|
return success
|
|
366
311
|
end
|
|
312
|
+
preparePhysicalPositiveApplicatorAbility = function(ability, level, duration, movementSpeedIncreaseFactor)
|
|
313
|
+
if level == nil then
|
|
314
|
+
setAbilityIntegerField(ability, ABILITY_IF_LEVELS, 1)
|
|
315
|
+
level = 1
|
|
316
|
+
end
|
|
317
|
+
setAbilityRealLevelField(ability, ABILITY_RLF_DURATION_NORMAL, level, duration)
|
|
318
|
+
setAbilityRealLevelField(ability, ABILITY_RLF_DURATION_HERO, level, duration)
|
|
319
|
+
if movementSpeedIncreaseFactor ~= nil then
|
|
320
|
+
setAbilityRealLevelField(ability, ABILITY_RLF_MOVEMENT_SPEED_INCREASE_BSK1, level, movementSpeedIncreaseFactor)
|
|
321
|
+
end
|
|
322
|
+
end
|
|
367
323
|
---
|
|
368
324
|
-- @internal For use by internal systems only.
|
|
369
325
|
____exports.removeBuff = function(unit, applicableBuffTypeId)
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
/** @noSelfInFile */
|
|
2
|
-
import { Ability } from "../internal/ability";
|
|
2
|
+
import { Ability, jabilityfield } from "../internal/ability";
|
|
3
3
|
import { ObjectArrayField, ObjectField, ObjectFieldValueChangeEvent, ObjectLevelField, ObjectLevelFieldValueChangeEvent, ReadonlyObjectFieldType, ReadonlyObjectLevelFieldType } from "../object-field";
|
|
4
4
|
import { AbilityType, AbilityTypeId } from "../object-data/entry/ability-type";
|
|
5
5
|
import { ObjectDataEntryId } from "../object-data/entry";
|
|
6
6
|
import { LightningTypeId } from "../object-data/entry/lightning-type";
|
|
7
7
|
import { CombatClassifications } from "../object-data/auxiliary/combat-classification";
|
|
8
8
|
import { UnitTypeId } from "../object-data/entry/unit-type";
|
|
9
|
-
export declare abstract class AbilityField<ValueType extends number | string | boolean = number | string | boolean, NativeFieldType =
|
|
9
|
+
export declare abstract class AbilityField<ValueType extends number | string | boolean = number | string | boolean, NativeFieldType extends jabilityfield = jabilityfield> extends ObjectField<AbilityType, Ability, ValueType, NativeFieldType> {
|
|
10
10
|
protected get instanceClass(): typeof Ability;
|
|
11
11
|
protected getObjectDataEntryId(instance: Ability): AbilityTypeId;
|
|
12
|
+
protected hasNativeFieldValue(instance: Ability): boolean;
|
|
12
13
|
static get valueChangeEvent(): ObjectFieldValueChangeEvent<ReadonlyObjectFieldType<AbilityField>>;
|
|
13
14
|
}
|
|
14
15
|
export declare class AbilityBooleanField extends AbilityField<boolean, jabilitybooleanfield> {
|
|
@@ -18,7 +19,7 @@ export declare class AbilityBooleanField extends AbilityField<boolean, jabilityb
|
|
|
18
19
|
protected setNativeFieldValue(instance: Ability, value: boolean): boolean;
|
|
19
20
|
static get valueChangeEvent(): ObjectFieldValueChangeEvent<AbilityBooleanField>;
|
|
20
21
|
}
|
|
21
|
-
export declare abstract class AbilityNumberField<NativeFieldType =
|
|
22
|
+
export declare abstract class AbilityNumberField<NativeFieldType extends jabilityfield = jabilityfield> extends AbilityField<number, NativeFieldType> {
|
|
22
23
|
protected get defaultValue(): number;
|
|
23
24
|
static get valueChangeEvent(): ObjectFieldValueChangeEvent<AbilityNumberField>;
|
|
24
25
|
}
|
|
@@ -59,10 +60,11 @@ export declare abstract class AbilityObjectDataEntryIdArrayField<T extends Objec
|
|
|
59
60
|
}
|
|
60
61
|
export declare class AbilityLightningTypeIdArrayField extends AbilityObjectDataEntryIdArrayField<LightningTypeId> {
|
|
61
62
|
}
|
|
62
|
-
export declare abstract class AbilityLevelField<ValueType extends number | string | boolean = number | string | boolean, InputValueType extends ValueType = never, NativeFieldType =
|
|
63
|
+
export declare abstract class AbilityLevelField<ValueType extends number | string | boolean = number | string | boolean, InputValueType extends ValueType = never, NativeFieldType extends jabilityfield = jabilityfield> extends ObjectLevelField<AbilityType, Ability, ValueType, InputValueType, NativeFieldType> {
|
|
63
64
|
protected get instanceClass(): typeof Ability;
|
|
64
65
|
protected getLevelCount(entry: AbilityType | Ability): number;
|
|
65
66
|
protected getObjectDataEntryId(instance: Ability): AbilityTypeId;
|
|
67
|
+
protected hasNativeFieldValue(instance: Ability): boolean;
|
|
66
68
|
static get valueChangeEvent(): ObjectLevelFieldValueChangeEvent<ReadonlyObjectLevelFieldType<AbilityLevelField>>;
|
|
67
69
|
}
|
|
68
70
|
export declare class AbilityBooleanLevelField extends AbilityLevelField<boolean, boolean, jabilityintegerlevelfield> {
|
|
@@ -72,7 +74,7 @@ export declare class AbilityBooleanLevelField extends AbilityLevelField<boolean,
|
|
|
72
74
|
protected setNativeFieldValue(instance: Ability, level: number, value: boolean): boolean;
|
|
73
75
|
static get valueChangeEvent(): ObjectLevelFieldValueChangeEvent<AbilityBooleanLevelField>;
|
|
74
76
|
}
|
|
75
|
-
export declare abstract class AbilityNumberLevelField<NativeFieldType =
|
|
77
|
+
export declare abstract class AbilityNumberLevelField<NativeFieldType extends jabilityfield = jabilityfield> extends AbilityLevelField<number, number, NativeFieldType> {
|
|
76
78
|
protected get defaultValue(): number;
|
|
77
79
|
static get valueChangeEvent(): ObjectLevelFieldValueChangeEvent<AbilityNumberLevelField>;
|
|
78
80
|
}
|
|
@@ -27,6 +27,9 @@ __TS__ClassExtends(AbilityField, ObjectField)
|
|
|
27
27
|
function AbilityField.prototype.getObjectDataEntryId(self, instance)
|
|
28
28
|
return instance.typeId
|
|
29
29
|
end
|
|
30
|
+
function AbilityField.prototype.hasNativeFieldValue(self, instance)
|
|
31
|
+
return instance:hasField(self.nativeField)
|
|
32
|
+
end
|
|
30
33
|
__TS__SetDescriptor(
|
|
31
34
|
AbilityField.prototype,
|
|
32
35
|
"instanceClass",
|
|
@@ -261,6 +264,9 @@ end
|
|
|
261
264
|
function AbilityLevelField.prototype.getObjectDataEntryId(self, instance)
|
|
262
265
|
return instance.typeId
|
|
263
266
|
end
|
|
267
|
+
function AbilityLevelField.prototype.hasNativeFieldValue(self, instance)
|
|
268
|
+
return instance:hasField(self.nativeField)
|
|
269
|
+
end
|
|
264
270
|
__TS__SetDescriptor(
|
|
265
271
|
AbilityLevelField.prototype,
|
|
266
272
|
"instanceClass",
|
|
@@ -9,6 +9,7 @@ export declare abstract class UnitField<ValueType extends number | string | bool
|
|
|
9
9
|
export declare class UnitStringField extends UnitField<string, junitstringfield> {
|
|
10
10
|
protected get defaultValue(): string;
|
|
11
11
|
protected getNativeFieldById(id: number): junitstringfield;
|
|
12
|
+
protected hasNativeFieldValue(): boolean;
|
|
12
13
|
protected getNativeFieldValue(instance: Unit): string;
|
|
13
14
|
protected getObjectDataEntryId(instance: Unit): UnitTypeId;
|
|
14
15
|
protected setNativeFieldValue(instance: Unit, value: string): boolean;
|
|
@@ -29,6 +29,9 @@ __TS__ClassExtends(UnitStringField, ____exports.UnitField)
|
|
|
29
29
|
function UnitStringField.prototype.getNativeFieldById(self, id)
|
|
30
30
|
return ConvertUnitStringField(id)
|
|
31
31
|
end
|
|
32
|
+
function UnitStringField.prototype.hasNativeFieldValue(self)
|
|
33
|
+
return true
|
|
34
|
+
end
|
|
32
35
|
function UnitStringField.prototype.getNativeFieldValue(self, instance)
|
|
33
36
|
return instance:getField(self.nativeField)
|
|
34
37
|
end
|
package/engine/object-field.d.ts
CHANGED
|
@@ -9,7 +9,6 @@ export type ObjectFieldId = number & {
|
|
|
9
9
|
export type ObjectFieldConstructor<T extends ObjectFieldBase<any, any, any, any>> = OmitConstructor<typeof ObjectFieldBase> & (new (id: number) => T);
|
|
10
10
|
export type ObjectFieldAbstractConstructor<T extends ObjectFieldBase<any, any, any, any>> = OmitConstructor<typeof ObjectFieldBase> & (abstract new (id: number) => T);
|
|
11
11
|
declare abstract class ObjectFieldBase<ObjectDataEntryType extends ObjectDataEntry, InstanceType extends AnyNotNil, ValueType, NativeFieldType> {
|
|
12
|
-
protected readonly valueByInstance: LuaMap<InstanceType, ValueType>;
|
|
13
12
|
protected abstract readonly instanceClass: AbstractConstructor<InstanceType> | Function;
|
|
14
13
|
supports(instance: AnyNotNil): instance is InstanceType & {
|
|
15
14
|
readonly __oneSidedTypeGuard: unique symbol;
|
|
@@ -33,22 +32,23 @@ export type ObjectFieldValueChangeEvent<T extends ObjectField<any, any, any, any
|
|
|
33
32
|
previousValue: ValueType,
|
|
34
33
|
newValue: ValueType
|
|
35
34
|
]> : never;
|
|
36
|
-
export type ReadonlyObjectFieldType<T extends ObjectField<any, any, any, any>> = Omit<T, "setValue" | "removeValue">;
|
|
35
|
+
export type ReadonlyObjectFieldType<T extends ObjectField<any, any, any, any>> = Omit<T, "setValue" | "removeValue" | "trySetValue">;
|
|
37
36
|
type ReadonlyObjectFieldConstructor<T extends ObjectField> = OmitConstructor<typeof ObjectField> & (abstract new (...args: any[]) => ReadonlyObjectFieldType<T>);
|
|
38
37
|
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
38
|
protected abstract readonly defaultValue: ValueType;
|
|
40
|
-
|
|
39
|
+
protected abstract hasNativeFieldValue(instance: InstanceType): boolean;
|
|
41
40
|
protected abstract getNativeFieldValue(instance: InstanceType): ValueType;
|
|
42
41
|
protected abstract setNativeFieldValue(instance: InstanceType, value: ValueType): boolean;
|
|
43
42
|
getValue(entry: ObjectDataEntryType | InstanceType): ValueType;
|
|
44
43
|
setValue(entry: ObjectDataEntryType | InstanceType, value: ValueType): boolean;
|
|
45
44
|
removeValue(entry: ObjectDataEntryType): boolean;
|
|
45
|
+
trySetValue(entry: ObjectDataEntryType | InstanceType, value: unknown): boolean;
|
|
46
46
|
private invokeValueChangeEvent;
|
|
47
47
|
private invokeValueChangeEventRecursive;
|
|
48
48
|
protected static getOrCreateValueChangeEvent<T extends ObjectField, R extends ReadonlyObjectFieldType<T>>(this: ReadonlyObjectFieldConstructor<T>): ObjectFieldValueChangeEvent<R>;
|
|
49
49
|
static get valueChangeEvent(): ObjectFieldValueChangeEvent<ReadonlyObjectFieldType<ObjectField>>;
|
|
50
50
|
}
|
|
51
|
-
export type ReadonlyObjectLevelFieldType<T extends ObjectLevelField<any, any, any, any>> = Omit<T, "setValue">;
|
|
51
|
+
export type ReadonlyObjectLevelFieldType<T extends ObjectLevelField<any, any, any, any>> = Omit<T, "setValue" | "trySetValue">;
|
|
52
52
|
export type ObjectLevelFieldValueChangeEvent<T extends ObjectLevelField<any, any, any, any> | ReadonlyObjectLevelFieldType<ObjectLevelField<any, any, any, any>>> = T extends ObjectLevelField<any, infer InstanceType, infer ValueType, any, any> ? DispatchingEvent<[
|
|
53
53
|
instance: InstanceType,
|
|
54
54
|
field: T,
|
|
@@ -72,11 +72,13 @@ export declare abstract class ObjectArrayField<ObjectDataEntryType extends Objec
|
|
|
72
72
|
}
|
|
73
73
|
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> {
|
|
74
74
|
protected abstract readonly defaultValue: ValueType;
|
|
75
|
+
protected abstract hasNativeFieldValue(instance: InstanceType): boolean;
|
|
75
76
|
protected abstract getNativeFieldValue(instance: InstanceType, level: number): ValueType;
|
|
76
77
|
protected abstract setNativeFieldValue(instance: InstanceType, level: number, value: ValueType): boolean;
|
|
77
78
|
protected abstract getLevelCount(entry: ObjectDataEntryType | InstanceType): number;
|
|
78
79
|
getValue<LevelType extends [number] | []>(entry: ObjectDataEntryType | InstanceType, ...[level]: LevelType): LevelType extends [number] ? ValueType : ValueType[];
|
|
79
80
|
setValue(entry: ObjectDataEntryType | InstanceType, ...[levelOrValue, value]: [value: ObjectDataEntryLevelFieldValueSupplier<InputValueType, ValueType>] | [level: number, value: InputValueType]): boolean;
|
|
81
|
+
trySetValue(entry: ObjectDataEntryType | InstanceType, levelOrValue: number | unknown, value?: unknown): boolean;
|
|
80
82
|
private invokeValueChangeEvent;
|
|
81
83
|
private invokeValueChangeEventRecursive;
|
|
82
84
|
protected static getOrCreateValueChangeEvent<T extends ObjectLevelField, R extends ReadonlyObjectLevelFieldType<T>>(this: ReadonlyObjectLevelFieldConstructor<T>): ObjectLevelFieldValueChangeEvent<R>;
|
package/engine/object-field.lua
CHANGED
|
@@ -71,9 +71,6 @@ ____exports.ObjectField = __TS__Class()
|
|
|
71
71
|
local ObjectField = ____exports.ObjectField
|
|
72
72
|
ObjectField.name = "ObjectField"
|
|
73
73
|
__TS__ClassExtends(ObjectField, ObjectFieldBase)
|
|
74
|
-
function ObjectField.prototype.accepts(self, value)
|
|
75
|
-
return __TS__TypeOf(value) == __TS__TypeOf(self.defaultValue)
|
|
76
|
-
end
|
|
77
74
|
function ObjectField.prototype.getValue(self, entry)
|
|
78
75
|
if __TS__InstanceOf(entry, ObjectDataEntry) then
|
|
79
76
|
local defaultValueByObjectDataEntryId = (warpack.compiletime and compiletimeDefaultValueByObjectDataEntryIdByObjectFieldId or defaultValueByObjectDataEntryIdByObjectFieldId)[self.id]
|
|
@@ -135,13 +132,15 @@ function ObjectField.prototype.setValue(self, entry, value)
|
|
|
135
132
|
return true
|
|
136
133
|
end
|
|
137
134
|
end
|
|
135
|
+
if not self:hasNativeFieldValue(entry) then
|
|
136
|
+
return false
|
|
137
|
+
end
|
|
138
138
|
local previousValue = self:getNativeFieldValue(entry)
|
|
139
139
|
if value ~= previousValue then
|
|
140
|
-
if self:setNativeFieldValue(entry, value) then
|
|
141
|
-
self:invokeValueChangeEvent(entry, self, previousValue, value)
|
|
142
|
-
else
|
|
140
|
+
if not self:setNativeFieldValue(entry, value) then
|
|
143
141
|
return false
|
|
144
142
|
end
|
|
143
|
+
self:invokeValueChangeEvent(entry, self, previousValue, value)
|
|
145
144
|
end
|
|
146
145
|
return true
|
|
147
146
|
end
|
|
@@ -159,6 +158,12 @@ function ObjectField.prototype.removeValue(self, entry)
|
|
|
159
158
|
end
|
|
160
159
|
return false
|
|
161
160
|
end
|
|
161
|
+
function ObjectField.prototype.trySetValue(self, entry, value)
|
|
162
|
+
if __TS__TypeOf(value) ~= __TS__TypeOf(self.defaultValue) then
|
|
163
|
+
return false
|
|
164
|
+
end
|
|
165
|
+
return self:setValue(entry, value)
|
|
166
|
+
end
|
|
162
167
|
function ObjectField.prototype.invokeValueChangeEvent(self, ...)
|
|
163
168
|
self:invokeValueChangeEventRecursive(
|
|
164
169
|
getClass(self),
|
|
@@ -387,22 +392,39 @@ function ObjectLevelField.prototype.setValue(self, entry, levelOrValue, value)
|
|
|
387
392
|
return true
|
|
388
393
|
end
|
|
389
394
|
end
|
|
395
|
+
if not self:hasNativeFieldValue(entry) then
|
|
396
|
+
return false
|
|
397
|
+
end
|
|
390
398
|
local previousValue = self:getNativeFieldValue(entry, level)
|
|
391
399
|
if value ~= previousValue then
|
|
392
|
-
if self:setNativeFieldValue(entry, level, value) then
|
|
393
|
-
self:invokeValueChangeEvent(
|
|
394
|
-
entry,
|
|
395
|
-
self,
|
|
396
|
-
level,
|
|
397
|
-
previousValue,
|
|
398
|
-
value
|
|
399
|
-
)
|
|
400
|
-
else
|
|
400
|
+
if not self:setNativeFieldValue(entry, level, value) then
|
|
401
401
|
return false
|
|
402
402
|
end
|
|
403
|
+
self:invokeValueChangeEvent(
|
|
404
|
+
entry,
|
|
405
|
+
self,
|
|
406
|
+
level,
|
|
407
|
+
previousValue,
|
|
408
|
+
value
|
|
409
|
+
)
|
|
403
410
|
end
|
|
404
411
|
return true
|
|
405
412
|
end
|
|
413
|
+
function ObjectLevelField.prototype.trySetValue(self, entry, levelOrValue, value)
|
|
414
|
+
if value ~= nil then
|
|
415
|
+
if __TS__TypeOf(value) ~= __TS__TypeOf(self.defaultValue) then
|
|
416
|
+
return false
|
|
417
|
+
end
|
|
418
|
+
if type(levelOrValue) ~= "number" then
|
|
419
|
+
return false
|
|
420
|
+
end
|
|
421
|
+
return self:setValue(entry, levelOrValue, value)
|
|
422
|
+
end
|
|
423
|
+
if __TS__TypeOf(levelOrValue) ~= __TS__TypeOf(self.defaultValue) then
|
|
424
|
+
return false
|
|
425
|
+
end
|
|
426
|
+
return self:setValue(entry, levelOrValue)
|
|
427
|
+
end
|
|
406
428
|
function ObjectLevelField.prototype.invokeValueChangeEvent(self, ...)
|
|
407
429
|
self:invokeValueChangeEventRecursive(
|
|
408
430
|
getClass(self),
|
package/engine/unit.d.ts
CHANGED
|
@@ -14,6 +14,7 @@ import "./internal/unit/missile";
|
|
|
14
14
|
import "./internal/unit-missile-launch";
|
|
15
15
|
import "./internal/unit/ghost-counter";
|
|
16
16
|
import "./internal/unit/invulnerability-counter";
|
|
17
|
+
import "./internal/unit/detach-missiles";
|
|
17
18
|
import "./internal/unit/band-aids/ancestral-spirit-cannibalize";
|
|
18
19
|
export { Unit, DamagingEvent, DamageEvent } from "./internal/unit";
|
|
19
20
|
export * from "./internal/unit+damage";
|
package/engine/unit.lua
CHANGED
|
@@ -14,6 +14,7 @@ require("engine.internal.unit.missile")
|
|
|
14
14
|
require("engine.internal.unit-missile-launch")
|
|
15
15
|
require("engine.internal.unit.ghost-counter")
|
|
16
16
|
require("engine.internal.unit.invulnerability-counter")
|
|
17
|
+
require("engine.internal.unit.detach-missiles")
|
|
17
18
|
require("engine.internal.unit.band-aids.ancestral-spirit-cannibalize")
|
|
18
19
|
do
|
|
19
20
|
local ____unit = require("engine.internal.unit")
|
package/global/vec2.lua
CHANGED
package/package.json
CHANGED
package/utility/linked-set.d.ts
CHANGED
|
@@ -44,6 +44,7 @@ export declare class LinkedSet<T extends AnyNotNil> implements ReadonlyLinkedSet
|
|
|
44
44
|
sortBy<R>(selector: ((value: T) => R) | KeysOfType<T, R>): void;
|
|
45
45
|
protected __pairs(this: LinkedSet<T>): LuaIterator<T | undefined, IteratorState<T>>;
|
|
46
46
|
}
|
|
47
|
+
export declare const emptyLinkedSet: <T extends AnyNotNil>() => ReadonlyLinkedSet<T>;
|
|
47
48
|
export declare const linkedSetOf: <T extends AnyNotNil>(...elements: readonly T[]) => LinkedSet<T>;
|
|
48
49
|
export declare const linkedSetOfNotNull: <T extends AnyNotNil>(...elements: readonly (T | null | undefined)[]) => LinkedSet<T>;
|
|
49
50
|
export {};
|
package/utility/linked-set.lua
CHANGED
|
@@ -2,9 +2,12 @@ local ____lualib = require("lualib_bundle")
|
|
|
2
2
|
local __TS__Class = ____lualib.__TS__Class
|
|
3
3
|
local __TS__New = ____lualib.__TS__New
|
|
4
4
|
local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
|
|
5
|
+
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
|
|
5
6
|
local ____exports = {}
|
|
6
7
|
local ____arrays = require("utility.arrays")
|
|
7
8
|
local sortBy = ____arrays.sortBy
|
|
9
|
+
local ____exception = require("exception")
|
|
10
|
+
local UnsupportedOperationException = ____exception.UnsupportedOperationException
|
|
8
11
|
local function linkedSetNext(state)
|
|
9
12
|
local n = state.n
|
|
10
13
|
state.n = state.t[n]
|
|
@@ -161,6 +164,19 @@ __TS__SetDescriptor(
|
|
|
161
164
|
end},
|
|
162
165
|
true
|
|
163
166
|
)
|
|
167
|
+
local EmptyLinkedSet = __TS__Class()
|
|
168
|
+
EmptyLinkedSet.name = "EmptyLinkedSet"
|
|
169
|
+
__TS__ClassExtends(EmptyLinkedSet, ____exports.LinkedSet)
|
|
170
|
+
function EmptyLinkedSet.prototype.add(self)
|
|
171
|
+
error(
|
|
172
|
+
__TS__New(UnsupportedOperationException),
|
|
173
|
+
0
|
|
174
|
+
)
|
|
175
|
+
end
|
|
176
|
+
local EMPTY_LINKED_SET = __TS__New(EmptyLinkedSet)
|
|
177
|
+
____exports.emptyLinkedSet = function()
|
|
178
|
+
return EMPTY_LINKED_SET
|
|
179
|
+
end
|
|
164
180
|
____exports.linkedSetOf = function(...)
|
|
165
181
|
local linkedSet = __TS__New(____exports.LinkedSet)
|
|
166
182
|
for i = 1, select("#", ...) do
|