Differential D2680 Diff 16978 ps/trunk/binaries/data/mods/public/simulation/components/tests/test_Heal.js
Changeset View
Changeset View
Standalone View
Standalone View
ps/trunk/binaries/data/mods/public/simulation/components/tests/test_Heal.js
Engine.LoadHelperScript("ValueModification.js"); | Engine.LoadHelperScript("ValueModification.js"); | ||||
Engine.LoadHelperScript("Player.js"); | Engine.LoadHelperScript("Player.js"); | ||||
Engine.LoadComponentScript("interfaces/Formation.js"); | Engine.LoadComponentScript("interfaces/Formation.js"); | ||||
Engine.LoadComponentScript("interfaces/Heal.js"); | Engine.LoadComponentScript("interfaces/Heal.js"); | ||||
Engine.LoadComponentScript("interfaces/Health.js"); | Engine.LoadComponentScript("interfaces/Health.js"); | ||||
Engine.LoadComponentScript("interfaces/Loot.js"); | Engine.LoadComponentScript("interfaces/Loot.js"); | ||||
Engine.LoadComponentScript("interfaces/Promotion.js"); | Engine.LoadComponentScript("interfaces/Promotion.js"); | ||||
Engine.LoadComponentScript("interfaces/Timer.js"); | |||||
Engine.LoadComponentScript("interfaces/UnitAI.js"); | Engine.LoadComponentScript("interfaces/UnitAI.js"); | ||||
Engine.LoadComponentScript("Heal.js"); | Engine.LoadComponentScript("Heal.js"); | ||||
Engine.LoadComponentScript("Timer.js"); | |||||
const entity = 60; | const entity = 60; | ||||
const player = 1; | const player = 1; | ||||
const otherPlayer = 2; | const otherPlayer = 2; | ||||
AddMock(SYSTEM_ENTITY, IID_ObstructionManager, { | |||||
"IsInTargetRange": () => true | |||||
}); | |||||
let template = { | let template = { | ||||
"Range": 20, | "Range": "20", | ||||
"RangeOverlay": { | "RangeOverlay": { | ||||
"LineTexture": "heal_overlay_range.png", | "LineTexture": "heal_overlay_range.png", | ||||
"LineTextureMask": "heal_overlay_range_mask.png", | "LineTextureMask": "heal_overlay_range_mask.png", | ||||
"LineThickness": 0.35 | "LineThickness": "0.35" | ||||
}, | }, | ||||
"Health": 5, | "Health": "5", | ||||
"Interval": 2000, | "Interval": "2000", | ||||
"UnhealableClasses": { "_string": "Cavalry" }, | "UnhealableClasses": { "_string": "Cavalry" }, | ||||
"HealableClasses": { "_string": "Support Infantry" }, | "HealableClasses": { "_string": "Support Infantry" } | ||||
}; | }; | ||||
AddMock(entity, IID_Ownership, { | AddMock(entity, IID_Ownership, { | ||||
"GetOwner": () => player | "GetOwner": () => player | ||||
}); | }); | ||||
AddMock(SYSTEM_ENTITY, IID_PlayerManager, { | AddMock(SYSTEM_ENTITY, IID_PlayerManager, { | ||||
"GetPlayerByID": () => player | "GetPlayerByID": () => player | ||||
}); | }); | ||||
AddMock(player, IID_Player, { | AddMock(player, IID_Player, { | ||||
"IsAlly": () => true | "IsAlly": (p) => p == player | ||||
}); | }); | ||||
AddMock(otherPlayer, IID_Player, { | AddMock(otherPlayer, IID_Player, { | ||||
"IsAlly": () => false | "IsAlly": (p) => p == player | ||||
}); | }); | ||||
ApplyValueModificationsToEntity = function(value, stat, ent) | ApplyValueModificationsToEntity = function(value, stat, ent) | ||||
{ | { | ||||
if (ent != entity) | if (ent != entity) | ||||
return stat; | return stat; | ||||
switch (value) | switch (value) | ||||
{ | { | ||||
Show All 25 Lines | |||||
TS_ASSERT_UNEVAL_EQUALS(cmpHeal.GetRangeOverlays(), [{ | TS_ASSERT_UNEVAL_EQUALS(cmpHeal.GetRangeOverlays(), [{ | ||||
"radius": 20 + 300, | "radius": 20 + 300, | ||||
"texture": "heal_overlay_range.png", | "texture": "heal_overlay_range.png", | ||||
"textureMask": "heal_overlay_range_mask.png", | "textureMask": "heal_overlay_range_mask.png", | ||||
"thickness": 0.35 | "thickness": 0.35 | ||||
}]); | }]); | ||||
// Test PerformHeal | // Test healing. | ||||
let target = 70; | let target = 70; | ||||
AddMock(target, IID_Ownership, { | AddMock(target, IID_Ownership, { | ||||
"GetOwner": () => player | "GetOwner": () => player | ||||
}); | }); | ||||
let targetClasses; | let targetClasses = ["Infantry"]; | ||||
AddMock(target, IID_Identity, { | AddMock(target, IID_Identity, { | ||||
"GetClassesList": () => targetClasses | "GetClassesList": () => targetClasses | ||||
}); | }); | ||||
let cmpTimer = ConstructComponent(SYSTEM_ENTITY, "Timer"); | |||||
let increased; | let increased; | ||||
let unhealable = false; | let unhealable = false; | ||||
AddMock(target, IID_Health, { | AddMock(target, IID_Health, { | ||||
"GetMaxHitpoints": () => 700, | "GetMaxHitpoints": () => 700, | ||||
"Increase": amount => { | "Increase": amount => { | ||||
increased = true; | increased = true; | ||||
TS_ASSERT_EQUALS(amount, 5 + 100); | TS_ASSERT_EQUALS(amount, 5 + 100); | ||||
return { "old": 600, "new": 600 + 5 + 100 }; | return { "old": 600, "new": 600 + 5 + 100 }; | ||||
}, | }, | ||||
"IsUnhealable": () => unhealable | "IsUnhealable": () => unhealable, | ||||
"IsInjured": () => true | |||||
}); | }); | ||||
cmpHeal.PerformHeal(target); | TS_ASSERT(cmpHeal.StartHealing(target)); | ||||
cmpTimer.OnUpdate({ "turnLength": 1 }); | |||||
TS_ASSERT(increased); | |||||
increased = false; | |||||
cmpTimer.OnUpdate({ "turnLength": 2.2 }); | |||||
TS_ASSERT(increased); | TS_ASSERT(increased); | ||||
// Test we can't heal too quickly. | |||||
increased = false; | |||||
TS_ASSERT(cmpHeal.StartHealing(target)); | |||||
cmpTimer.OnUpdate({ "turnLength": 2 }); | |||||
TS_ASSERT(!increased); | |||||
// Test experience. | |||||
let looted; | let looted; | ||||
AddMock(target, IID_Loot, { | AddMock(target, IID_Loot, { | ||||
"GetXp": () => { | "GetXp": () => { | ||||
looted = true; return 80; | looted = true; return 80; | ||||
} | } | ||||
}); | }); | ||||
let promoted; | let promoted; | ||||
AddMock(entity, IID_Promotion, { | AddMock(entity, IID_Promotion, { | ||||
"IncreaseXp": amount => { | "IncreaseXp": amount => { | ||||
promoted = true; | promoted = true; | ||||
TS_ASSERT_EQUALS(amount, (5 + 100) * 80 / 700); | TS_ASSERT_EQUALS(amount, (5 + 100) * 80 / 700); | ||||
} | } | ||||
}); | }); | ||||
increased = false; | increased = false; | ||||
cmpHeal.PerformHeal(target); | TS_ASSERT(cmpHeal.StartHealing(target)); | ||||
cmpTimer.OnUpdate({ "turnLength": 1 }); | |||||
TS_ASSERT(increased && looted && promoted); | TS_ASSERT(increased && looted && promoted); | ||||
// Test OnValueModification | // Test OnValueModification | ||||
let updated; | let updated; | ||||
AddMock(entity, IID_UnitAI, { | AddMock(entity, IID_UnitAI, { | ||||
"FaceTowardsTarget": () => {}, | |||||
"UpdateRangeQueries": () => { | "UpdateRangeQueries": () => { | ||||
updated = true; | updated = true; | ||||
} | } | ||||
}); | }); | ||||
cmpHeal.OnValueModification({ "component": "Heal", "valueNames": ["Heal/Health"] }); | cmpHeal.OnValueModification({ "component": "Heal", "valueNames": ["Heal/Health"] }); | ||||
TS_ASSERT(!updated); | TS_ASSERT(!updated); | ||||
Show All 16 Lines | |||||
targetClasses = ["Infantry"]; | targetClasses = ["Infantry"]; | ||||
TS_ASSERT_UNEVAL_EQUALS(cmpHeal.CanHeal(target), true); | TS_ASSERT_UNEVAL_EQUALS(cmpHeal.CanHeal(target), true); | ||||
unhealable = true; | unhealable = true; | ||||
TS_ASSERT_UNEVAL_EQUALS(cmpHeal.CanHeal(target), false); | TS_ASSERT_UNEVAL_EQUALS(cmpHeal.CanHeal(target), false); | ||||
let otherTarget = 71; | let otherTarget = 71; | ||||
AddMock(otherTarget, IID_Ownership, { | AddMock(otherTarget, IID_Ownership, { | ||||
"GetOwner": () => player | "GetOwner": () => otherPlayer | ||||
}); | }); | ||||
AddMock(otherTarget, IID_Health, { | AddMock(otherTarget, IID_Health, { | ||||
"IsUnhealable": () => false | "IsUnhealable": () => false, | ||||
"IsInjured": () => true | |||||
}); | |||||
AddMock(otherTarget, IID_Identity, { | |||||
"GetClassesList": () => ["Infantry"] | |||||
}); | |||||
TS_ASSERT(!cmpHeal.CanHeal(otherTarget)); | |||||
// Test we stop healing when finished. | |||||
increased = false; | |||||
AddMock(target, IID_Health, { | |||||
"GetMaxHitpoints": () => 700, | |||||
"Increase": amount => { | |||||
increased = true; | |||||
TS_ASSERT_EQUALS(amount, 5 + 100); | |||||
return { "old": 600, "new": 600 + 5 + 100 }; | |||||
}, | |||||
"IsUnhealable": () => false, | |||||
"IsInjured": () => true | |||||
}); | |||||
TS_ASSERT(cmpHeal.StartHealing(target)); | |||||
cmpTimer.OnUpdate({ "turnLength": 2.2 }); | |||||
TS_ASSERT(increased); | |||||
increased = false; | |||||
AddMock(target, IID_Health, { | |||||
"GetMaxHitpoints": () => 700, | |||||
"Increase": amount => { | |||||
increased = true; | |||||
TS_ASSERT(false); | |||||
}, | |||||
"IsUnhealable": () => false, | |||||
"IsInjured": () => false | |||||
}); | }); | ||||
TS_ASSERT_UNEVAL_EQUALS(cmpHeal.CanHeal(otherTarget), false); | cmpTimer.OnUpdate({ "turnLength": 2.2 }); | ||||
TS_ASSERT(!increased); |
Wildfire Games · Phabricator