Cleanup getNumPlayers() calls

Do not check for system components,
Do not inline in loops for performance
Use QueryPlayerIDInterface instead of querying the playerEnt

Patch By: temple
Differential Revision: https://code.wildfiregames.com/D1137
This was SVN commit r20652.
This commit is contained in:
bb 2017-12-13 20:41:41 +00:00
parent 02613bc142
commit dfa66fbc12
10 changed files with 47 additions and 61 deletions

View File

@ -151,8 +151,7 @@ TriggerHelper.DefeatPlayer = function(playerID, defeatReason)
*/ */
TriggerHelper.GetNumberOfPlayers = function() TriggerHelper.GetNumberOfPlayers = function()
{ {
let cmpPlayerManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager); return Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager).GetNumPlayers();
return cmpPlayerManager.GetNumPlayers();
}; };
/** /**

View File

@ -21,12 +21,9 @@ Trigger.prototype.CheckWonderVictory = function(data)
if (data.to <= 0) if (data.to <= 0)
return; 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 // Add -1 to notify observers too
let players = [-1]; let players = [-1];
let numPlayers = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager).GetNumPlayers();
for (let i = 1; i < numPlayers; ++i) for (let i = 1; i < numPlayers; ++i)
{ {
let cmpPlayer = QueryPlayerIDInterface(i); let cmpPlayer = QueryPlayerIDInterface(i);

View File

@ -296,8 +296,8 @@ Capturable.prototype.OnOwnershipChanged = function(msg)
else else
{ {
// initialise the capture points when created // initialise the capture points when created
var cmpPlayerManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager); let numPlayers = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager).GetNumPlayers();
for (let i = 0; i < cmpPlayerManager.GetNumPlayers(); ++i) for (let i = 0; i < numPlayers; ++i)
if (i == msg.to) if (i == msg.to)
this.cp[i] = this.maxCp; this.cp[i] = this.maxCp;
else else

View File

@ -126,15 +126,12 @@ EndGameManager.prototype.AlliedVictoryCheck = function()
return; return;
let cmpGuiInterface = Engine.QueryInterface(SYSTEM_ENTITY, IID_GuiInterface); let cmpGuiInterface = Engine.QueryInterface(SYSTEM_ENTITY, IID_GuiInterface);
let cmpPlayerManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager);
if (!cmpGuiInterface || !cmpPlayerManager)
return;
cmpGuiInterface.DeleteTimeNotification(this.lastManStandingMessage); cmpGuiInterface.DeleteTimeNotification(this.lastManStandingMessage);
// Proceed if only allies are remaining // Proceed if only allies are remaining
let allies = []; 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); let cmpPlayer = QueryPlayerIDInterface(playerID);
if (cmpPlayer.GetState() != "active") if (cmpPlayer.GetState() != "active")

View File

@ -55,18 +55,15 @@ GuiInterface.prototype.GetSimulationState = function()
"players": [] "players": []
}; };
let cmpPlayerManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager); let numPlayers = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager).GetNumPlayers();
let numPlayers = cmpPlayerManager.GetNumPlayers();
for (let i = 0; i < numPlayers; ++i) for (let i = 0; i < numPlayers; ++i)
{ {
let playerEnt = cmpPlayerManager.GetPlayerByID(i); let cmpPlayer = QueryPlayerIDInterface(i);
let cmpPlayerEntityLimits = Engine.QueryInterface(playerEnt, IID_EntityLimits); let cmpPlayerEntityLimits = QueryPlayerIDInterface(i, IID_EntityLimits);
let cmpPlayer = Engine.QueryInterface(playerEnt, IID_Player);
// Work out what phase we are in // Work out what phase we are in
let phase = ""; let phase = "";
let cmpTechnologyManager = Engine.QueryInterface(playerEnt, IID_TechnologyManager); let cmpTechnologyManager = QueryPlayerIDInterface(i, IID_TechnologyManager);
if (cmpTechnologyManager) if (cmpTechnologyManager)
{ {
if (cmpTechnologyManager.IsTechnologyResearched("phase_city")) if (cmpTechnologyManager.IsTechnologyResearched("phase_city"))
@ -162,8 +159,7 @@ GuiInterface.prototype.GetSimulationState = function()
// Add basic statistics to each player // Add basic statistics to each player
for (let i = 0; i < numPlayers; ++i) for (let i = 0; i < numPlayers; ++i)
{ {
let playerEnt = cmpPlayerManager.GetPlayerByID(i); let cmpPlayerStatisticsTracker = QueryPlayerIDInterface(i, IID_StatisticsTracker);
let cmpPlayerStatisticsTracker = Engine.QueryInterface(playerEnt, IID_StatisticsTracker);
if (cmpPlayerStatisticsTracker) if (cmpPlayerStatisticsTracker)
ret.players[i].statistics = cmpPlayerStatisticsTracker.GetBasicStatistics(); ret.players[i].statistics = cmpPlayerStatisticsTracker.GetBasicStatistics();
} }
@ -183,12 +179,10 @@ GuiInterface.prototype.GetExtendedSimulationState = function()
let ret = this.GetSimulationState(); let ret = this.GetSimulationState();
// Add statistics to each player // Add statistics to each player
let cmpPlayerManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager); let numPlayers = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager).GetNumPlayers();
let n = cmpPlayerManager.GetNumPlayers(); for (let i = 0; i < numPlayers; ++i)
for (let i = 0; i < n; ++i)
{ {
let playerEnt = cmpPlayerManager.GetPlayerByID(i); let cmpPlayerStatisticsTracker = QueryPlayerIDInterface(i, IID_StatisticsTracker);
let cmpPlayerStatisticsTracker = Engine.QueryInterface(playerEnt, IID_StatisticsTracker);
if (cmpPlayerStatisticsTracker) if (cmpPlayerStatisticsTracker)
ret.players[i].sequences = cmpPlayerStatisticsTracker.GetSequences(); ret.players[i].sequences = cmpPlayerStatisticsTracker.GetSequences();
} }

View File

@ -476,9 +476,10 @@ Player.prototype.SetTeam = function(team)
this.team = team; this.team = team;
// Set all team members as allies // Set all team members as allies
let cmpPlayerManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager); if (this.team != -1)
if (cmpPlayerManager && this.team != -1) {
for (let i = 0; i < cmpPlayerManager.GetNumPlayers(); ++i) let numPlayers = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager).GetNumPlayers();
for (let i = 0; i < numPlayers; ++i)
{ {
let cmpPlayer = QueryPlayerIDInterface(i); let cmpPlayer = QueryPlayerIDInterface(i);
if (this.team != cmpPlayer.GetTeam()) if (this.team != cmpPlayer.GetTeam())
@ -487,6 +488,7 @@ Player.prototype.SetTeam = function(team)
this.SetAlly(i); this.SetAlly(i);
cmpPlayer.SetAlly(this.playerID); cmpPlayer.SetAlly(this.playerID);
} }
}
Engine.BroadcastMessage(MT_DiplomacyChanged, { Engine.BroadcastMessage(MT_DiplomacyChanged, {
"player": this.playerID, "player": this.playerID,

View File

@ -32,10 +32,10 @@ ResourceSupply.prototype.Init = function()
// Current resource amount (non-negative) // Current resource amount (non-negative)
this.amount = this.GetMaxAmount(); this.amount = this.GetMaxAmount();
this.gatherers = []; // list of IDs for each players // List of IDs for each player
let cmpPlayerManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager); // system component so that's safe. this.gatherers = [];
let numPlayers = cmpPlayerManager.GetNumPlayers(); let numPlayers = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager).GetNumPlayers()
for (let i = 0; i <= numPlayers; ++i) // use "<=" because we want Gaia too. for (let i = 0; i < numPlayers; ++i)
this.gatherers.push([]); this.gatherers.push([]);
this.infinite = !isFinite(+this.template.Amount); this.infinite = !isFinite(+this.template.Amount);

View File

@ -482,9 +482,11 @@ StatisticsTracker.prototype.IncreaseFailedBribesCounter = function()
StatisticsTracker.prototype.GetPercentMapExplored = function() StatisticsTracker.prototype.GetPercentMapExplored = function()
{ {
var cmpRangeManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_RangeManager); let cmpPlayer = Engine.QueryInterface(this.entity, IID_Player);
var cmpPlayer = Engine.QueryInterface(this.entity, IID_Player); if (!cmpPlayer)
return cmpRangeManager.GetPercentMapExplored(cmpPlayer.GetPlayerID()); return 0;
return Engine.QueryInterface(SYSTEM_ENTITY, IID_RangeManager).GetPercentMapExplored(cmpPlayer.GetPlayerID());
}; };
/** /**
@ -493,20 +495,19 @@ StatisticsTracker.prototype.GetPercentMapExplored = function()
*/ */
StatisticsTracker.prototype.GetTeamPercentMapExplored = function() StatisticsTracker.prototype.GetTeamPercentMapExplored = function()
{ {
var cmpRangeManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_RangeManager); let cmpPlayer = Engine.QueryInterface(this.entity, IID_Player);
var cmpPlayerManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager);
var cmpPlayer = Engine.QueryInterface(this.entity, IID_Player);
if (!cmpPlayer) if (!cmpPlayer)
return 0; 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 teams are not locked, this statistic won't be displayed, so don't bother computing
if (team == -1 || !cmpPlayer.GetLockTeams()) if (team == -1 || !cmpPlayer.GetLockTeams())
return cmpRangeManager.GetPercentMapExplored(cmpPlayer.GetPlayerID()); return cmpRangeManager.GetPercentMapExplored(cmpPlayer.GetPlayerID());
var teamPlayers = []; let teamPlayers = [];
for (var i = 1; i < cmpPlayerManager.GetNumPlayers(); ++i) let numPlayers = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager).GetNumPlayers();
for (let i = 1; i < numPlayers; ++i)
{ {
let cmpOtherPlayer = QueryPlayerIDInterface(i); let cmpOtherPlayer = QueryPlayerIDInterface(i);
if (cmpOtherPlayer && cmpOtherPlayer.GetTeam() == team) if (cmpOtherPlayer && cmpOtherPlayer.GetTeam() == team)
@ -518,28 +519,27 @@ StatisticsTracker.prototype.GetTeamPercentMapExplored = function()
StatisticsTracker.prototype.GetPercentMapControlled = function() StatisticsTracker.prototype.GetPercentMapControlled = function()
{ {
var cmpPlayer = Engine.QueryInterface(this.entity, IID_Player); let cmpPlayer = Engine.QueryInterface(this.entity, IID_Player);
var cmpTerritoryManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_TerritoryManager); if (!cmpPlayer)
if (!cmpPlayer || !cmpTerritoryManager)
return 0; return 0;
return cmpTerritoryManager.GetTerritoryPercentage(cmpPlayer.GetPlayerID()); return Engine.QueryInterface(SYSTEM_ENTITY, IID_TerritoryManager).GetTerritoryPercentage(cmpPlayer.GetPlayerID());
}; };
StatisticsTracker.prototype.GetTeamPercentMapControlled = function() StatisticsTracker.prototype.GetTeamPercentMapControlled = function()
{ {
var cmpPlayer = Engine.QueryInterface(this.entity, IID_Player); let cmpPlayer = Engine.QueryInterface(this.entity, IID_Player);
var cmpPlayerManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager); if (!cmpPlayer)
var cmpTerritoryManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_TerritoryManager);
if (!cmpPlayer || !cmpTerritoryManager)
return 0; return 0;
var team = cmpPlayer.GetTeam(); let team = cmpPlayer.GetTeam();
let cmpTerritoryManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_TerritoryManager);
if (team == -1 || !cmpPlayer.GetLockTeams()) if (team == -1 || !cmpPlayer.GetLockTeams())
return cmpTerritoryManager.GetTerritoryPercentage(cmpPlayer.GetPlayerID()); return cmpTerritoryManager.GetTerritoryPercentage(cmpPlayer.GetPlayerID());
var teamPercent = 0; let teamPercent = 0;
for (let i = 1; i < cmpPlayerManager.GetNumPlayers(); ++i) let numPlayers = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager).GetNumPlayers();
for (let i = 1; i < numPlayers; ++i)
{ {
let cmpOtherPlayer = QueryPlayerIDInterface(i); let cmpOtherPlayer = QueryPlayerIDInterface(i);
if (cmpOtherPlayer && cmpOtherPlayer.GetTeam() == team) if (cmpOtherPlayer && cmpOtherPlayer.GetTeam() == team)

View File

@ -17,7 +17,7 @@ Engine.LoadComponentScript("ResourceSupply.js");
const entity = 60; const entity = 60;
AddMock(SYSTEM_ENTITY, IID_PlayerManager, { AddMock(SYSTEM_ENTITY, IID_PlayerManager, {
"GetNumPlayers": () => 2 "GetNumPlayers": () => 3
}); });
AddMock(entity, IID_Fogging, { AddMock(entity, IID_Fogging, {

View File

@ -154,11 +154,8 @@ function LoadPlayerSettings(settings, newPlayers)
// NOTE: We need to do the team locking here, as otherwise // NOTE: We need to do the team locking here, as otherwise
// SetTeam can't ally the players. // SetTeam can't ally the players.
if (settings.LockTeams) if (settings.LockTeams)
for (var i = 0; i < numPlayers; ++i) for (let i = 0; i < numPlayers; ++i)
{ QueryPlayerIDInterface(i).SetLockTeams(true);
let cmpPlayer = QueryPlayerIDInterface(i);
cmpPlayer.SetLockTeams(true);
}
// Disable the AIIinterface when no AI players are present // Disable the AIIinterface when no AI players are present
if (playerData && !playerData.some(v => v && !!v.AI)) if (playerData && !playerData.some(v => v && !!v.AI))