50 lines
1.5 KiB
TypeScript
50 lines
1.5 KiB
TypeScript
module TK.SpaceTac {
|
|
/**
|
|
* Generator of random ship
|
|
*/
|
|
export class ShipGenerator {
|
|
// Random number generator used
|
|
random: RandomGenerator
|
|
|
|
constructor(random = RandomGenerator.global) {
|
|
this.random = random;
|
|
}
|
|
|
|
/**
|
|
* Generate a ship of a givel level.
|
|
*
|
|
* If *upgrade* is true, random levelling options will be chosen
|
|
*/
|
|
generate(level: number, model: ShipModel | null = null, upgrade = true): Ship {
|
|
if (!model) {
|
|
// Get a random model
|
|
model = ShipModel.getRandomModel(level, this.random);
|
|
}
|
|
|
|
let result = new Ship(null, null, model);
|
|
|
|
result.level.forceLevel(level);
|
|
if (upgrade) {
|
|
let iteration = 0;
|
|
while (iteration < 100) {
|
|
iteration += 1;
|
|
|
|
let points = result.getAvailableUpgradePoints();
|
|
let upgrades = model.getAvailableUpgrades(result.level.get()).filter(upgrade => {
|
|
return (upgrade.cost || 0) <= points && !result.level.hasUpgrade(upgrade);
|
|
});
|
|
|
|
if (upgrades.length > 0) {
|
|
let upgrade = this.random.choice(upgrades);
|
|
result.activateUpgrade(upgrade, true);
|
|
} else {
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
return result;
|
|
}
|
|
}
|
|
}
|