Index: binaries/data/mods/public/simulation/components/BuildingAI.js =================================================================== --- binaries/data/mods/public/simulation/components/BuildingAI.js +++ binaries/data/mods/public/simulation/components/BuildingAI.js @@ -57,7 +57,6 @@ { this.targetUnits = []; this.SetupRangeQuery(); - this.SetupGaiaRangeQuery(); }; BuildingAI.prototype.OnDiplomacyChanged = function(msg) @@ -68,7 +67,6 @@ // Remove maybe now allied/neutral units this.targetUnits = []; this.SetupRangeQuery(); - this.SetupGaiaRangeQuery(); }; BuildingAI.prototype.OnDestroy = function() @@ -84,8 +82,6 @@ let cmpRangeManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_RangeManager); if (this.enemyUnitsQuery) cmpRangeManager.DestroyActiveQuery(this.enemyUnitsQuery); - if (this.gaiaUnitsQuery) - cmpRangeManager.DestroyActiveQuery(this.gaiaUnitsQuery); }; /** @@ -98,7 +94,6 @@ this.targetUnits = []; this.SetupRangeQuery(); - this.SetupGaiaRangeQuery(); }; /** @@ -122,12 +117,6 @@ return; var enemies = cmpPlayer.GetEnemies(); - if (enemies.length && enemies[0] == 0) - enemies.shift(); // remove gaia - - if (!enemies.length) - return; - var range = cmpAttack.GetRange(attackType); this.enemyUnitsQuery = cmpRangeManager.CreateActiveParabolicQuery( this.entity, range.min, range.max, range.elevationBonus, @@ -136,60 +125,29 @@ cmpRangeManager.EnableActiveQuery(this.enemyUnitsQuery); }; -// Set up a range query for Gaia units within LOS range which can be attacked. -// This should be called whenever our ownership changes. -BuildingAI.prototype.SetupGaiaRangeQuery = function() -{ - var cmpAttack = Engine.QueryInterface(this.entity, IID_Attack); - if (!cmpAttack) - return; - - var cmpRangeManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_RangeManager); - if (this.gaiaUnitsQuery) - { - cmpRangeManager.DestroyActiveQuery(this.gaiaUnitsQuery); - this.gaiaUnitsQuery = undefined; - } - - var cmpPlayer = QueryOwnerInterface(this.entity); - if (!cmpPlayer || !cmpPlayer.IsEnemy(0)) - return; - - var range = cmpAttack.GetRange(attackType); - - // This query is only interested in Gaia entities that can attack. - this.gaiaUnitsQuery = cmpRangeManager.CreateActiveParabolicQuery( - this.entity, range.min, range.max, range.elevationBonus, - [0], IID_Attack, cmpRangeManager.GetEntityFlagMask("normal")); - - cmpRangeManager.EnableActiveQuery(this.gaiaUnitsQuery); -}; - /** * Called when units enter or leave range */ BuildingAI.prototype.OnRangeUpdate = function(msg) { + if (msg.tag != this.enemyUnitsQuery) + return; var cmpAttack = Engine.QueryInterface(this.entity, IID_Attack); if (!cmpAttack) return; - // Target enemy units except non-dangerous animals - if (msg.tag == this.gaiaUnitsQuery) - { - msg.added = msg.added.filter(e => { - let cmpUnitAI = Engine.QueryInterface(e, IID_UnitAI); - return cmpUnitAI && (!cmpUnitAI.IsAnimal() || cmpUnitAI.IsDangerousAnimal()); - }); - } - else if (msg.tag != this.enemyUnitsQuery) - return; - // Add new targets for (let entity of msg.added) + { + // Target enemy units except non-dangerous animals + let cmpUnitAI = Engine.QueryInterface(entity, IID_UnitAI); + if (cmpUnitAI && cmpUnitAI.IsAnimal() && !cmpUnitAI.IsDangerousAnimal()) + continue; + if (cmpAttack.CanAttack(entity)) this.targetUnits.push(entity); + } // Remove targets outside of vision-range for (let entity of msg.removed)