forked from 0ad/0ad
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:
parent
02613bc142
commit
dfa66fbc12
@ -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();
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -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);
|
||||||
|
@ -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
|
||||||
|
@ -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")
|
||||||
|
@ -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();
|
||||||
}
|
}
|
||||||
|
@ -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,
|
||||||
|
@ -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);
|
||||||
|
@ -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)
|
||||||
|
@ -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, {
|
||||||
|
@ -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))
|
||||||
|
Loading…
Reference in New Issue
Block a user