1
0
Fork 0
spacetac/src/core/missions/MissionGenerator.ts

71 lines
2 KiB
TypeScript

module TS.SpaceTac {
const POOL_SHIP_NAMES = [
"Zert",
"Ob'tec",
"Paayk",
"Fen_amr",
"TempZst",
"croNt",
"Appn",
"Vertix",
"Opan-vel",
"Yz-aol",
"Arkant",
"PNX",
]
/**
* Random generator of secondary missions that can be taken from
*/
export class MissionGenerator {
universe: Universe
level: number
around: StarLocation
random: RandomGenerator
constructor(universe: Universe, level: number, around: StarLocation, random = RandomGenerator.global) {
this.universe = universe;
this.level = level;
this.around = around;
this.random = random;
}
/**
* Generate a single mission
*/
generate(): Mission {
let generators = [
bound(this, "generateEscort")
];
let generator = this.random.choice(generators);
let result = generator();
// TODO Add reward
return result;
}
/**
* Generate a new ship
*/
private generateShip() {
let generator = new ShipGenerator(this.random);
let result = generator.generate(this.level, null, true);
result.name = `${this.random.choice(POOL_SHIP_NAMES)}-${this.random.randInt(10, 999)}`;
return result;
}
/**
* Generate an escort mission
*/
generateEscort(): Mission {
let mission = new Mission(this.universe);
let ship = this.generateShip();
let dest_star = minBy(this.around.star.getNeighbors(), star => Math.abs(star.level - this.level));
let destination = this.random.choice(dest_star.locations);
mission.addPart(new MissionPartEscort(mission, destination, ship));
mission.title = `Escort a ship to a level ${dest_star.level} system`;
return mission;
}
}
}