forked from 0ad/0ad
Recursively count garrisoned units to avoid overcapacity
This was SVN commit r14074.
This commit is contained in:
parent
72e11a2dea
commit
6dca6910c3
@ -241,9 +241,9 @@ function getActionInfo(action, target)
|
||||
data.command = "garrison";
|
||||
data.target = target;
|
||||
cursor = "action-garrison";
|
||||
tooltip = "Current garrison: " + targetState.garrisonHolder.entities.length
|
||||
tooltip = "Current garrison: " + targetState.garrisonHolder.garrisonedEntitiesCount
|
||||
+ "/" + targetState.garrisonHolder.capacity;
|
||||
if (targetState.garrisonHolder.entities.length >= targetState.garrisonHolder.capacity)
|
||||
if (targetState.garrisonHolder.garrisonedEntitiesCount >= targetState.garrisonHolder.capacity)
|
||||
tooltip = "[color=\"orange\"]" + tooltip + "[/color]";
|
||||
}
|
||||
else if (targetState.resourceSupply)
|
||||
@ -328,9 +328,12 @@ function getActionInfo(action, target)
|
||||
case "garrison":
|
||||
if (hasClass(entState, "Unit") && targetState.garrisonHolder && (playerOwned || mutualAllyOwned))
|
||||
{
|
||||
var tooltip = "Current garrison: " + targetState.garrisonHolder.entities.length
|
||||
var tooltip = "Current garrison: " + targetState.garrisonHolder.garrisonedEntitiesCount
|
||||
+ "/" + targetState.garrisonHolder.capacity;
|
||||
if (targetState.garrisonHolder.entities.length >= targetState.garrisonHolder.capacity)
|
||||
var extraCount = 0;
|
||||
if (entState.garrisonHolder)
|
||||
extraCount += entState.garrisonHolder.garrisonedEntitiesCount;
|
||||
if (targetState.garrisonHolder.garrisonedEntitiesCount + extraCount >= targetState.garrisonHolder.capacity)
|
||||
tooltip = "[color=\"orange\"]" + tooltip + "[/color]";
|
||||
var allowedClasses = targetState.garrisonHolder.allowedClasses;
|
||||
for each (var unitClass in entState.identity.classes)
|
||||
|
@ -111,6 +111,22 @@ GarrisonHolder.prototype.IsGarrisoningAllowed = function()
|
||||
return true;
|
||||
};
|
||||
|
||||
/**
|
||||
* Return the number of recursively garrisoned units
|
||||
*/
|
||||
GarrisonHolder.prototype.GetGarrisonedEntitiesCount = function()
|
||||
{
|
||||
var count = 0;
|
||||
for each (var ent in this.entities)
|
||||
{
|
||||
count++
|
||||
var cmpGarrisonHolder = Engine.QueryInterface(ent, IID_GarrisonHolder)
|
||||
if (cmpGarrisonHolder)
|
||||
count += cmpGarrisonHolder.GetGarrisonedEntitiesCount();
|
||||
}
|
||||
return count;
|
||||
};
|
||||
|
||||
/**
|
||||
* Get number of garrisoned units capable of shooting arrows
|
||||
* Not necessarily archers
|
||||
@ -164,7 +180,12 @@ GarrisonHolder.prototype.Garrison = function(entity)
|
||||
if(!this.AllowedToGarrison(entity))
|
||||
return false;
|
||||
|
||||
if (this.entities.length >= this.GetCapacity())
|
||||
// check the capacity
|
||||
var extraCount = 0;
|
||||
var cmpGarrisonHolder = Engine.QueryInterface(entity, IID_GarrisonHolder);
|
||||
if (cmpGarrisonHolder)
|
||||
extraCount += cmpGarrisonHolder.GetGarrisonedEntitiesCount();
|
||||
if (this.GetGarrisonedEntitiesCount() + extraCount >= this.GetCapacity())
|
||||
return false;
|
||||
|
||||
var cmpPosition = Engine.QueryInterface(entity, IID_Position);
|
||||
|
@ -330,7 +330,8 @@ GuiInterface.prototype.GetEntityState = function(player, ent)
|
||||
ret.garrisonHolder = {
|
||||
"entities": cmpGarrisonHolder.GetEntities(),
|
||||
"allowedClasses": cmpGarrisonHolder.GetAllowedClassesList(),
|
||||
"capacity": cmpGarrisonHolder.GetCapacity()
|
||||
"capacity": cmpGarrisonHolder.GetCapacity(),
|
||||
"garrisonedEntitiesCount": cmpGarrisonHolder.GetGarrisonedEntitiesCount()
|
||||
};
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user