Differential D1838 Diff 9048 binaries/data/mods/public/simulation/components/tests/test_ProximityDamage.js
Changeset View
Changeset View
Standalone View
Standalone View
binaries/data/mods/public/simulation/components/tests/test_ProximityDamage.js
- This file was added.
Engine.LoadHelperScript("DamageBonus.js"); | |||||
Engine.LoadHelperScript("DamageTypes.js"); | |||||
Engine.LoadHelperScript("ValueModification.js"); | |||||
Engine.LoadComponentScript("interfaces/AuraManager.js"); | |||||
Engine.LoadComponentScript("interfaces/Damage.js"); | |||||
Engine.LoadComponentScript("interfaces/ProximityDamage.js"); | |||||
Engine.LoadComponentScript("interfaces/TechnologyManager.js"); | |||||
Engine.LoadComponentScript("interfaces/Timer.js"); | |||||
Engine.LoadComponentScript("ProximityDamage.js"); | |||||
Engine.LoadComponentScript("Timer.js"); | |||||
let cmpTimer = ConstructComponent(SYSTEM_ENTITY, "Timer"); | |||||
cmpTimer.OnUpdate({ "turnLength": 100 }); | |||||
let damagingEnt = 42; | |||||
let player = 1; | |||||
let playersToDamage = [1, 2, 3, 7]; | |||||
let pos = new Vector2D(3, 4.2); | |||||
ApplyValueModificationsToEntity = function(value, stat, ent) | |||||
{ | |||||
return stat; | |||||
}; | |||||
let template = { | |||||
"Damage": { | |||||
"Pierce": 10.0, | |||||
"Crush": 50.0, | |||||
}, | |||||
"MinRange": 4, | |||||
"MaxRange": 9, | |||||
"PrepareTime": 0, | |||||
"RepeatTime": 100, | |||||
"Shape": "Circular", | |||||
"FriendlyFire": true, | |||||
bb: No need to test this here | |||||
Done Inline ActionsWell it's not really a test, its needed to enable the use of ApplyValueModificationsToEntity in the component. Freagarach: Well it's not really a test, its needed to enable the use of `ApplyValueModificationsToEntity`… | |||||
"OnlyWhenMoving": false | |||||
}; | |||||
let cmpProximityDamage = ConstructComponent(damagingEnt, "ProximityDamage", template); | |||||
AddMock(damagingEnt, IID_Position, { | |||||
Done Inline ActionsOne could also test the movement code by setting this to true and mocking a unitMotion that is first moving then not (one should mock the Damage.CauseProximityDamage to set some parameter to see if it is called) bb: One could also test the movement code by setting this to true and mocking a unitMotion that is… | |||||
"GetPosition2D": () => pos, | |||||
"IsInWorld": () => true | |||||
}); | |||||
AddMock(damagingEnt, IID_Ownership, { | |||||
"GetOwner": () => player | |||||
}); | |||||
let result = { | |||||
"attacker": damagingEnt, | |||||
"origin": pos, | |||||
"minRange": template.MinRange, | |||||
"maxRange": template.MaxRange, | |||||
"shape": template.Shape, | |||||
"strengths": template.Damage, | |||||
"bonus": null, | |||||
"playersToDamage": playersToDamage, | |||||
"restrictedClasses": [], | |||||
"type": "Proximity", | |||||
"attackerOwner": player, | |||||
"statusEffects": template.StatusEffects | |||||
}; | |||||
TS_ASSERT(cmpProximityDamage.GetBonusTemplate() == null); | |||||
AddMock(SYSTEM_ENTITY, IID_Damage, { | |||||
"CauseDamageOverArea": data => TS_ASSERT_UNEVAL_EQUALS(data, result), | |||||
"GetPlayersToDamage": (owner, friendlyFire) => playersToDamage | |||||
Done Inline ActionsIID_Damage? and that isn't a system component... bb: IID_Damage? and that isn't a system component... | |||||
}); | |||||
TS_ASSERT_UNEVAL_EQUALS(cmpProximityDamage.GetProximityDamageStrengths(), template.Damage); | |||||
cmpProximityDamage.CauseProximityDamage(); | |||||
// Test getting bonuses. | |||||
Done Inline ActionsAppears to me nothing is tested here, since Damage.CauseProximityDamage is never called, needs a Timer.onUpdate({ turnLength: 100 }) bb: Appears to me nothing is tested here, since Damage.CauseProximityDamage is never called, needs… | |||||
template.Bonuses = { | |||||
"Bonus1": { | |||||
"Civ": "iber", | |||||
"Multiplier": 1.5 | |||||
}, | |||||
"Bonus2": { | |||||
"Classes": "Javelin", | |||||
"Multiplier": 4 | |||||
}, | |||||
"Bonus3": { | |||||
"Civ": "athen", | |||||
"Multiplier": 2 | |||||
} | |||||
}; | |||||
cmpProximityDamage = ConstructComponent(damagingEnt, "ProximityDamage", template); | |||||
TS_ASSERT_UNEVAL_EQUALS(cmpProximityDamage.GetBonusTemplate(), template.Bonuses); | |||||
// Test timer. | |||||
// Timer needed because we do not need to move to cause damage. | |||||
cmpProximityDamage.CheckTimer(); | |||||
TS_ASSERT(cmpProximityDamage.proximityDamageTimer != null); | |||||
// Timer not needed because we need to move to cause damage. | |||||
template.OnlyWhenMoving = true; | |||||
cmpProximityDamage = ConstructComponent(damagingEnt, "ProximityDamage", template); | |||||
AddMock(damagingEnt, IID_UnitMotion, { | |||||
"IsMoving": () => false | |||||
}); | |||||
cmpProximityDamage.CheckTimer(); | |||||
TS_ASSERT(cmpProximityDamage.proximityDamageTimer == null); | |||||
// Timer needed because we need to move to cause damage. | |||||
AddMock(damagingEnt, IID_UnitMotion, { | |||||
"IsMoving": () => true | |||||
}); | |||||
cmpProximityDamage.CheckTimer(); | |||||
TS_ASSERT(cmpProximityDamage.proximityDamageTimer != null); | |||||
// Timer not needed because we stopped moving. | |||||
AddMock(damagingEnt, IID_UnitMotion, { | |||||
"IsMoving": () => false | |||||
}); | |||||
cmpProximityDamage.CheckTimer(); | |||||
TS_ASSERT(cmpProximityDamage.proximityDamageTimer == null); |
Wildfire Games · Phabricator
No need to test this here