petra: do not anymore assume that workers are necessarily builders and gatherers

This was SVN commit r17821.
This commit is contained in:
mimo 2016-03-02 16:58:02 +00:00
parent 8725c3ae7a
commit 8d0223d6aa
2 changed files with 6 additions and 9 deletions

View File

@ -745,14 +745,13 @@ m.Entity = m.Class({
return undefined;
},
isGarrisonHolder: function() { return this.get("GarrisonHolder"); },
isBuilder: function() { return this.get("Builder") !== undefined; },
isGatherer: function() { return this.get("ResourceGatherer") !== undefined; },
isGarrisonHolder: function() { return this.get("GarrisonHolder") !== undefined; },
garrisoned: function() { return this._entity.garrisoned; },
canGarrisonInside: function() { return this._entity.garrisoned.length < this.garrisonMax(); },
// TODO: visibility
move: function(x, z, queued = false) {
Engine.PostCommand(PlayerID,{"type": "walk", "entities": [this.id()], "x": x, "z": z, "queued": queued });
return this;

View File

@ -633,10 +633,10 @@ m.BaseManager.prototype.reassignIdleWorkers = function(gameState, idleWorkers)
if (ent.hasClass("Worker"))
{
// Just emergency repairing here. It is better managed in assignToFoundations
if (this.anchor && this.anchor.needsRepair() &&
if (ent.isBuilder() && this.anchor && this.anchor.needsRepair() &&
gameState.getOwnEntitiesByMetadata("target-foundation", this.anchor.id()).length < 2)
ent.repair(this.anchor);
else
else if (ent.isGatherer())
{
let mostNeeded = gameState.ai.HQ.pickMostNeededResources(gameState);
for (let needed of mostNeeded)
@ -674,14 +674,12 @@ m.BaseManager.prototype.gatherersByType = function(gameState, type)
m.BaseManager.prototype.pickBuilders = function(gameState, workers, number)
{
var availableWorkers = this.workers.filter(function (ent) {
if (!ent.position())
if (!ent.position() || !ent.isBuilder())
return false;
if (ent.getMetadata(PlayerID, "plan") == -2 || ent.getMetadata(PlayerID, "plan") == -3)
return false;
if (ent.getMetadata(PlayerID, "transport"))
return false;
if (ent.hasClass("Cavalry") || ent.hasClass("Ship"))
return false;
return true;
}).toEntityArray();
availableWorkers.sort(function (a,b) {