forked from 0ad/0ad
cache the affected players in order to remove the template bonuses given by auras from the right players before adding them again.
This was SVN commit r15298.
This commit is contained in:
parent
2d1f9c33dc
commit
55760f6413
@ -27,9 +27,13 @@ Auras.prototype.Init = function()
|
|||||||
this.templateName = cmpTemplateManager.GetCurrentTemplateName(this.entity);
|
this.templateName = cmpTemplateManager.GetCurrentTemplateName(this.entity);
|
||||||
var auraNames = this.GetAuraNames();
|
var auraNames = this.GetAuraNames();
|
||||||
this.auras = {};
|
this.auras = {};
|
||||||
|
this.affectedPlayers = {};
|
||||||
var cmpTechnologyTemplateManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_TechnologyTemplateManager);
|
var cmpTechnologyTemplateManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_TechnologyTemplateManager);
|
||||||
for each (var name in auraNames)
|
for each (var name in auraNames)
|
||||||
|
{
|
||||||
this.auras[name] = cmpTechnologyTemplateManager.GetAuraTemplate(name);
|
this.auras[name] = cmpTechnologyTemplateManager.GetAuraTemplate(name);
|
||||||
|
this.affectedPlayers[name] = []; // will be calculated on ownership change
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
Auras.prototype.GetAuraNames = function()
|
Auras.prototype.GetAuraNames = function()
|
||||||
@ -57,18 +61,23 @@ Auras.prototype.GetModifications = function(name)
|
|||||||
};
|
};
|
||||||
|
|
||||||
Auras.prototype.GetAffectedPlayers = function(name)
|
Auras.prototype.GetAffectedPlayers = function(name)
|
||||||
|
{
|
||||||
|
return this.affectedPlayers[name];
|
||||||
|
};
|
||||||
|
|
||||||
|
Auras.prototype.CalculateAffectedPlayers = function(name)
|
||||||
{
|
{
|
||||||
if (this.auras[name].affectedPlayers)
|
if (this.auras[name].affectedPlayers)
|
||||||
var affectedPlayers = this.auras[name].affectedPlayers;
|
var affectedPlayers = this.auras[name].affectedPlayers;
|
||||||
else
|
else
|
||||||
var affectedPlayers = ["Player"];
|
var affectedPlayers = ["Player"];
|
||||||
|
|
||||||
var ret = [];
|
this.affectedPlayers[name] = [];
|
||||||
|
|
||||||
var cmpPlayer = QueryOwnerInterface(this.entity, IID_Player);
|
var cmpPlayer = QueryOwnerInterface(this.entity, IID_Player);
|
||||||
|
|
||||||
if (!cmpPlayer)
|
if (!cmpPlayer)
|
||||||
return ret;
|
return;
|
||||||
|
|
||||||
var cmpPlayerManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager);
|
var cmpPlayerManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager);
|
||||||
var numPlayers = cmpPlayerManager.GetNumPlayers();
|
var numPlayers = cmpPlayerManager.GetNumPlayers();
|
||||||
@ -79,12 +88,11 @@ Auras.prototype.GetAffectedPlayers = function(name)
|
|||||||
{
|
{
|
||||||
if (p == "Player" ? cmpPlayer.GetPlayerID() == i : cmpPlayer["Is" + p](i))
|
if (p == "Player" ? cmpPlayer.GetPlayerID() == i : cmpPlayer["Is" + p](i))
|
||||||
{
|
{
|
||||||
ret.push(i);
|
this.affectedPlayers[name].push(i);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return ret;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
Auras.prototype.HasFormationAura = function()
|
Auras.prototype.HasFormationAura = function()
|
||||||
@ -158,6 +166,9 @@ Auras.prototype.Clean = function()
|
|||||||
|
|
||||||
for each (var name in auraNames)
|
for each (var name in auraNames)
|
||||||
{
|
{
|
||||||
|
// only calculate the affected players on re-applying the bonuses
|
||||||
|
// this makes sure the template bonuses are removed from the correct players
|
||||||
|
this.CalculateAffectedPlayers(name);
|
||||||
// initialise range query
|
// initialise range query
|
||||||
this[name] = {};
|
this[name] = {};
|
||||||
this[name].targetUnits = [];
|
this[name].targetUnits = [];
|
||||||
|
Loading…
Reference in New Issue
Block a user