1
0
forked from 0ad/0ad

Fix broken Autogarrison in 1638727c23

Patch by Stan

Reviewed By: mimo
Differential Revision: https://code.wildfiregames.com/D885
This was SVN commit r20137.
This commit is contained in:
mimo 2017-09-08 18:04:19 +00:00
parent 1cdc8f1356
commit 76a2cd43d0

View File

@ -596,45 +596,48 @@ ProductionQueue.prototype.SpawnUnits = function(templateName, count, metadata)
}
}
var cmpAutoGarrison = undefined;
let cmpAutoGarrison;
if (cmpRallyPoint)
{
var data = cmpRallyPoint.GetData()[0];
let data = cmpRallyPoint.GetData()[0];
if (data && data.target && data.target == this.entity && data.command == "garrison")
cmpAutoGarrison = Engine.QueryInterface(this.entity, IID_GarrisonHolder);
}
for (var i = 0; i < count; ++i)
for (let i = 0; i < count; ++i)
{
var ent = this.entityCache[0];
if (cmpAutoGarrison && cmpAutoGarrison.PerformGarrison(ent))
let ent = this.entityCache[0];
let cmpNewOwnership = Engine.QueryInterface(ent, IID_Ownership);
let garrisoned = false;
if (cmpAutoGarrison)
{
// Temporary owner affectation needed for GarrisonHolder checks
cmpNewOwnership.SetOwnerQuiet(cmpOwnership.GetOwner());
garrisoned = cmpAutoGarrison.PerformGarrison(ent);
cmpNewOwnership.SetOwnerQuiet(-1);
}
if (garrisoned)
{
let cmpNewOwnership = Engine.QueryInterface(ent, IID_Ownership);
cmpNewOwnership.SetOwner(cmpOwnership.GetOwner());
let cmpUnitAI = Engine.QueryInterface(ent, IID_UnitAI);
cmpUnitAI.Autogarrison(this.entity);
if (cmpUnitAI)
cmpUnitAI.Autogarrison(this.entity);
}
else
{
var pos = cmpFootprint.PickSpawnPoint(ent);
let pos = cmpFootprint.PickSpawnPoint(ent);
if (pos.y < 0)
{
// Fail: there wasn't any space to spawn the unit
break;
}
else
{
// Successfully spawned
let cmpNewOwnership = Engine.QueryInterface(ent, IID_Ownership);
cmpNewOwnership.SetOwner(cmpOwnership.GetOwner());
let cmpNewPosition = Engine.QueryInterface(ent, IID_Position);
cmpNewPosition.JumpTo(pos.x, pos.z);
// TODO: what direction should they face in?
spawnedEnts.push(ent);
}
let cmpNewPosition = Engine.QueryInterface(ent, IID_Position);
// TODO: what direction should they face in?
cmpNewPosition.JumpTo(pos.x, pos.z);
spawnedEnts.push(ent);
}
cmpNewOwnership.SetOwner(cmpOwnership.GetOwner());
var cmpPlayerStatisticsTracker = QueryOwnerInterface(this.entity, IID_StatisticsTracker);
cmpPlayerStatisticsTracker.IncreaseTrainedUnitsCounter(ent);