fix ai bug
This was SVN commit r14737.
This commit is contained in:
parent
563768363b
commit
05f13bb1d8
@ -833,11 +833,10 @@ m.BaseManager.prototype.gatherersByType = function(gameState, type) {
|
||||
|
||||
// returns an entity collection of workers.
|
||||
// They are idled immediatly and their subrole set to idle.
|
||||
m.BaseManager.prototype.pickBuilders = function(gameState, number) {
|
||||
var collec = new API3.EntityCollection(gameState.sharedScript);
|
||||
m.BaseManager.prototype.pickBuilders = function(gameState, workers, number) {
|
||||
// TODO: choose better.
|
||||
var workers = this.workers.filter(API3.Filters.not(API3.Filters.byClass("Cavalry"))).toEntityArray();
|
||||
workers.sort(function (a,b) {
|
||||
var availableWorkers = this.workers.filter(API3.Filters.not(API3.Filters.byClass("Cavalry"))).toEntityArray();
|
||||
availableWorkers.sort(function (a,b) {
|
||||
var vala = 0, valb = 0;
|
||||
if (a.getMetadata(PlayerID,"subrole") == "builder")
|
||||
vala = 100;
|
||||
@ -847,16 +846,17 @@ m.BaseManager.prototype.pickBuilders = function(gameState, number) {
|
||||
vala = -100;
|
||||
if (b.getMetadata(PlayerID,"plan") != undefined)
|
||||
valb = -100;
|
||||
return a < b
|
||||
return vala < valb
|
||||
});
|
||||
for (var i = 0; i < number; ++i)
|
||||
var needed = Math.min(number, availableWorkers.length);
|
||||
for (var i = 0; i < needed; ++i)
|
||||
{
|
||||
workers[i].stopMoving();
|
||||
workers[i].setMetadata(PlayerID, "subrole","idle");
|
||||
collec.addEnt(workers[i]);
|
||||
availableWorkers[i].stopMoving();
|
||||
availableWorkers[i].setMetadata(PlayerID, "subrole", "idle");
|
||||
workers.addEnt(availableWorkers[i]);
|
||||
}
|
||||
return collec;
|
||||
}
|
||||
return;
|
||||
};
|
||||
|
||||
m.BaseManager.prototype.assignToFoundations = function(gameState, noRepair) {
|
||||
// If we have some foundations, and we don't have enough builder-workers,
|
||||
|
@ -191,7 +191,6 @@ m.HQ.prototype.checkEvents = function (gameState, events, queues) {
|
||||
this.baseManagers[bID].initTerritory(this, gameState);
|
||||
|
||||
// Let's get a few units out there to build this.
|
||||
// TODO: select the best base, or use multiple bases.
|
||||
var builders = this.bulkPickWorkers(gameState, bID, 10);
|
||||
if (builders !== false)
|
||||
{
|
||||
@ -421,7 +420,6 @@ m.HQ.prototype.switchWorkerBase = function(gameState, worker, type) {
|
||||
|
||||
// returns an entity collection of workers through BaseManager.pickBuilders
|
||||
// TODO: better the choice algo.
|
||||
// TODO: also can't get over multiple bases right now.
|
||||
m.HQ.prototype.bulkPickWorkers = function(gameState, newBaseID, number) {
|
||||
var accessIndex = this.baseManagers[newBaseID].accessIndex;
|
||||
if (!accessIndex)
|
||||
@ -434,15 +432,21 @@ m.HQ.prototype.bulkPickWorkers = function(gameState, newBaseID, number) {
|
||||
return 1;
|
||||
return 0;
|
||||
});
|
||||
|
||||
var needed = number;
|
||||
var workers = new API3.EntityCollection(gameState.sharedScript);
|
||||
for (var i in baseBest)
|
||||
{
|
||||
if (baseBest[i].workers.length > number)
|
||||
{
|
||||
return baseBest[i].pickBuilders(gameState,number);
|
||||
}
|
||||
baseBest[i].pickBuilders(gameState, workers, needed);
|
||||
if (workers.length < number)
|
||||
needed = number - workers.length;
|
||||
else
|
||||
break;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
if (workers.length == 0)
|
||||
return false;
|
||||
return workers;
|
||||
};
|
||||
|
||||
// returns the current gather rate
|
||||
// This is not per-se exact, it performs a few adjustments ad-hoc to account for travel distance, stuffs like that.
|
||||
|
Loading…
Reference in New Issue
Block a user