diff --git a/binaries/data/mods/public/maps/scripts/TriggerHelper.js b/binaries/data/mods/public/maps/scripts/TriggerHelper.js index 6d452ca176..cb98bb9af6 100644 --- a/binaries/data/mods/public/maps/scripts/TriggerHelper.js +++ b/binaries/data/mods/public/maps/scripts/TriggerHelper.js @@ -151,8 +151,7 @@ TriggerHelper.DefeatPlayer = function(playerID, defeatReason) */ TriggerHelper.GetNumberOfPlayers = function() { - let cmpPlayerManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager); - return cmpPlayerManager.GetNumPlayers(); + return Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager).GetNumPlayers(); }; /** diff --git a/binaries/data/mods/public/maps/scripts/WonderVictory.js b/binaries/data/mods/public/maps/scripts/WonderVictory.js index 0d171b1268..ba01093be9 100644 --- a/binaries/data/mods/public/maps/scripts/WonderVictory.js +++ b/binaries/data/mods/public/maps/scripts/WonderVictory.js @@ -21,12 +21,9 @@ Trigger.prototype.CheckWonderVictory = function(data) if (data.to <= 0) return; - // Create new messages, and start timer to register defeat. - let cmpPlayerManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager); - let numPlayers = cmpPlayerManager.GetNumPlayers(); - // Add -1 to notify observers too let players = [-1]; + let numPlayers = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager).GetNumPlayers(); for (let i = 1; i < numPlayers; ++i) { let cmpPlayer = QueryPlayerIDInterface(i); diff --git a/binaries/data/mods/public/simulation/components/Capturable.js b/binaries/data/mods/public/simulation/components/Capturable.js index c81be89433..9f34193027 100644 --- a/binaries/data/mods/public/simulation/components/Capturable.js +++ b/binaries/data/mods/public/simulation/components/Capturable.js @@ -296,8 +296,8 @@ Capturable.prototype.OnOwnershipChanged = function(msg) else { // initialise the capture points when created - var cmpPlayerManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager); - for (let i = 0; i < cmpPlayerManager.GetNumPlayers(); ++i) + let numPlayers = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager).GetNumPlayers(); + for (let i = 0; i < numPlayers; ++i) if (i == msg.to) this.cp[i] = this.maxCp; else diff --git a/binaries/data/mods/public/simulation/components/EndGameManager.js b/binaries/data/mods/public/simulation/components/EndGameManager.js index ecc230475f..8078193e80 100644 --- a/binaries/data/mods/public/simulation/components/EndGameManager.js +++ b/binaries/data/mods/public/simulation/components/EndGameManager.js @@ -126,15 +126,12 @@ EndGameManager.prototype.AlliedVictoryCheck = function() return; let cmpGuiInterface = Engine.QueryInterface(SYSTEM_ENTITY, IID_GuiInterface); - let cmpPlayerManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager); - if (!cmpGuiInterface || !cmpPlayerManager) - return; - cmpGuiInterface.DeleteTimeNotification(this.lastManStandingMessage); // Proceed if only allies are remaining let allies = []; - for (let playerID = 1; playerID < cmpPlayerManager.GetNumPlayers(); ++playerID) + let numPlayers = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager).GetNumPlayers(); + for (let playerID = 1; playerID < numPlayers; ++playerID) { let cmpPlayer = QueryPlayerIDInterface(playerID); if (cmpPlayer.GetState() != "active") diff --git a/binaries/data/mods/public/simulation/components/GuiInterface.js b/binaries/data/mods/public/simulation/components/GuiInterface.js index d904bc7fbb..b7a35c15d1 100644 --- a/binaries/data/mods/public/simulation/components/GuiInterface.js +++ b/binaries/data/mods/public/simulation/components/GuiInterface.js @@ -55,18 +55,15 @@ GuiInterface.prototype.GetSimulationState = function() "players": [] }; - let cmpPlayerManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager); - let numPlayers = cmpPlayerManager.GetNumPlayers(); - + let numPlayers = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager).GetNumPlayers(); for (let i = 0; i < numPlayers; ++i) { - let playerEnt = cmpPlayerManager.GetPlayerByID(i); - let cmpPlayerEntityLimits = Engine.QueryInterface(playerEnt, IID_EntityLimits); - let cmpPlayer = Engine.QueryInterface(playerEnt, IID_Player); + let cmpPlayer = QueryPlayerIDInterface(i); + let cmpPlayerEntityLimits = QueryPlayerIDInterface(i, IID_EntityLimits); // Work out what phase we are in let phase = ""; - let cmpTechnologyManager = Engine.QueryInterface(playerEnt, IID_TechnologyManager); + let cmpTechnologyManager = QueryPlayerIDInterface(i, IID_TechnologyManager); if (cmpTechnologyManager) { if (cmpTechnologyManager.IsTechnologyResearched("phase_city")) @@ -162,8 +159,7 @@ GuiInterface.prototype.GetSimulationState = function() // Add basic statistics to each player for (let i = 0; i < numPlayers; ++i) { - let playerEnt = cmpPlayerManager.GetPlayerByID(i); - let cmpPlayerStatisticsTracker = Engine.QueryInterface(playerEnt, IID_StatisticsTracker); + let cmpPlayerStatisticsTracker = QueryPlayerIDInterface(i, IID_StatisticsTracker); if (cmpPlayerStatisticsTracker) ret.players[i].statistics = cmpPlayerStatisticsTracker.GetBasicStatistics(); } @@ -183,12 +179,10 @@ GuiInterface.prototype.GetExtendedSimulationState = function() let ret = this.GetSimulationState(); // Add statistics to each player - let cmpPlayerManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager); - let n = cmpPlayerManager.GetNumPlayers(); - for (let i = 0; i < n; ++i) + let numPlayers = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager).GetNumPlayers(); + for (let i = 0; i < numPlayers; ++i) { - let playerEnt = cmpPlayerManager.GetPlayerByID(i); - let cmpPlayerStatisticsTracker = Engine.QueryInterface(playerEnt, IID_StatisticsTracker); + let cmpPlayerStatisticsTracker = QueryPlayerIDInterface(i, IID_StatisticsTracker); if (cmpPlayerStatisticsTracker) ret.players[i].sequences = cmpPlayerStatisticsTracker.GetSequences(); } diff --git a/binaries/data/mods/public/simulation/components/Player.js b/binaries/data/mods/public/simulation/components/Player.js index 6f8907949a..f539fca219 100644 --- a/binaries/data/mods/public/simulation/components/Player.js +++ b/binaries/data/mods/public/simulation/components/Player.js @@ -476,9 +476,10 @@ Player.prototype.SetTeam = function(team) this.team = team; // Set all team members as allies - let cmpPlayerManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager); - if (cmpPlayerManager && this.team != -1) - for (let i = 0; i < cmpPlayerManager.GetNumPlayers(); ++i) + if (this.team != -1) + { + let numPlayers = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager).GetNumPlayers(); + for (let i = 0; i < numPlayers; ++i) { let cmpPlayer = QueryPlayerIDInterface(i); if (this.team != cmpPlayer.GetTeam()) @@ -487,6 +488,7 @@ Player.prototype.SetTeam = function(team) this.SetAlly(i); cmpPlayer.SetAlly(this.playerID); } + } Engine.BroadcastMessage(MT_DiplomacyChanged, { "player": this.playerID, diff --git a/binaries/data/mods/public/simulation/components/ResourceSupply.js b/binaries/data/mods/public/simulation/components/ResourceSupply.js index ab4b820c1c..1db3ed5878 100644 --- a/binaries/data/mods/public/simulation/components/ResourceSupply.js +++ b/binaries/data/mods/public/simulation/components/ResourceSupply.js @@ -32,10 +32,10 @@ ResourceSupply.prototype.Init = function() // Current resource amount (non-negative) this.amount = this.GetMaxAmount(); - this.gatherers = []; // list of IDs for each players - let cmpPlayerManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager); // system component so that's safe. - let numPlayers = cmpPlayerManager.GetNumPlayers(); - for (let i = 0; i <= numPlayers; ++i) // use "<=" because we want Gaia too. + // List of IDs for each player + this.gatherers = []; + let numPlayers = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager).GetNumPlayers() + for (let i = 0; i < numPlayers; ++i) this.gatherers.push([]); this.infinite = !isFinite(+this.template.Amount); diff --git a/binaries/data/mods/public/simulation/components/StatisticsTracker.js b/binaries/data/mods/public/simulation/components/StatisticsTracker.js index b1b850a579..97b0f4ab94 100644 --- a/binaries/data/mods/public/simulation/components/StatisticsTracker.js +++ b/binaries/data/mods/public/simulation/components/StatisticsTracker.js @@ -482,9 +482,11 @@ StatisticsTracker.prototype.IncreaseFailedBribesCounter = function() StatisticsTracker.prototype.GetPercentMapExplored = function() { - var cmpRangeManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_RangeManager); - var cmpPlayer = Engine.QueryInterface(this.entity, IID_Player); - return cmpRangeManager.GetPercentMapExplored(cmpPlayer.GetPlayerID()); + let cmpPlayer = Engine.QueryInterface(this.entity, IID_Player); + if (!cmpPlayer) + return 0; + + return Engine.QueryInterface(SYSTEM_ENTITY, IID_RangeManager).GetPercentMapExplored(cmpPlayer.GetPlayerID()); }; /** @@ -493,20 +495,19 @@ StatisticsTracker.prototype.GetPercentMapExplored = function() */ StatisticsTracker.prototype.GetTeamPercentMapExplored = function() { - var cmpRangeManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_RangeManager); - - var cmpPlayerManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager); - var cmpPlayer = Engine.QueryInterface(this.entity, IID_Player); + let cmpPlayer = Engine.QueryInterface(this.entity, IID_Player); if (!cmpPlayer) return 0; - var team = cmpPlayer.GetTeam(); + let team = cmpPlayer.GetTeam(); + let cmpRangeManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_RangeManager); // If teams are not locked, this statistic won't be displayed, so don't bother computing if (team == -1 || !cmpPlayer.GetLockTeams()) return cmpRangeManager.GetPercentMapExplored(cmpPlayer.GetPlayerID()); - var teamPlayers = []; - for (var i = 1; i < cmpPlayerManager.GetNumPlayers(); ++i) + let teamPlayers = []; + let numPlayers = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager).GetNumPlayers(); + for (let i = 1; i < numPlayers; ++i) { let cmpOtherPlayer = QueryPlayerIDInterface(i); if (cmpOtherPlayer && cmpOtherPlayer.GetTeam() == team) @@ -518,28 +519,27 @@ StatisticsTracker.prototype.GetTeamPercentMapExplored = function() StatisticsTracker.prototype.GetPercentMapControlled = function() { - var cmpPlayer = Engine.QueryInterface(this.entity, IID_Player); - var cmpTerritoryManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_TerritoryManager); - if (!cmpPlayer || !cmpTerritoryManager) + let cmpPlayer = Engine.QueryInterface(this.entity, IID_Player); + if (!cmpPlayer) return 0; - return cmpTerritoryManager.GetTerritoryPercentage(cmpPlayer.GetPlayerID()); + return Engine.QueryInterface(SYSTEM_ENTITY, IID_TerritoryManager).GetTerritoryPercentage(cmpPlayer.GetPlayerID()); }; StatisticsTracker.prototype.GetTeamPercentMapControlled = function() { - var cmpPlayer = Engine.QueryInterface(this.entity, IID_Player); - var cmpPlayerManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager); - var cmpTerritoryManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_TerritoryManager); - if (!cmpPlayer || !cmpTerritoryManager) + let cmpPlayer = Engine.QueryInterface(this.entity, IID_Player); + if (!cmpPlayer) return 0; - var team = cmpPlayer.GetTeam(); + let team = cmpPlayer.GetTeam(); + let cmpTerritoryManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_TerritoryManager); if (team == -1 || !cmpPlayer.GetLockTeams()) return cmpTerritoryManager.GetTerritoryPercentage(cmpPlayer.GetPlayerID()); - var teamPercent = 0; - for (let i = 1; i < cmpPlayerManager.GetNumPlayers(); ++i) + let teamPercent = 0; + let numPlayers = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager).GetNumPlayers(); + for (let i = 1; i < numPlayers; ++i) { let cmpOtherPlayer = QueryPlayerIDInterface(i); if (cmpOtherPlayer && cmpOtherPlayer.GetTeam() == team) diff --git a/binaries/data/mods/public/simulation/components/tests/test_ResourceSupply.js b/binaries/data/mods/public/simulation/components/tests/test_ResourceSupply.js index 917d3c3e51..bcc2c8ad9f 100644 --- a/binaries/data/mods/public/simulation/components/tests/test_ResourceSupply.js +++ b/binaries/data/mods/public/simulation/components/tests/test_ResourceSupply.js @@ -17,7 +17,7 @@ Engine.LoadComponentScript("ResourceSupply.js"); const entity = 60; AddMock(SYSTEM_ENTITY, IID_PlayerManager, { - "GetNumPlayers": () => 2 + "GetNumPlayers": () => 3 }); AddMock(entity, IID_Fogging, { diff --git a/binaries/data/mods/public/simulation/helpers/Player.js b/binaries/data/mods/public/simulation/helpers/Player.js index b12b715429..27592a69f3 100644 --- a/binaries/data/mods/public/simulation/helpers/Player.js +++ b/binaries/data/mods/public/simulation/helpers/Player.js @@ -154,11 +154,8 @@ function LoadPlayerSettings(settings, newPlayers) // NOTE: We need to do the team locking here, as otherwise // SetTeam can't ally the players. if (settings.LockTeams) - for (var i = 0; i < numPlayers; ++i) - { - let cmpPlayer = QueryPlayerIDInterface(i); - cmpPlayer.SetLockTeams(true); - } + for (let i = 0; i < numPlayers; ++i) + QueryPlayerIDInterface(i).SetLockTeams(true); // Disable the AIIinterface when no AI players are present if (playerData && !playerData.some(v => v && !!v.AI))