46 lines
1.4 KiB
TypeScript
46 lines
1.4 KiB
TypeScript
|
module TS.SpaceTac {
|
||
|
/**
|
||
|
* 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 an escort mission
|
||
|
*/
|
||
|
generateEscort(): Mission {
|
||
|
let mission = new Mission(this.universe);
|
||
|
let ship = new Ship();
|
||
|
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;
|
||
|
}
|
||
|
}
|
||
|
}
|