Index: binaries/data/mods/public/simulation/components/PlayerManager.js =================================================================== --- binaries/data/mods/public/simulation/components/PlayerManager.js +++ binaries/data/mods/public/simulation/components/PlayerManager.js @@ -25,6 +25,12 @@ newDiplo[id] = 1; cmpPlayer.SetDiplomacy(newDiplo); + Engine.BroadcastMessage(MT_PlayerChanged, { + "player": id, + "from": -1, + "to": ent + }); + return id; }; @@ -64,6 +70,12 @@ if (cmpOwnership) cmpOwnership.SetOwner(id); } + + Engine.BroadcastMessage(MT_PlayerChanged, { + "player": id, + "from": oldent, + "to": ent + }); }; /** @@ -126,8 +138,15 @@ PlayerManager.prototype.RemoveAllPlayers = function() { // Destroy existing player entities - for (var id of this.playerEntities) - Engine.DestroyEntity(id); + for (let player in this.playerEntities) + { + Engine.BroadcastMessage(MT_PlayerChanged, { + "player": player, + "from": this.playerEntities[player], + "to": -1 + }); + Engine.DestroyEntity(this.playerEntities[player]); + } this.playerEntities = []; }; @@ -138,6 +157,11 @@ return; var lastId = this.playerEntities.pop(); + Engine.BroadcastMessage(MT_PlayerChanged, { + "player": this.playerEntities.length + 1, + "from": lastId, + "to": -1 + }); Engine.DestroyEntity(lastId); }; Index: binaries/data/mods/public/simulation/components/interfaces/PlayerManager.js =================================================================== --- /dev/null +++ binaries/data/mods/public/simulation/components/interfaces/PlayerManager.js @@ -0,0 +1,6 @@ +/** + * Message of the form { player": number, "from": number, "to": number } + * sent from PlayerManager component to warn other components when a player changed entities. + * This is also sent when the player gets created or destroyed. + */ +Engine.RegisterMessageType("PlayerChanged");