1
0
Fork 0
spacetac/src/ui/battle/WeaponEffect.spec.ts

125 lines
5.1 KiB
TypeScript
Raw Normal View History

2017-09-24 22:23:22 +00:00
module TK.SpaceTac.UI.Specs {
2017-10-26 21:47:13 +00:00
testing("WeaponEffect", test => {
2017-10-29 21:08:55 +00:00
let testgame = setupBattleview(test);
2017-02-21 22:38:31 +00:00
2017-07-23 17:31:46 +00:00
function checkEmitters(step: string, expected: number) {
2018-05-15 14:57:45 +00:00
test.check.same(testgame.view.arena.layer_weapon_effects.length, expected, `${step} - layer children`);
//test.check.same(keys(testgame.view.particles.emitters).length, expected, `${step} - registered emitters`);
2017-07-23 17:31:46 +00:00
}
2017-10-26 21:47:13 +00:00
test.case("displays shield hit effect", check => {
2017-10-09 21:13:56 +00:00
let battleview = testgame.view;
2017-07-23 17:31:46 +00:00
battleview.timer = new Timer();
let effect = new WeaponEffect(battleview.arena, new Ship(), new Target(0, 0), new TriggerAction("weapon"));
effect.shieldImpactEffect({ x: 10, y: 10 }, { x: 20, y: 15 }, 1, true);
let layer = battleview.arena.layer_weapon_effects;
2018-05-15 14:57:45 +00:00
check.equals(layer.length, 2);
check.instance(layer.list[0], Phaser.GameObjects.Particles.ParticleEmitterManager, "first child is an emitter");
let child = layer.list[1];
if (check.instance(child, UIImage, "second child is an image")) {
2018-05-15 14:57:45 +00:00
check.nears(child.rotation, -2.677945044588987, 10);
check.equals(child.x, 20, "x");
check.equals(child.y, 15, "y");
}
});
2017-10-26 21:47:13 +00:00
test.case("displays gatling gun effect", check => {
2017-10-09 21:13:56 +00:00
let battleview = testgame.view;
2017-07-23 17:31:46 +00:00
battleview.timer = new Timer();
let ship = battleview.battle.fleets[0].ships[0];
let effect = new WeaponEffect(battleview.arena, new Ship(), Target.newFromShip(ship), new TriggerAction("weapon"));
effect.bulletsExecutor(1);
2017-10-03 20:56:25 +00:00
let layer = battleview.arena.layer_weapon_effects;
2018-05-15 14:57:45 +00:00
check.equals(layer.length, 1);
check.instance(layer.list[0], Phaser.GameObjects.Particles.ParticleEmitterManager, "first child is an emitter");
2017-10-03 20:56:25 +00:00
});
test.acase("displays shield and hull effect on impacted ships", async check => {
2017-10-09 21:13:56 +00:00
let battleview = testgame.view;
2017-10-03 20:56:25 +00:00
battleview.timer = new Timer();
let ship = battleview.battle.fleets[0].ships[0];
ship.setArenaPosition(50, 30);
2018-03-21 23:52:13 +00:00
let weapon = new TriggerAction("weapon", { effects: [new DamageEffect(1)], range: 500 });
check.patch(weapon, "getImpactedShips", () => [ship]);
2017-10-29 21:08:55 +00:00
let dest = new Ship();
let effect = new WeaponEffect(battleview.arena, dest, Target.newFromShip(dest), weapon);
check.patch(effect, "getEffectForWeapon", () => {
return {
execution: () => Promise.resolve(),
delay: () => 0
};
});
2017-10-29 21:08:55 +00:00
let mock_shield_impact = check.patch(effect, "shieldImpactEffect", null);
let mock_hull_impact = check.patch(effect, "hullImpactEffect", null);
ship.setValue("shield", 0);
await effect.start(1);
2017-10-29 21:08:55 +00:00
check.called(mock_shield_impact, 0);
check.called(mock_hull_impact, [
[Target.newFromShip(dest), ship.location, 1]
2017-10-29 21:08:55 +00:00
]);
ship.setValue("shield", 10);
await effect.start(2);
2017-10-29 21:08:55 +00:00
check.called(mock_shield_impact, [
[Target.newFromShip(dest), ship.location, 2, false]
2017-10-29 21:08:55 +00:00
]);
check.called(mock_hull_impact, 0);
});
2017-07-23 17:31:46 +00:00
2017-10-26 21:47:13 +00:00
test.case("removes particle emitters when done", check => {
2017-10-09 21:13:56 +00:00
let battleview = testgame.view;
2017-07-23 17:31:46 +00:00
battleview.timer = new Timer();
let effect = new WeaponEffect(battleview.arena, new Ship(), Target.newFromLocation(50, 50), new TriggerAction("weapon"));
2017-07-23 17:31:46 +00:00
effect.bulletsExecutor(1);
2017-10-03 20:56:25 +00:00
checkEmitters("gun effect started", 1);
testgame.clockForward(6000);
2017-07-23 17:31:46 +00:00
checkEmitters("gun effect ended", 0);
effect.hullImpactEffect({ x: 0, y: 0 }, { x: 50, y: 50 }, 1);
2017-07-23 17:31:46 +00:00
checkEmitters("hull effect started", 1);
testgame.clockForward(8500);
2017-07-23 17:31:46 +00:00
checkEmitters("hull effect ended", 0);
});
2017-10-03 20:56:25 +00:00
2017-10-26 21:47:13 +00:00
test.case("adds a laser effect", check => {
2017-10-09 21:13:56 +00:00
let battleview = testgame.view;
2017-10-03 20:56:25 +00:00
battleview.timer = new Timer();
let effect = new WeaponEffect(battleview.arena, new Ship(), Target.newFromLocation(31, 49), new TriggerAction("weapon"));
effect.source = { x: 20, y: 30 };
effect.action.angle = 90;
effect.action.range = 300;
effect.laserExecutor(5);
2017-10-03 20:56:25 +00:00
let layer = battleview.arena.layer_weapon_effects;
2018-05-15 14:57:45 +00:00
check.equals(layer.length, 1);
let image = layer.list[0];
if (check.instance(image, UIImage, "first child is an image")) {
check.equals(image.name, "battle-effects-laser");
//check.equals(image.width, 300);
check.equals(image.x, 20);
check.equals(image.y, 30);
check.nears(image.rotation, 0.2606023917473408);
2018-05-15 14:57:45 +00:00
checkTween(testgame, image, "rotation", [
0.2606023917473408,
1.8313987185422373,
]);
}
2017-10-03 20:56:25 +00:00
});
});
}