2013-09-29 15:32:52 +02:00
|
|
|
var TrainingPlan = function(gameState, type, metadata, number, startTime, expectedTime, maxMerge) {
|
2013-08-17 15:59:53 +02:00
|
|
|
this.type = gameState.applyCiv(type);
|
|
|
|
this.metadata = metadata;
|
|
|
|
|
2013-09-29 15:32:52 +02:00
|
|
|
this.ID = uniqueIDBOPlans++;
|
|
|
|
|
2013-08-17 15:59:53 +02:00
|
|
|
this.template = gameState.getTemplate(this.type);
|
2013-09-29 15:32:52 +02:00
|
|
|
if (!this.template)
|
|
|
|
return false;
|
|
|
|
|
|
|
|
this.category = "unit";
|
2013-08-17 15:59:53 +02:00
|
|
|
this.cost = new Resources(this.template.cost(), this.template._template.Cost.Population);
|
2013-09-29 15:32:52 +02:00
|
|
|
if (!number)
|
2013-08-17 15:59:53 +02:00
|
|
|
this.number = 1;
|
2013-09-29 15:32:52 +02:00
|
|
|
else
|
2013-08-17 15:59:53 +02:00
|
|
|
this.number = number;
|
2013-09-29 15:32:52 +02:00
|
|
|
|
2013-08-17 15:59:53 +02:00
|
|
|
if (!maxMerge)
|
|
|
|
this.maxMerge = 5;
|
|
|
|
else
|
|
|
|
this.maxMerge = maxMerge;
|
2013-09-29 15:32:52 +02:00
|
|
|
|
|
|
|
if (!startTime)
|
|
|
|
this.startTime = 0;
|
|
|
|
else
|
|
|
|
this.startTime = startTime;
|
|
|
|
|
|
|
|
if (!expectedTime)
|
|
|
|
this.expectedTime = -1;
|
|
|
|
else
|
|
|
|
this.expectedTime = expectedTime;
|
|
|
|
return true;
|
2013-08-17 15:59:53 +02:00
|
|
|
};
|
|
|
|
|
2013-09-29 15:32:52 +02:00
|
|
|
// return true if we willstart amassing resource for this plan
|
|
|
|
TrainingPlan.prototype.isGo = function(gameState) {
|
|
|
|
return (gameState.getTimeElapsed() > this.startTime);
|
|
|
|
};
|
|
|
|
|
|
|
|
TrainingPlan.prototype.canStart = function(gameState) {
|
2013-08-17 15:59:53 +02:00
|
|
|
if (this.invalidTemplate)
|
|
|
|
return false;
|
|
|
|
|
|
|
|
// TODO: we should probably check pop caps
|
|
|
|
|
|
|
|
var trainers = gameState.findTrainers(this.type);
|
|
|
|
|
|
|
|
return (trainers.length != 0);
|
|
|
|
};
|
|
|
|
|
2013-09-29 15:32:52 +02:00
|
|
|
TrainingPlan.prototype.start = function(gameState) {
|
|
|
|
//warn("Executing TrainingPlan " + uneval(this));
|
2013-08-17 15:59:53 +02:00
|
|
|
var self = this;
|
|
|
|
var trainers = gameState.findTrainers(this.type).toEntityArray();
|
|
|
|
|
|
|
|
// Prefer training buildings with short queues
|
|
|
|
// (TODO: this should also account for units added to the queue by
|
|
|
|
// plans that have already been executed this turn)
|
|
|
|
if (trainers.length > 0){
|
|
|
|
trainers.sort(function(a, b) {
|
|
|
|
var aa = a.trainingQueueTime();
|
|
|
|
var bb = b.trainingQueueTime();
|
|
|
|
if (a.hasClass("Civic") && !self.template.hasClass("Support"))
|
|
|
|
aa += 0.9;
|
|
|
|
if (b.hasClass("Civic") && !self.template.hasClass("Support"))
|
|
|
|
bb += 0.9;
|
|
|
|
return (aa - bb);
|
|
|
|
});
|
2013-09-29 15:32:52 +02:00
|
|
|
if (this.metadata && this.metadata.base !== undefined && this.metadata.base === 0)
|
|
|
|
this.metadata.base = trainers[0].getMetadata(PlayerID,"base");
|
2013-08-17 15:59:53 +02:00
|
|
|
trainers[0].train(this.type, this.number, this.metadata);
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2013-09-29 15:32:52 +02:00
|
|
|
TrainingPlan.prototype.getCost = function(){
|
2013-08-17 15:59:53 +02:00
|
|
|
var multCost = new Resources();
|
|
|
|
multCost.add(this.cost);
|
|
|
|
multCost.multiply(this.number);
|
|
|
|
return multCost;
|
|
|
|
};
|
|
|
|
|
2013-09-29 15:32:52 +02:00
|
|
|
TrainingPlan.prototype.addItem = function(amount){
|
2013-08-17 15:59:53 +02:00
|
|
|
if (amount === undefined)
|
|
|
|
amount = 1;
|
|
|
|
this.number += amount;
|
2013-09-29 15:32:52 +02:00
|
|
|
};
|