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"); +