From 3f7ea110594f7376cf229a6ead352de634ddffce Mon Sep 17 00:00:00 2001 From: elexis Date: Wed, 7 Mar 2018 12:36:45 +0000 Subject: [PATCH] TriggerHelper SetUnitStance helper function for a very frequent triggerscript order. This was SVN commit r21458. --- .../public/maps/random/danubius_triggers.js | 6 ++---- .../public/maps/random/elephantine_triggers.js | 2 +- .../mods/public/maps/scripts/TriggerHelper.js | 17 ++++++++++++++--- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/binaries/data/mods/public/maps/random/danubius_triggers.js b/binaries/data/mods/public/maps/random/danubius_triggers.js index ba5e0a0ea6..89c088ffe1 100644 --- a/binaries/data/mods/public/maps/random/danubius_triggers.js +++ b/binaries/data/mods/public/maps/random/danubius_triggers.js @@ -224,7 +224,7 @@ Trigger.prototype.SpawnInitialCCDefenders = function(gaiaEnts) for (let ccDefender of ccDefenders) for (let ent of TriggerHelper.SpawnUnits(gaiaEnt, pickRandom(ccDefender.templates), ccDefender.count, gaulPlayer)) - Engine.QueryInterface(ent, IID_UnitAI).SwitchToStance("defensive"); + TriggerHelper.SetUnitStance(ent, "defensive"); } }; @@ -281,9 +281,7 @@ Trigger.prototype.StartCelticRitual = function(gaiaEnts) if (randBool(ritualProbability)) this.ritualEnts.add(ent); - let cmpUnitAI = Engine.QueryInterface(ent, IID_UnitAI); - if (cmpUnitAI) - cmpUnitAI.SwitchToStance("defensive"); + TriggerHelper.SetUnitStance(ent, "defensive"); } this.DoRepeatedly(5 * 1000, "UpdateCelticRitual", {}); diff --git a/binaries/data/mods/public/maps/random/elephantine_triggers.js b/binaries/data/mods/public/maps/random/elephantine_triggers.js index c936c16473..5da0af15f1 100644 --- a/binaries/data/mods/public/maps/random/elephantine_triggers.js +++ b/binaries/data/mods/public/maps/random/elephantine_triggers.js @@ -10,7 +10,7 @@ Trigger.prototype.InitElephantine_DefenderStance = function() { let cmpIdentity = Engine.QueryInterface(ent, IID_Identity); if (cmpIdentity && cmpIdentity.HasClass("Soldier")) - Engine.QueryInterface(ent, IID_UnitAI).SwitchToStance("defensive"); + TriggerHelper.SetUnitStance(ent, "defensive"); } }; diff --git a/binaries/data/mods/public/maps/scripts/TriggerHelper.js b/binaries/data/mods/public/maps/scripts/TriggerHelper.js index be38486bd6..dbaf6ee128 100644 --- a/binaries/data/mods/public/maps/scripts/TriggerHelper.js +++ b/binaries/data/mods/public/maps/scripts/TriggerHelper.js @@ -21,6 +21,13 @@ TriggerHelper.GetOwner = function(ent) return -1; }; +TriggerHelper.SetUnitStance = function(ent, stance) +{ + let cmpUnitAI = Engine.QueryInterface(ent, IID_UnitAI); + if (cmpUnitAI) + cmpUnitAI.SwitchToStance(stance); +}; + /** * Can be used to "force" a building/unit to spawn a group of entities. * @@ -91,8 +98,8 @@ TriggerHelper.SpawnUnits = function(source, template, count, owner) TriggerHelper.SpawnGarrisonedUnits = function(entity, template, count, owner) { let entities = []; - let cmpGarrisonHolder = Engine.QueryInterface(entity, IID_GarrisonHolder); + let cmpGarrisonHolder = Engine.QueryInterface(entity, IID_GarrisonHolder); if (!cmpGarrisonHolder) { error("tried to create garrisoned entities inside a non-garrisonholder"); @@ -105,13 +112,17 @@ TriggerHelper.SpawnGarrisonedUnits = function(entity, template, count, owner) for (let i = 0; i < count; ++i) { let ent = Engine.AddEntity(template); + let cmpOwnership = Engine.QueryInterface(ent, IID_Ownership); if (cmpOwnership) cmpOwnership.SetOwner(owner); + if (cmpGarrisonHolder.PerformGarrison(ent)) { - if (Engine.QueryInterface(ent, IID_UnitAI)) - Engine.QueryInterface(ent, IID_UnitAI).Autogarrison(entity); + let cmpUnitAI = Engine.QueryInterface(ent, IID_UnitAI); + if (cmpUnitAI) + cmpUnitAI.Autogarrison(entity); + entities.push(ent); } else