93 lines
4.3 KiB
TypeScript
93 lines
4.3 KiB
TypeScript
module TK.SpaceTac.Specs {
|
|
testing("BattleOutcome", test => {
|
|
test.case("generates loot from defeated ships", check => {
|
|
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", istep(1));
|
|
looter.templates = [template];
|
|
check.patch(outcome, "getLootGenerator", () => looter);
|
|
|
|
outcome.createLoot(battle, random);
|
|
|
|
check.equals(outcome.loot.length, 3);
|
|
check.equals(outcome.loot[0].name, "0a");
|
|
check.equals(outcome.loot[1].name, "Nuclear Reactor");
|
|
check.equals(outcome.loot[1].level, 4);
|
|
check.same(outcome.loot[1].quality, EquipmentQuality.COMMON);
|
|
check.equals(outcome.loot[1].requirements, { "skill_photons": 7 });
|
|
check.equals(outcome.loot[2].name, "Nuclear Reactor");
|
|
check.equals(outcome.loot[2].level, 6);
|
|
check.same(outcome.loot[2].quality, EquipmentQuality.PREMIUM);
|
|
check.equals(outcome.loot[2].requirements, { "skill_photons": 9 });
|
|
});
|
|
|
|
test.case("grants experience", check => {
|
|
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);
|
|
check.equals(ship1a.level.getExperience(), 300);
|
|
check.equals(ship1b.level.getExperience(), 600);
|
|
check.equals(ship2a.level.getExperience(), 1500);
|
|
check.equals(ship2b.level.getExperience(), 2800);
|
|
|
|
// draw
|
|
let outcome = new BattleOutcome(null);
|
|
outcome.grantExperience([fleet1, fleet2]);
|
|
check.equals(ship1a.level.getExperience(), 345);
|
|
check.equals(ship1b.level.getExperience(), 645);
|
|
check.equals(ship2a.level.getExperience(), 1511);
|
|
check.equals(ship2b.level.getExperience(), 2811);
|
|
|
|
// win/lose
|
|
outcome = new BattleOutcome(fleet1);
|
|
outcome.grantExperience([fleet1, fleet2]);
|
|
check.equals(ship1a.level.getExperience(), 480);
|
|
check.equals(ship1b.level.getExperience(), 780);
|
|
check.equals(ship2a.level.getExperience(), 1518);
|
|
check.equals(ship2b.level.getExperience(), 2818);
|
|
});
|
|
});
|
|
}
|