Changeset View
Changeset View
Standalone View
Standalone View
ps/trunk/binaries/data/mods/public/gui/summary/counters.js
var g_TeamHelperData = []; | var g_TeamHelperData = []; | ||||
function resetDataHelpers() | function resetDataHelpers() | ||||
{ | { | ||||
g_TeamHelperData = []; | g_TeamHelperData = []; | ||||
} | } | ||||
function formatTrained(trained, killed, lost) | function calculatePercent(divident, divisor) | ||||
{ | { | ||||
return g_TrainedColor + trained + '[/color] / ' + | return { "percent": divisor ? Math.floor(100 * divident / divisor) : 0 }; | ||||
g_KilledColor + killed + '[/color] / ' + | |||||
g_LostColor + lost + '[/color]'; | |||||
} | } | ||||
function formatCaptured(constructed, destroyed, captured, lost) | function calculateRatio(divident, divisor) | ||||
{ | { | ||||
return g_TrainedColor + constructed + '[/color] / ' + | return divident ? +((divident / divisor).toFixed(2)) : 0; | ||||
g_KilledColor + destroyed + '[/color]\n' + | |||||
g_CapturedColor + captured + '[/color] / ' + | |||||
g_LostColor + lost + '[/color]\n'; | |||||
} | } | ||||
function formatIncome(income, outcome) | function formatSummaryValue(values) | ||||
{ | { | ||||
return g_IncomeColor + income + '[/color] / ' + | if (typeof values != "object") | ||||
g_OutcomeColor + outcome + '[/color]'; | return values === Infinity ? g_InfinitySymbol : values; | ||||
} | |||||
function formatPercent(divident, divisor) | |||||
{ | |||||
if (!divisor) | |||||
return "0%"; | |||||
return Math.floor(100 * divident / divisor) + "%"; | |||||
} | |||||
function formatRatio(divident, divisor) | let ret = ""; | ||||
{ | for (let type in values) | ||||
if (!divident) | ret += (g_SummaryTypes[type].color ? | ||||
return "0.00"; | '[color="' + g_SummaryTypes[type].color + '"]' + values[type] + '[/color]' : | ||||
values[type]) + g_SummaryTypes[type].postfix; | |||||
if (!divisor) | return ret; | ||||
return g_InfiniteSymbol; | |||||
return Math.round(divident / divisor * 100) / 100; | |||||
} | } | ||||
/** | /** | ||||
* Remove color tags, whitespace, + and % to read numerical values from the GUI objects. | * Remove color tags, whitespace, + and % to read numerical values from the GUI objects. | ||||
* Remove \n only when removeLineFeed == true | * Remove \n only when removeLineFeed == true | ||||
* TODO: access the data directly instead of this ugly hack. | * TODO: access the data directly instead of this ugly hack. | ||||
*/ | */ | ||||
function cleanGUICaption(team, player, counter, removeLineFeed = true) | function cleanGUICaption(team, player, counter, removeLineFeed = true) | ||||
{ | { | ||||
let caption = Engine.GetGUIObjectByName("valueDataTeam[" + team + "][" + player + "][" + counter + "]").caption; | let caption = Engine.GetGUIObjectByName("valueDataTeam[" + team + "][" + player + "][" + counter + "]").caption; | ||||
if (removeLineFeed) | if (removeLineFeed) | ||||
return caption.replace(/\[([\w\' \\\"\/\=]*)\]|\+|\%|\s/g, ""); | return caption.replace(/\[([\w\' \\\"\/\=]*)\]|\+|\%|\s/g, ""); | ||||
else | else | ||||
return caption.replace(/\[([\w\' \\\"\/\=]*)\]|[\t\r \f]/g, ""); | return caption.replace(/\[([\w\' \\\"\/\=]*)\]|[\t\r \f]/g, ""); | ||||
} | } | ||||
function updateCountersPlayer(playerState, counters, idGUI) | function updateCountersPlayer(playerState, counters, headings, idGUI) | ||||
{ | { | ||||
let index = playerState.sequences.time.length - 1; | |||||
for (let w in counters) | for (let w in counters) | ||||
{ | { | ||||
let fn = counters[w].fn; | let fn = counters[w].fn; | ||||
Engine.GetGUIObjectByName(idGUI + "[" + w + "]").caption = fn && fn(playerState, w); | Engine.GetGUIObjectByName(idGUI + "[" + w + "]").caption = formatSummaryValue(fn && fn(playerState, index, headings[+w+1].identifier)); | ||||
} | } | ||||
} | } | ||||
/** | |||||
* Add two arrays element-wise. So addArray([1, 2], [7, 42]) will result in [8, 44]. | |||||
* | |||||
* @param {Array} array1 - first summand array. | |||||
* @param {Array} array2 - second summand array. | |||||
* @returns {Array} the element-wise sum of array1 and array2. | |||||
*/ | |||||
function addArray(array1, array2) | |||||
{ | |||||
array1 = array1.map((value, index) => value + array2[index]); | |||||
} | |||||
// Updates g_TeamHelperData by appending some data from playerState | // Updates g_TeamHelperData by appending some data from playerState | ||||
function calculateTeamCounters(playerState) | function calculateTeamCounters(playerState) | ||||
{ | { | ||||
if (!g_TeamHelperData[playerState.team]) | if (!g_TeamHelperData[playerState.team]) | ||||
g_TeamHelperData[playerState.team] = { | { | ||||
"food": 0, | g_TeamHelperData[playerState.team] = {}; | ||||
"vegetarianFood": 0, | for (let value of ["food", "vegetarianFood", "femaleCitizen", "worker", "enemyUnitsKilled", | ||||
"femaleCitizen": 0, | "unitsLost", "percentMapControlled", "peakPercentMapControlled", | ||||
"worker": 0, | "percentMapExplored", "totalBought", "totalSold"]) | ||||
"enemyUnitsKilled": 0, | g_TeamHelperData[playerState.team][value] = new Array(playerState.sequences.time.length).fill(0); | ||||
"unitsLost": 0, | } | ||||
"percentMapControlled": 0, | |||||
"peakPercentMapControlled": 0, | |||||
"percentMapExplored": 0, | |||||
"totalBought": 0, | |||||
"totalSold": 0 | |||||
}; | |||||
g_TeamHelperData[playerState.team].food += playerState.statistics.resourcesGathered.food; | addArray(g_TeamHelperData[playerState.team].food, playerState.sequences.resourcesGathered.food); | ||||
g_TeamHelperData[playerState.team].vegetarianFood += playerState.statistics.resourcesGathered.vegetarianFood; | addArray(g_TeamHelperData[playerState.team].vegetarianFood, playerState.sequences.resourcesGathered.vegetarianFood); | ||||
g_TeamHelperData[playerState.team].femaleCitizen += playerState.statistics.unitsTrained.FemaleCitizen; | addArray(g_TeamHelperData[playerState.team].femaleCitizen, playerState.sequences.unitsTrained.FemaleCitizen); | ||||
g_TeamHelperData[playerState.team].worker += playerState.statistics.unitsTrained.Worker; | addArray(g_TeamHelperData[playerState.team].worker, playerState.sequences.unitsTrained.Worker); | ||||
g_TeamHelperData[playerState.team].enemyUnitsKilled += playerState.statistics.enemyUnitsKilled.total; | addArray(g_TeamHelperData[playerState.team].enemyUnitsKilled, playerState.sequences.enemyUnitsKilled.total); | ||||
g_TeamHelperData[playerState.team].unitsLost += playerState.statistics.unitsLost.total; | addArray(g_TeamHelperData[playerState.team].unitsLost, playerState.sequences.unitsLost.total); | ||||
g_TeamHelperData[playerState.team].percentMapControlled = playerState.statistics.teamPercentMapControlled; | g_TeamHelperData[playerState.team].percentMapControlled = playerState.sequences.teamPercentMapControlled; | ||||
g_TeamHelperData[playerState.team].peakPercentMapControlled = playerState.statistics.teamPeakPercentMapControlled; | g_TeamHelperData[playerState.team].peakPercentMapControlled = playerState.sequences.teamPeakPercentMapControlled; | ||||
g_TeamHelperData[playerState.team].percentMapExplored = playerState.statistics.teamPercentMapExplored; | g_TeamHelperData[playerState.team].percentMapExplored = playerState.sequences.teamPercentMapExplored; | ||||
for (let type in playerState.statistics.resourcesBought) | for (let type in playerState.sequences.resourcesBought) | ||||
g_TeamHelperData[playerState.team].totalBought += playerState.statistics.resourcesBought[type]; | addArray(g_TeamHelperData[playerState.team].totalBought, playerState.sequences.resourcesBought[type]); | ||||
for (let type in playerState.statistics.resourcesSold) | for (let type in playerState.sequences.resourcesSold) | ||||
g_TeamHelperData[playerState.team].totalSold += playerState.statistics.resourcesSold[type]; | addArray(g_TeamHelperData[playerState.team].totalSold, playerState.sequences.resourcesSold[type]); | ||||
} | } | ||||
function calculateEconomyScore(playerState) | function calculateEconomyScore(playerState, index) | ||||
{ | { | ||||
let total = 0; | let total = 0; | ||||
for (let type in playerState.statistics.resourcesGathered) | for (let type in playerState.sequences.resourcesGathered) | ||||
total += playerState.statistics.resourcesGathered[type]; | total += playerState.sequences.resourcesGathered[type][index]; | ||||
return Math.round(total / 10); | return Math.round(total / 10); | ||||
} | } | ||||
function calculateMilitaryScore(playerState) | function calculateMilitaryScore(playerState, index) | ||||
{ | { | ||||
return Math.round((playerState.statistics.enemyUnitsKilledValue + | return Math.round((playerState.sequences.enemyUnitsKilledValue[index] + | ||||
playerState.statistics.enemyBuildingsDestroyedValue + | playerState.sequences.enemyBuildingsDestroyedValue[index] + | ||||
playerState.statistics.buildingsCapturedValue) / 10); | playerState.sequences.buildingsCapturedValue[index]) / 10); | ||||
} | } | ||||
function calculateExplorationScore(playerState) | function calculateExplorationScore(playerState, index) | ||||
{ | { | ||||
return playerState.statistics.percentMapExplored * 10; | return playerState.sequences.percentMapExplored[index] * 10; | ||||
} | } | ||||
function calculateScoreTotal(playerState) | function calculateScoreTotal(playerState, index) | ||||
{ | { | ||||
return calculateEconomyScore(playerState) + | return calculateEconomyScore(playerState, index) + | ||||
calculateMilitaryScore(playerState) + | calculateMilitaryScore(playerState, index) + | ||||
calculateExplorationScore(playerState); | calculateExplorationScore(playerState, index); | ||||
} | } | ||||
function calculateScoreTeam(counters) | function calculateScoreTeam(counters, index) | ||||
{ | { | ||||
for (let t in g_Teams) | for (let t in g_Teams) | ||||
{ | { | ||||
if (t == -1) | if (t == -1) | ||||
continue; | continue; | ||||
let teamTotalScore = 0; | let teamTotalScore = 0; | ||||
for (let w in counters) | for (let w in counters) | ||||
{ | { | ||||
let total = 0; | let total = 0; | ||||
if (w == 2) // Team exploration score (not additive) | if (w == 2) // Team exploration score (not additive) | ||||
total = g_TeamHelperData[t].percentMapExplored * 10; | total = g_TeamHelperData[t].percentMapExplored[index] * 10; | ||||
else | else | ||||
for (let p = 0; p < g_Teams[t]; ++p) | for (let p = 0; p < g_Teams[t]; ++p) | ||||
total += +Engine.GetGUIObjectByName("valueDataTeam[" + t + "][" + p + "][" + w + "]").caption; | total += +Engine.GetGUIObjectByName("valueDataTeam[" + t + "][" + p + "][" + w + "]").caption; | ||||
if (w < 3) | if (w < 3) | ||||
{ | { | ||||
teamTotalScore += total; | teamTotalScore += total; | ||||
Engine.GetGUIObjectByName("valueDataTeam[" + t + "][" + w + "]").caption = total; | Engine.GetGUIObjectByName("valueDataTeam[" + t + "][" + w + "]").caption = total; | ||||
} | } | ||||
else | else | ||||
Engine.GetGUIObjectByName("valueDataTeam[" + t + "][" + w + "]").caption = teamTotalScore; | Engine.GetGUIObjectByName("valueDataTeam[" + t + "][" + w + "]").caption = teamTotalScore; | ||||
} | } | ||||
} | } | ||||
} | } | ||||
function calculateBuildings(playerState, position) | function calculateBuildings(playerState, index, type) | ||||
{ | { | ||||
let type = g_BuildingsTypes[position]; | return { | ||||
return formatCaptured( | "constructed": playerState.sequences.buildingsConstructed[type][index], | ||||
playerState.statistics.buildingsConstructed[type], | "destroyed": playerState.sequences.enemyBuildingsDestroyed[type][index], | ||||
playerState.statistics.enemyBuildingsDestroyed[type], | "captured": playerState.sequences.buildingsCaptured[type][index], | ||||
playerState.statistics.buildingsCaptured[type], | "lost": playerState.sequences.buildingsLost[type][index] | ||||
playerState.statistics.buildingsLost[type]); | }; | ||||
} | } | ||||
function calculateBuildingsTeam(counters) | function calculateBuildingsTeam(counters, index) | ||||
{ | { | ||||
for (let t in g_Teams) | for (let t in g_Teams) | ||||
{ | { | ||||
if (t == -1) | if (t == -1) | ||||
continue; | continue; | ||||
for (let w in counters) | for (let w in counters) | ||||
{ | { | ||||
Show All 12 Lines | for (let w in counters) | ||||
total.constructed += +first[0]; | total.constructed += +first[0]; | ||||
total.destroyed += +first[1]; | total.destroyed += +first[1]; | ||||
total.captured += +second[0]; | total.captured += +second[0]; | ||||
total.lost += +second[1]; | total.lost += +second[1]; | ||||
} | } | ||||
Engine.GetGUIObjectByName("valueDataTeam[" + t + "][" + w + "]").caption = | Engine.GetGUIObjectByName("valueDataTeam[" + t + "][" + w + "]").caption = | ||||
formatCaptured(total.constructed, total.destroyed, total.captured, total.lost); | formatSummaryValue(total); | ||||
} | } | ||||
} | } | ||||
} | } | ||||
function calculateUnitsTeam(counters) | function calculateUnitsTeam(counters, index) | ||||
{ | { | ||||
for (let t in g_Teams) | for (let t in g_Teams) | ||||
{ | { | ||||
if (t == -1) | if (t == -1) | ||||
continue; | continue; | ||||
for (let w in counters) | for (let w in counters) | ||||
{ | { | ||||
let total = | let total = | ||||
{ | { | ||||
"trained": 0, | "trained": 0, | ||||
"killed": 0, | "killed": 0, | ||||
"captured" : 0, | "captured" : 0, | ||||
"lost": 0 | "lost": 0 | ||||
}; | }; | ||||
for (let p = 0; p < g_Teams[t]; ++p) | for (let p = 0; p < g_Teams[t]; ++p) | ||||
{ | { | ||||
if (w == 0 || w == 6) | |||||
{ | |||||
let splitCaption = cleanGUICaption(t, p, w, false).split("\n"); | let splitCaption = cleanGUICaption(t, p, w, false).split("\n"); | ||||
let first = splitCaption[0].split("/"); | let first = splitCaption[0].split("/"); | ||||
let second = splitCaption[1].split("/"); | |||||
total.trained += +first[0]; | total.trained += +first[0]; | ||||
total.killed += +first[1]; | total.killed += +first[1]; | ||||
if (w == 0 || w == 6) | |||||
{ | |||||
let second = splitCaption[1].split("/"); | |||||
total.captured += +second[0]; | total.captured += +second[0]; | ||||
total.lost += +second[1]; | total.lost += +second[1]; | ||||
} | } | ||||
else | else | ||||
{ | total.lost += +splitCaption[1]; | ||||
let splitCaption = cleanGUICaption(t, p, w).split("/"); | |||||
total.trained += +splitCaption[0]; | |||||
total.killed += +splitCaption[1]; | |||||
total.lost += +splitCaption[2]; | |||||
} | |||||
} | } | ||||
let formattedCaption = ""; | if (w != 0 && w != 6) | ||||
delete total.captured; | |||||
if (w == 0 || w == 6) | |||||
formattedCaption = formatCaptured(total.trained, total.killed, total.captured, total.lost); | |||||
else | |||||
formattedCaption = formatTrained(total.trained, total.killed, total.lost); | |||||
Engine.GetGUIObjectByName("valueDataTeam[" + t + "][" + w + "]").caption = formattedCaption; | Engine.GetGUIObjectByName("valueDataTeam[" + t + "][" + w + "]").caption = formatSummaryValue(total); | ||||
} | } | ||||
} | } | ||||
} | } | ||||
function calculateUnitsWithCaptured(playerState, position) | function calculateUnitsWithCaptured(playerState, index, type) | ||||
{ | { | ||||
let type = g_UnitsTypes[position]; | return { | ||||
"trained": playerState.sequences.unitsTrained[type][index], | |||||
return formatCaptured( | "killed": playerState.sequences.enemyUnitsKilled[type][index], | ||||
playerState.statistics.unitsTrained[type], | "captured": playerState.sequences.unitsCaptured[type][index], | ||||
playerState.statistics.enemyUnitsKilled[type], | "lost": playerState.sequences.unitsLost[type][index] | ||||
playerState.statistics.unitsCaptured[type], | }; | ||||
playerState.statistics.unitsLost[type]); | |||||
} | } | ||||
function calculateUnits(playerState, position) | function calculateUnits(playerState, index, type) | ||||
{ | { | ||||
let type = g_UnitsTypes[position]; | return { | ||||
"trained": playerState.sequences.unitsTrained[type][index], | |||||
return formatTrained( | "killed": playerState.sequences.enemyUnitsKilled[type][index], | ||||
playerState.statistics.unitsTrained[type], | "lost": playerState.sequences.unitsLost[type][index] | ||||
playerState.statistics.enemyUnitsKilled[type], | }; | ||||
playerState.statistics.unitsLost[type]); | |||||
} | } | ||||
function calculateResources(playerState, position) | function calculateResources(playerState, index, type) | ||||
{ | { | ||||
let type = g_ResourceData.GetCodes()[position]; | return { | ||||
"gathered": playerState.sequences.resourcesGathered[type][index], | |||||
return formatIncome( | "used": playerState.sequences.resourcesUsed[type][index] - playerState.sequences.resourcesSold[type][index] | ||||
playerState.statistics.resourcesGathered[type], | }; | ||||
playerState.statistics.resourcesUsed[type] - playerState.statistics.resourcesSold[type]); | |||||
} | } | ||||
function calculateTotalResources(playerState) | function calculateTotalResources(playerState, index) | ||||
{ | { | ||||
let totalGathered = 0; | let totalGathered = 0; | ||||
let totalUsed = 0; | let totalUsed = 0; | ||||
for (let type of g_ResourceData.GetCodes()) | for (let type of g_ResourceData.GetCodes()) | ||||
{ | { | ||||
totalGathered += playerState.statistics.resourcesGathered[type]; | totalGathered += playerState.sequences.resourcesGathered[type][index]; | ||||
totalUsed += playerState.statistics.resourcesUsed[type] - playerState.statistics.resourcesSold[type]; | totalUsed += playerState.sequences.resourcesUsed[type][index] - playerState.sequences.resourcesSold[type][index]; | ||||
} | } | ||||
return formatIncome(totalGathered, totalUsed); | return { "gathered": totalGathered, "used": totalUsed }; | ||||
} | } | ||||
function calculateTreasureCollected(playerState) | function calculateTreasureCollected(playerState, index) | ||||
{ | { | ||||
return playerState.statistics.treasuresCollected; | return playerState.sequences.treasuresCollected[index]; | ||||
} | } | ||||
function calculateLootCollected(playerState) | function calculateLootCollected(playerState, index) | ||||
{ | { | ||||
return playerState.statistics.lootCollected; | return playerState.sequences.lootCollected[index]; | ||||
} | } | ||||
function calculateTributeSent(playerState) | function calculateTributeSent(playerState, index) | ||||
{ | { | ||||
return formatIncome( | return { | ||||
playerState.statistics.tributesSent, | "sent": playerState.sequences.tributesSent[index], | ||||
playerState.statistics.tributesReceived); | "received": playerState.sequences.tributesReceived[index] | ||||
}; | |||||
} | } | ||||
function calculateResourcesTeam(counters) | function calculateResourcesTeam(counters, index) | ||||
{ | { | ||||
for (let t in g_Teams) | for (let t in g_Teams) | ||||
{ | { | ||||
if (t == -1) | if (t == -1) | ||||
continue; | continue; | ||||
for (let w in counters) | for (let w in counters) | ||||
{ | { | ||||
Show All 15 Lines | for (let w in counters) | ||||
total.income += +splitCaption[0]; | total.income += +splitCaption[0]; | ||||
total.outcome += +splitCaption[1]; | total.outcome += +splitCaption[1]; | ||||
} | } | ||||
} | } | ||||
let teamTotal; | let teamTotal; | ||||
if (w >= 6) | if (w >= 6) | ||||
teamTotal = total.income; | teamTotal = total.income; | ||||
else if (w == 5) | |||||
teamTotal = { "sent": total.income, "received": total.outcome }; | |||||
else | else | ||||
teamTotal = formatIncome(total.income, total.outcome); | teamTotal = { "gathered": total.income, "used": total.outcome }; | ||||
Engine.GetGUIObjectByName("valueDataTeam[" + t + "][" + w + "]").caption = teamTotal; | Engine.GetGUIObjectByName("valueDataTeam[" + t + "][" + w + "]").caption = formatSummaryValue(teamTotal); | ||||
} | } | ||||
} | } | ||||
} | } | ||||
function calculateResourceExchanged(playerState, position) | function calculateResourceExchanged(playerState, index, type) | ||||
{ | { | ||||
let type = g_ResourceData.GetCodes()[position]; | return { | ||||
"bought": playerState.sequences.resourcesBought[type][index], | |||||
return formatIncome( | "sold": playerState.sequences.resourcesSold[type][index] | ||||
playerState.statistics.resourcesBought[type], | }; | ||||
playerState.statistics.resourcesSold[type]); | |||||
} | } | ||||
function calculateBarterEfficiency(playerState) | function calculateBarterEfficiency(playerState, index) | ||||
{ | { | ||||
let totalBought = 0; | let totalBought = 0; | ||||
let totalSold = 0; | let totalSold = 0; | ||||
for (let type in playerState.statistics.resourcesBought) | for (let type in playerState.sequences.resourcesBought) | ||||
totalBought += playerState.statistics.resourcesBought[type]; | totalBought += playerState.sequences.resourcesBought[type][index]; | ||||
for (let type in playerState.statistics.resourcesSold) | for (let type in playerState.sequences.resourcesSold) | ||||
totalSold += playerState.statistics.resourcesSold[type]; | totalSold += playerState.sequences.resourcesSold[type][index]; | ||||
return formatPercent(totalBought, totalSold); | return calculatePercent(totalBought, totalSold); | ||||
} | } | ||||
function calculateTradeIncome(playerState) | function calculateTradeIncome(playerState, index) | ||||
{ | { | ||||
return playerState.statistics.tradeIncome; | return playerState.sequences.tradeIncome[index]; | ||||
} | } | ||||
function calculateMarketTeam(counters) | function calculateMarketTeam(counters, index) | ||||
{ | { | ||||
for (let t in g_Teams) | for (let t in g_Teams) | ||||
{ | { | ||||
if (t == -1) | if (t == -1) | ||||
continue; | continue; | ||||
for (let w in counters) | for (let w in counters) | ||||
{ | { | ||||
Show All 13 Lines | for (let w in counters) | ||||
let splitCaption = caption.split("/"); | let splitCaption = caption.split("/"); | ||||
total.income += +splitCaption[0]; | total.income += +splitCaption[0]; | ||||
total.outcome += +splitCaption[1]; | total.outcome += +splitCaption[1]; | ||||
} | } | ||||
} | } | ||||
let teamTotal; | let teamTotal; | ||||
if (w == 4) | if (w == 4) | ||||
teamTotal = formatPercent(g_TeamHelperData[t].totalBought, g_TeamHelperData[t].totalSold); | teamTotal = calculatePercent(g_TeamHelperData[t].totalBought[index], g_TeamHelperData[t].totalSold[index]); | ||||
else if (w > 4) | else if (w > 4) | ||||
teamTotal = total.income; | teamTotal = total.income; | ||||
else | else | ||||
teamTotal = formatIncome(total.income, total.outcome); | teamTotal = total; | ||||
Engine.GetGUIObjectByName("valueDataTeam[" + t + "][" + w + "]").caption = teamTotal; | Engine.GetGUIObjectByName("valueDataTeam[" + t + "][" + w + "]").caption = formatSummaryValue(teamTotal); | ||||
} | } | ||||
} | } | ||||
} | } | ||||
function calculateVegetarianRatio(playerState) | function calculateVegetarianRatio(playerState, index) | ||||
{ | { | ||||
return formatPercent( | return calculatePercent( | ||||
playerState.statistics.resourcesGathered.vegetarianFood, | playerState.sequences.resourcesGathered.vegetarianFood[index], | ||||
playerState.statistics.resourcesGathered.food); | playerState.sequences.resourcesGathered.food[index]); | ||||
} | } | ||||
function calculateFeminization(playerState) | function calculateFeminization(playerState, index) | ||||
{ | { | ||||
return formatPercent( | return calculatePercent( | ||||
playerState.statistics.unitsTrained.FemaleCitizen, | playerState.sequences.unitsTrained.FemaleCitizen[index], | ||||
playerState.statistics.unitsTrained.Worker); | playerState.sequences.unitsTrained.Worker[index]); | ||||
} | } | ||||
function calculateKillDeathRatio(playerState) | function calculateKillDeathRatio(playerState, index) | ||||
{ | { | ||||
return formatRatio( | return calculateRatio( | ||||
playerState.statistics.enemyUnitsKilled.total, | playerState.sequences.enemyUnitsKilled.total[index], | ||||
playerState.statistics.unitsLost.total); | playerState.sequences.unitsLost.total[index]); | ||||
} | } | ||||
function calculateMapExploration(playerState) | function calculateMapExploration(playerState, index) | ||||
{ | { | ||||
return playerState.statistics.percentMapExplored + "%"; | return { "percent": playerState.sequences.percentMapExplored[index] }; | ||||
} | } | ||||
function calculateMapFinalControl(playerState) | function calculateMapFinalControl(playerState, index) | ||||
{ | { | ||||
return playerState.statistics.percentMapControlled + "%"; | return { "percent": playerState.sequences.percentMapControlled[index] }; | ||||
} | } | ||||
function calculateMapPeakControl(playerState) | function calculateMapPeakControl(playerState, index) | ||||
{ | { | ||||
return playerState.statistics.peakPercentMapControlled + "%"; | return { "percent": playerState.sequences.peakPercentMapControlled[index] }; | ||||
} | } | ||||
function calculateMiscellaneous(counters) | function calculateMiscellaneousTeam(counters, index) | ||||
{ | { | ||||
for (let t in g_Teams) | for (let t in g_Teams) | ||||
{ | { | ||||
if (t == -1) | if (t == -1) | ||||
continue; | continue; | ||||
for (let w in counters) | for (let w in counters) | ||||
{ | { | ||||
let teamTotal; | let teamTotal; | ||||
if (w == 0) | if (w == 0) | ||||
teamTotal = formatPercent(g_TeamHelperData[t].vegetarianFood, g_TeamHelperData[t].food); | teamTotal = calculatePercent(g_TeamHelperData[t].vegetarianFood[index], g_TeamHelperData[t].food[index]); | ||||
else if (w == 1) | else if (w == 1) | ||||
teamTotal = formatPercent(g_TeamHelperData[t].femaleCitizen, g_TeamHelperData[t].worker); | teamTotal = calculatePercent(g_TeamHelperData[t].femaleCitizen[index], g_TeamHelperData[t].worker[index]); | ||||
else if (w == 2) | else if (w == 2) | ||||
teamTotal = formatRatio(g_TeamHelperData[t].enemyUnitsKilled, g_TeamHelperData[t].unitsLost); | teamTotal = calculateRatio(g_TeamHelperData[t].enemyUnitsKilled[index], g_TeamHelperData[t].unitsLost[index]); | ||||
else if (w == 3) | else if (w == 3) | ||||
teamTotal = g_TeamHelperData[t].percentMapExplored + "%"; | teamTotal = { "percent": g_TeamHelperData[t].percentMapExplored[index] }; | ||||
else if (w == 4) | else if (w == 4) | ||||
teamTotal = g_TeamHelperData[t].peakPercentMapControlled + "%"; | teamTotal = { "percent": g_TeamHelperData[t].peakPercentMapControlled[index] }; | ||||
else if (w == 5) | else if (w == 5) | ||||
teamTotal = g_TeamHelperData[t].percentMapControlled + "%"; | teamTotal = { "percent": g_TeamHelperData[t].percentMapControlled[index] }; | ||||
Engine.GetGUIObjectByName("valueDataTeam[" + t + "][" + w + "]").caption = teamTotal; | Engine.GetGUIObjectByName("valueDataTeam[" + t + "][" + w + "]").caption = formatSummaryValue(teamTotal); | ||||
} | } | ||||
} | } | ||||
} | } |
Wildfire Games · Phabricator