From 5ae93ddae7a70c678dffcb5f9455d6f9416d3f81 Mon Sep 17 00:00:00 2001 From: quantumstate Date: Sun, 13 Nov 2011 23:23:58 +0000 Subject: [PATCH] Makes AIProxy keep the garrisoned units array up to date. Fixes #1019 This was SVN commit r10531. --- .../data/mods/public/simulation/components/AIProxy.js | 8 ++++++++ .../public/simulation/components/GarrisonHolder.js | 10 +++++++++- .../simulation/components/interfaces/GarrisonHolder.js | 5 +++++ 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/binaries/data/mods/public/simulation/components/AIProxy.js b/binaries/data/mods/public/simulation/components/AIProxy.js index 7fc2312f79..82cafdea76 100644 --- a/binaries/data/mods/public/simulation/components/AIProxy.js +++ b/binaries/data/mods/public/simulation/components/AIProxy.js @@ -113,6 +113,14 @@ AIProxy.prototype.OnTrainingQueueChanged = function(msg) this.changes.trainingQueue = cmpTrainingQueue.GetQueue(); } +AIProxy.prototype.OnGarrisonedUnitsChanged = function(msg) +{ + this.NotifyChange(); + + var cmpGarrisonHolder = Engine.QueryInterface(this.entity, IID_GarrisonHolder); + this.changes.garrisoned = cmpGarrisonHolder.GetEntities(); +} + // TODO: event handlers for all the other things AIProxy.prototype.GetFullRepresentation = function() diff --git a/binaries/data/mods/public/simulation/components/GarrisonHolder.js b/binaries/data/mods/public/simulation/components/GarrisonHolder.js index b128529a5a..9fdbc8c204 100644 --- a/binaries/data/mods/public/simulation/components/GarrisonHolder.js +++ b/binaries/data/mods/public/simulation/components/GarrisonHolder.js @@ -125,6 +125,7 @@ GarrisonHolder.prototype.Garrison = function(entity) this.spaceOccupied += 1; cmpPosition.MoveOutOfWorld(); this.UpdateGarrisonFlag(); + Engine.PostMessage(this.entity, MT_GarrisonedUnitsChanged, {}); return true; } return false; @@ -173,6 +174,8 @@ GarrisonHolder.prototype.Eject = function(entity, forced) cmpNewPosition.JumpTo(pos.x, pos.z); // TODO: what direction should they face in? + Engine.PostMessage(this.entity, MT_GarrisonedUnitsChanged, {}); + return true; }; @@ -271,7 +274,8 @@ GarrisonHolder.prototype.OnHealthChanged = function(msg) cmpHealth.Kill(); } } - this.entities = []; + this.entities = []; + Engine.PostMessage(this.entity, MT_GarrisonedUnitsChanged, {}); } else { // Building - force ejection @@ -360,6 +364,7 @@ GarrisonHolder.prototype.OnGlobalOwnershipChanged = function(msg) if (cmpHealth && cmpHealth.GetHitpoints() == 0) { this.entities.splice(entityIndex, 1); + Engine.PostMessage(this.entity, MT_GarrisonedUnitsChanged, {}); } else { @@ -375,6 +380,7 @@ GarrisonHolder.prototype.OnGlobalOwnershipChanged = function(msg) cmpHealth.Kill(); } this.entities.splice(entityIndex, 1); + Engine.PostMessage(this.entity, MT_GarrisonedUnitsChanged, {}); } else { // Building - force ejection @@ -393,7 +399,9 @@ GarrisonHolder.prototype.OnGlobalEntityRenamed = function(msg) if (entityIndex != -1) { this.entities[entityIndex] = msg.newentity; + Engine.PostMessage(this.entity, MT_GarrisonedUnitsChanged, {}); } }; Engine.RegisterComponentType(IID_GarrisonHolder, "GarrisonHolder", GarrisonHolder); + diff --git a/binaries/data/mods/public/simulation/components/interfaces/GarrisonHolder.js b/binaries/data/mods/public/simulation/components/interfaces/GarrisonHolder.js index 4d2a60a9cc..27c84354a6 100644 --- a/binaries/data/mods/public/simulation/components/interfaces/GarrisonHolder.js +++ b/binaries/data/mods/public/simulation/components/interfaces/GarrisonHolder.js @@ -1 +1,6 @@ Engine.RegisterInterface("GarrisonHolder"); + +// Message of the form { } (use GetEntities if you want the current details), +// sent to the current entity whenever the garrisoned units change. +Engine.RegisterMessageType("GarrisonedUnitsChanged"); +