forked from mirrors/0ad
Use seperate message to handle skirmish replacements.
Meaning GarrisonHolders won't listen for GlobalEntityRenamed messages uselessly for the rest of the match after init. Refs. #6081 Differential revision: D3627 This was SVN commit r25029.
This commit is contained in:
@@ -461,14 +461,13 @@ GarrisonHolder.prototype.OnGlobalOwnershipChanged = function(msg)
|
||||
};
|
||||
|
||||
/**
|
||||
* Update list of garrisoned entities if one gets renamed (e.g. by promotion).
|
||||
* Update list of garrisoned entities when a game inits.
|
||||
*/
|
||||
GarrisonHolder.prototype.OnGlobalEntityRenamed = function(msg)
|
||||
GarrisonHolder.prototype.OnGlobalSkirmishReplacerReplaced = function(msg)
|
||||
{
|
||||
if (!this.initGarrison)
|
||||
return;
|
||||
|
||||
// Update the pre-game garrison because of SkirmishReplacement
|
||||
if (msg.entity == this.entity)
|
||||
{
|
||||
let cmpGarrisonHolder = Engine.QueryInterface(msg.newentity, IID_GarrisonHolder);
|
||||
|
||||
@@ -72,7 +72,9 @@ SkirmishReplacer.prototype.ReplaceEntities = function()
|
||||
var cmpReplacementOwnership = Engine.QueryInterface(replacement, IID_Ownership);
|
||||
cmpReplacementOwnership.SetOwner(cmpCurOwnership.GetOwner());
|
||||
|
||||
Engine.PostMessage(this.entity, MT_EntityRenamed, { "entity": this.entity, "newentity": replacement });
|
||||
let msg = { "entity": this.entity, "newentity": replacement };
|
||||
Engine.PostMessage(this.entity, MT_EntityRenamed, msg);
|
||||
Engine.PostMessage(this.entity, MT_SkirmishReplacerReplaced, msg);
|
||||
Engine.DestroyEntity(this.entity);
|
||||
};
|
||||
|
||||
|
||||
@@ -251,6 +251,28 @@ class TurretHolder
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Update list of turreted entities when a game inits.
|
||||
*/
|
||||
OnGlobalSkirmishReplacerReplaced(msg)
|
||||
{
|
||||
if (!this.initTurrets)
|
||||
return;
|
||||
|
||||
if (msg.entity == this.entity)
|
||||
{
|
||||
let cmpTurretHolder = Engine.QueryInterface(msg.newentity, IID_TurretHolder);
|
||||
if (cmpTurretHolder)
|
||||
cmpTurretHolder.initTurrets = this.initTurrets;
|
||||
}
|
||||
else
|
||||
{
|
||||
let entityIndex = this.initTurrets.indexOf(msg.entity);
|
||||
if (entityIndex != -1)
|
||||
this.initTurrets[entityIndex] = msg.newentity;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialise the turreted units.
|
||||
* Really ugly, but because GarrisonHolder is processed earlier, and also turrets
|
||||
|
||||
@@ -5,3 +5,9 @@ Engine.RegisterInterface("SkirmishReplacer");
|
||||
* sent from InitGame.
|
||||
*/
|
||||
Engine.RegisterMessageType("SkirmishReplace");
|
||||
|
||||
/**
|
||||
* Message of the form { "entity": {number}, "newentity": {number} }
|
||||
* sent from InitGame.
|
||||
*/
|
||||
Engine.RegisterMessageType("SkirmishReplacerReplaced");
|
||||
|
||||
Reference in New Issue
Block a user