Differential D2092 Diff 9442 binaries/data/mods/public/simulation/components/tests/test_StatusEffectsReceiver.js
Changeset View
Changeset View
Standalone View
Standalone View
binaries/data/mods/public/simulation/components/tests/test_StatusEffectsReceiver.js
Engine.LoadComponentScript("interfaces/Damage.js"); | |||||
Engine.LoadComponentScript("interfaces/StatusEffectsReceiver.js"); | Engine.LoadComponentScript("interfaces/StatusEffectsReceiver.js"); | ||||
Engine.LoadComponentScript("interfaces/Timer.js"); | Engine.LoadComponentScript("interfaces/Timer.js"); | ||||
Engine.LoadComponentScript("StatusEffectsReceiver.js"); | Engine.LoadComponentScript("StatusEffectsReceiver.js"); | ||||
Engine.LoadComponentScript("Timer.js"); | Engine.LoadComponentScript("Timer.js"); | ||||
var target = 42; | var target = 42; | ||||
var cmpStatusReceiver; | var cmpStatusReceiver; | ||||
var cmpTimer; | var cmpTimer; | ||||
var dealtDamage; | var dealtDamage; | ||||
function setup() | function setup() | ||||
{ | { | ||||
cmpStatusReceiver = ConstructComponent(target, "StatusEffectsReceiver"); | cmpStatusReceiver = ConstructComponent(target, "StatusEffectsReceiver"); | ||||
cmpTimer = ConstructComponent(SYSTEM_ENTITY, "Timer"); | cmpTimer = ConstructComponent(SYSTEM_ENTITY, "Timer"); | ||||
dealtDamage = 0; | dealtDamage = 0; | ||||
} | } | ||||
function testInflictEffects() | function testInflictEffects() | ||||
{ | { | ||||
setup(); | setup(); | ||||
let statusName = "Burn"; | let statusName = "Burn"; | ||||
AddMock(SYSTEM_ENTITY, IID_Damage, { | let Attacking = { | ||||
"CauseDamage": (data) => { dealtDamage += data.strengths[statusName]; } | "HandleAttackEffects": (_, attackData) => { dealtDamage += attackData.Damage[statusName]; } | ||||
}); | }; | ||||
Engine.RegisterGlobal("Attacking", Attacking); | |||||
// damage scheduled: 0, 10, 20 sec | // damage scheduled: 0, 10, 20 sec | ||||
cmpStatusReceiver.InflictEffects({ | cmpStatusReceiver.AddStatus(statusName, { | ||||
[statusName]: { | |||||
"Duration": 20000, | "Duration": 20000, | ||||
"Interval": 10000, | "Interval": 10000, | ||||
"Damage": 1 | "Damage": 1 | ||||
} | |||||
}); | }); | ||||
cmpTimer.OnUpdate({ "turnLength": 1 }); | cmpTimer.OnUpdate({ "turnLength": 1 }); | ||||
TS_ASSERT_EQUALS(dealtDamage, 1); // 1 sec | TS_ASSERT_EQUALS(dealtDamage, 1); // 1 sec | ||||
cmpTimer.OnUpdate({ "turnLength": 8 }); | cmpTimer.OnUpdate({ "turnLength": 8 }); | ||||
TS_ASSERT_EQUALS(dealtDamage, 1); // 9 sec | TS_ASSERT_EQUALS(dealtDamage, 1); // 9 sec | ||||
cmpTimer.OnUpdate({ "turnLength": 1 }); | cmpTimer.OnUpdate({ "turnLength": 1 }); | ||||
TS_ASSERT_EQUALS(dealtDamage, 2); // 10 sec | TS_ASSERT_EQUALS(dealtDamage, 2); // 10 sec | ||||
cmpTimer.OnUpdate({ "turnLength": 10 }); | cmpTimer.OnUpdate({ "turnLength": 10 }); | ||||
TS_ASSERT_EQUALS(dealtDamage, 3); // 20 sec | TS_ASSERT_EQUALS(dealtDamage, 3); // 20 sec | ||||
cmpTimer.OnUpdate({ "turnLength": 10 }); | cmpTimer.OnUpdate({ "turnLength": 10 }); | ||||
TS_ASSERT_EQUALS(dealtDamage, 3); // 30 sec | TS_ASSERT_EQUALS(dealtDamage, 3); // 30 sec | ||||
} | } | ||||
testInflictEffects(); | testInflictEffects(); | ||||
function testMultipleEffects() | function testMultipleEffects() | ||||
{ | { | ||||
setup(); | setup(); | ||||
AddMock(SYSTEM_ENTITY, IID_Damage, { | let Attacking = { | ||||
"CauseDamage": (data) => { | "HandleAttackEffects": (_, attackData) => { | ||||
if (data.strengths.Burn) dealtDamage += data.strengths.Burn; | if (attackData.Damage.Burn) dealtDamage += attackData.Damage.Burn; | ||||
if (data.strengths.Poison) dealtDamage += data.strengths.Poison; | if (attackData.Damage.Poison) dealtDamage += attackData.Damage.Poison; | ||||
} | }, | ||||
}); | }; | ||||
Engine.RegisterGlobal("Attacking", Attacking); | |||||
// damage scheduled: 0, 1, 2, 10 sec | // damage scheduled: 0, 1, 2, 10 sec | ||||
cmpStatusReceiver.InflictEffects({ | cmpStatusReceiver.GiveStatus({ | ||||
"Burn": { | "Burn": { | ||||
"Duration": 20000, | "Duration": 20000, | ||||
"Interval": 10000, | "Interval": 10000, | ||||
"Damage": 10 | "Damage": 10 | ||||
}, | }, | ||||
"Poison": { | "Poison": { | ||||
"Duration": 3000, | "Duration": 3000, | ||||
"Interval": 1000, | "Interval": 1000, | ||||
Show All 11 Lines | function testMultipleEffects() | ||||
TS_ASSERT_EQUALS(dealtDamage, 13); // 3 sec | TS_ASSERT_EQUALS(dealtDamage, 13); // 3 sec | ||||
cmpTimer.OnUpdate({ "turnLength": 7 }); | cmpTimer.OnUpdate({ "turnLength": 7 }); | ||||
TS_ASSERT_EQUALS(dealtDamage, 23); // 10 sec | TS_ASSERT_EQUALS(dealtDamage, 23); // 10 sec | ||||
} | } | ||||
testMultipleEffects(); | testMultipleEffects(); | ||||
function testRemoveEffect() | function testRemoveStatus() | ||||
{ | { | ||||
setup(); | setup(); | ||||
let statusName = "Poison"; | let statusName = "Poison"; | ||||
AddMock(SYSTEM_ENTITY, IID_Damage, { | let Attacking = { | ||||
"CauseDamage": (data) => { dealtDamage += data.strengths[statusName]; } | "HandleAttackEffects": (_, attackData) => { dealtDamage += attackData.Damage[statusName]; } | ||||
}); | }; | ||||
Engine.RegisterGlobal("Attacking", Attacking); | |||||
// damage scheduled: 0, 10, 20 sec | // damage scheduled: 0, 10, 20 sec | ||||
cmpStatusReceiver.InflictEffects({ | cmpStatusReceiver.AddStatus(statusName, { | ||||
[statusName]: { | |||||
"Duration": 20000, | "Duration": 20000, | ||||
"Interval": 10000, | "Interval": 10000, | ||||
"Damage": 1 | "Damage": 1 | ||||
} | |||||
}); | }); | ||||
cmpTimer.OnUpdate({ "turnLength": 1 }); | cmpTimer.OnUpdate({ "turnLength": 1 }); | ||||
TS_ASSERT_EQUALS(dealtDamage, 1); // 1 sec | TS_ASSERT_EQUALS(dealtDamage, 1); // 1 sec | ||||
cmpStatusReceiver.RemoveEffect(statusName); | cmpStatusReceiver.RemoveStatus(statusName); | ||||
cmpTimer.OnUpdate({ "turnLength": 10 }); | cmpTimer.OnUpdate({ "turnLength": 10 }); | ||||
TS_ASSERT_EQUALS(dealtDamage, 1); // 11 sec | TS_ASSERT_EQUALS(dealtDamage, 1); // 11 sec | ||||
} | } | ||||
testRemoveEffect(); | testRemoveStatus(); |
Wildfire Games · Phabricator