1
0
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:
Freagarach
2021-03-08 07:01:17 +00:00
parent 637e44cfd7
commit c310d4afcd
4 changed files with 33 additions and 4 deletions
@@ -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");