From cd9eeef1b74de629443f2d6abfcd1c79de164340 Mon Sep 17 00:00:00 2001 From: mimo Date: Wed, 11 Feb 2015 18:34:06 +0000 Subject: [PATCH] force garrisoned units as turrets to have stance standground, fixes #2905 This was SVN commit r16318. --- .../simulation/components/GarrisonHolder.js | 6 +++++ .../public/simulation/components/UnitAI.js | 25 +++++++++++++++++++ .../public/simulation/helpers/Commands.js | 2 +- 3 files changed, 32 insertions(+), 1 deletion(-) diff --git a/binaries/data/mods/public/simulation/components/GarrisonHolder.js b/binaries/data/mods/public/simulation/components/GarrisonHolder.js index 84eefd89c0..dc0809380c 100644 --- a/binaries/data/mods/public/simulation/components/GarrisonHolder.js +++ b/binaries/data/mods/public/simulation/components/GarrisonHolder.js @@ -242,6 +242,9 @@ GarrisonHolder.prototype.Garrison = function(entity) vgp.entity = entity; cmpPosition.SetTurretParent(this.entity, vgp.offset); visiblyGarrisoned = true; + var cmpUnitAI = Engine.QueryInterface(entity, IID_UnitAI); + if (cmpUnitAI) + cmpUnitAI.SetTurretStance(); break; } if (!visiblyGarrisoned) @@ -337,6 +340,9 @@ GarrisonHolder.prototype.Eject = function(entity, forced) if (vgp.entity != entity) continue; cmpNewPosition.SetTurretParent(INVALID_ENTITY, new Vector3D()); + var cmpUnitAI = Engine.QueryInterface(entity, IID_UnitAI); + if (cmpUnitAI) + cmpUnitAI.ResetTurretStance(); vgp.entity = null; break; } diff --git a/binaries/data/mods/public/simulation/components/UnitAI.js b/binaries/data/mods/public/simulation/components/UnitAI.js index f110476c74..99f39195e8 100644 --- a/binaries/data/mods/public/simulation/components/UnitAI.js +++ b/binaries/data/mods/public/simulation/components/UnitAI.js @@ -5284,6 +5284,29 @@ UnitAI.prototype.SwitchToStance = function(stance) this.SetupRangeQueries(); }; +UnitAI.prototype.SetTurretStance = function() +{ + this.previousStance = undefined; + if (this.GetStance().respondStandGround) + return; + for (let stance in g_Stances) + { + if (!g_Stances[stance].respondStandGround) + continue; + this.previousStance = this.GetStanceName(); + this.SwitchToStance(stance); + return; + } +}; + +UnitAI.prototype.ResetTurretStance = function() +{ + if (!this.previousStance) + return; + this.SwitchToStance(this.previousStance); + this.previousStance = undefined; +}; + /** * Resets losRangeQuery, and if there are some targets in range that we can * attack then we start attacking and this returns true; otherwise, returns false. @@ -5468,6 +5491,8 @@ UnitAI.prototype.GetStance = function() UnitAI.prototype.GetPossibleStances = function() { + if (this.IsTurret()) + return []; return Object.keys(g_Stances); }; diff --git a/binaries/data/mods/public/simulation/helpers/Commands.js b/binaries/data/mods/public/simulation/helpers/Commands.js index a11d6bef0b..aa06eebeed 100644 --- a/binaries/data/mods/public/simulation/helpers/Commands.js +++ b/binaries/data/mods/public/simulation/helpers/Commands.js @@ -548,7 +548,7 @@ var commands = { for each (var ent in data.entities) { var cmpUnitAI = Engine.QueryInterface(ent, IID_UnitAI); - if (cmpUnitAI) + if (cmpUnitAI && !cmpUnitAI.IsTurret()) cmpUnitAI.SwitchToStance(cmd.name); } },