2017-09-24 22:23:22 +00:00
|
|
|
module TK.SpaceTac {
|
2017-05-10 21:29:20 +00:00
|
|
|
/**
|
|
|
|
* Generator of random ship
|
|
|
|
*/
|
2015-01-14 00:00:00 +00:00
|
|
|
export class ShipGenerator {
|
|
|
|
// Random number generator used
|
2018-02-08 15:16:03 +00:00
|
|
|
random: RandomGenerator
|
2015-01-14 00:00:00 +00:00
|
|
|
|
2017-03-09 17:11:00 +00:00
|
|
|
constructor(random = RandomGenerator.global) {
|
|
|
|
this.random = random;
|
2015-01-14 00:00:00 +00:00
|
|
|
}
|
|
|
|
|
2017-05-10 21:29:20 +00:00
|
|
|
/**
|
|
|
|
* Generate a ship of a givel level.
|
|
|
|
*
|
2018-02-08 15:16:03 +00:00
|
|
|
* If *upgrade* is true, random levelling options will be chosen
|
2017-05-10 21:29:20 +00:00
|
|
|
*/
|
2018-03-06 14:39:48 +00:00
|
|
|
generate(level: number, model: ShipModel | null = null, upgrade = true): Ship {
|
2015-05-05 19:49:33 +00:00
|
|
|
if (!model) {
|
|
|
|
// Get a random model
|
2018-03-06 14:39:48 +00:00
|
|
|
model = ShipModel.getRandomModel(level, this.random);
|
2015-05-05 19:49:33 +00:00
|
|
|
}
|
|
|
|
|
2018-02-08 15:16:03 +00:00
|
|
|
let result = new Ship(null, null, model);
|
2017-04-18 19:51:23 +00:00
|
|
|
|
2017-04-25 23:27:42 +00:00
|
|
|
result.level.forceLevel(level);
|
|
|
|
if (upgrade) {
|
2018-02-08 15:16:03 +00:00
|
|
|
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;
|
2017-03-09 19:11:19 +00:00
|
|
|
}
|
2017-03-09 17:11:00 +00:00
|
|
|
}
|
2018-02-08 15:16:03 +00:00
|
|
|
}
|
2015-01-14 00:00:00 +00:00
|
|
|
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|