1
0
Fork 0
spacetac/src/core/BattleOutcome.spec.ts

93 lines
4.3 KiB
TypeScript

module TS.SpaceTac.Specs {
describe("BattleOutcome", () => {
it("generates loot from defeated ships", () => {
var fleet1 = new Fleet();
fleet1.addShip(new Ship());
var fleet2 = new Fleet();
fleet2.addShip(new Ship());
fleet2.addShip(new Ship());
fleet2.addShip(new Ship());
fleet2.addShip(new Ship());
fleet2.ships[2].level.forceLevel(5);
fleet2.ships[3].level.forceLevel(5);
fleet2.ships[0].addSlot(SlotType.Weapon).attach(new Equipment(SlotType.Weapon, "0a"));
fleet2.ships[0].addSlot(SlotType.Weapon).attach(new Equipment(SlotType.Weapon, "0b"));
fleet2.ships[1].addSlot(SlotType.Weapon).attach(new Equipment(SlotType.Weapon, "1a"));
fleet2.ships[2].addSlot(SlotType.Weapon).attach(new Equipment(SlotType.Weapon, "2b"));
fleet2.ships[3].addSlot(SlotType.Weapon).attach(new Equipment(SlotType.Weapon, "3b"));
var battle = new Battle(fleet1, fleet2);
var outcome = new BattleOutcome(fleet1);
var random = new SkewedRandomGenerator([
0.6, // standard loot on first ship
0, // - take first equipment
0, // leave second ship alone
0.95, // lucky loot on third ship
0, // - lower end of level range (ship has 5, so range is 4-6)
0.5, // - common quality
0, // - take first generated equipment (there is only one anyway)
0.96, // lucky loot on fourth ship
0.999, // - higher end of level range
0.98 // - premium quality
]);
// Force lucky finds with one template
var looter = new LootGenerator(random, false);
var template = new LootTemplate(SlotType.Power, "Nuclear Reactor");
template.setSkillsRequirements({ "skill_photons": istep(4) });
template.addAttributeEffect("power_capacity", 1);
looter.templates = [template];
spyOn(outcome, "getLootGenerator").and.returnValue(looter);
outcome.createLoot(battle, random);
expect(outcome.loot.length).toBe(3);
expect(outcome.loot[0].name).toBe("0a");
expect(outcome.loot[1].name).toBe("Nuclear Reactor");
expect(outcome.loot[1].level).toBe(4);
expect(outcome.loot[1].quality).toBe(EquipmentQuality.COMMON);
expect(outcome.loot[1].requirements).toEqual({ "skill_photons": 7 });
expect(outcome.loot[2].name).toBe("Nuclear Reactor");
expect(outcome.loot[2].level).toBe(6);
expect(outcome.loot[2].quality).toBe(EquipmentQuality.PREMIUM);
expect(outcome.loot[2].requirements).toEqual({ "skill_photons": 9 });
});
it("grants experience", function () {
let fleet1 = new Fleet();
let ship1a = fleet1.addShip(new Ship());
ship1a.level.forceLevel(3);
let ship1b = fleet1.addShip(new Ship());
ship1b.level.forceLevel(4);
let fleet2 = new Fleet();
let ship2a = fleet2.addShip(new Ship());
ship2a.level.forceLevel(6);
let ship2b = fleet2.addShip(new Ship());
ship2b.level.forceLevel(8);
expect(ship1a.level.getExperience()).toEqual(300);
expect(ship1b.level.getExperience()).toEqual(600);
expect(ship2a.level.getExperience()).toEqual(1500);
expect(ship2b.level.getExperience()).toEqual(2800);
// draw
let outcome = new BattleOutcome(null);
outcome.grantExperience([fleet1, fleet2]);
expect(ship1a.level.getExperience()).toEqual(345);
expect(ship1b.level.getExperience()).toEqual(645);
expect(ship2a.level.getExperience()).toEqual(1511);
expect(ship2b.level.getExperience()).toEqual(2811);
// win/lose
outcome = new BattleOutcome(fleet1);
outcome.grantExperience([fleet1, fleet2]);
expect(ship1a.level.getExperience()).toEqual(480);
expect(ship1b.level.getExperience()).toEqual(780);
expect(ship2a.level.getExperience()).toEqual(1518);
expect(ship2b.level.getExperience()).toEqual(2818);
});
});
}