mirror of
https://gitea.wildfiregames.com/0ad/0ad.git
synced 2026-06-21 11:44:30 +00:00
Improve the massbarter onPress scripts, by inlining stuff used only once and uninlining mapped arrays used twice
refs #5055 This was SVN commit r21542.
This commit is contained in:
@@ -871,12 +871,8 @@ function updateBarterButtons()
|
||||
Engine.GetGUIObjectByName("barterResources").hidden = !canBarter;
|
||||
Engine.GetGUIObjectByName("barterHelp").hidden = !canBarter;
|
||||
|
||||
if (!canBarter)
|
||||
return;
|
||||
|
||||
let resCodes = g_ResourceData.GetCodes();
|
||||
for (let i = 0; i < resCodes.length; ++i)
|
||||
barterUpdateCommon(resCodes[i], i, "barter", g_ViewedPlayer);
|
||||
if (canBarter)
|
||||
g_ResourceData.GetCodes().forEach((resCode, i) => { barterUpdateCommon(resCode, i, "barter", g_ViewedPlayer) });
|
||||
}
|
||||
|
||||
function getIdleLandTradersText(traderNumber)
|
||||
|
||||
@@ -144,13 +144,11 @@ g_SelectionPanels.Command = {
|
||||
data.icon.sprite = "stretched:session/icons/" + data.item.icon;
|
||||
|
||||
let size = data.button.size;
|
||||
// count on square buttons, so size.bottom is the width too
|
||||
let spacer = size.bottom + 1;
|
||||
// relative to the center ( = 50%)
|
||||
size.rleft = 50;
|
||||
size.rright = 50;
|
||||
// offset from the center calculation
|
||||
size.left = (data.i - data.numberOfItems / 2) * spacer;
|
||||
// offset from the center calculation, count on square buttons, so size.bottom is the width too
|
||||
size.left = (data.i - data.numberOfItems / 2) * (size.bottom + 1);
|
||||
size.right = size.left + size.bottom;
|
||||
data.button.size = size;
|
||||
return true;
|
||||
@@ -198,13 +196,11 @@ g_SelectionPanels.AllyCommand = {
|
||||
data.icon.sprite = "stretched:" + grayscale + "session/icons/" + data.item.icon;
|
||||
|
||||
let size = data.button.size;
|
||||
// count on square buttons, so size.bottom is the width too
|
||||
let spacer = size.bottom + 1;
|
||||
// relative to the center ( = 50%)
|
||||
size.rleft = 50;
|
||||
size.rright = 50;
|
||||
// offset from the center calculation
|
||||
size.left = (data.i - data.numberOfItems / 2) * spacer;
|
||||
// offset from the center calculation, count on square buttons, so size.bottom is the width too
|
||||
size.left = (data.i - data.numberOfItems / 2) * (size.bottom + 1);
|
||||
size.right = size.left + size.bottom;
|
||||
data.button.size = size;
|
||||
|
||||
@@ -278,8 +274,7 @@ g_SelectionPanels.Construction = {
|
||||
if (template.icon)
|
||||
data.icon.sprite = modifier + "stretched:session/portraits/" + template.icon;
|
||||
|
||||
let index = data.i + getNumberOfRightPanelButtons();
|
||||
setPanelObjectPosition(data.button, index, data.rowLength);
|
||||
setPanelObjectPosition(data.button, data.i + getNumberOfRightPanelButtons(), data.rowLength);
|
||||
return true;
|
||||
}
|
||||
};
|
||||
@@ -314,13 +309,14 @@ g_SelectionPanels.Formation = {
|
||||
|
||||
let formationInfo = g_FormationsInfo.get(data.item);
|
||||
let formationOk = canMoveSelectionIntoFormation(data.item);
|
||||
let unitIds = data.unitEntStates.map(state => state.id);
|
||||
let formationSelected = Engine.GuiInterfaceCall("IsFormationSelected", {
|
||||
"ents": data.unitEntStates.map(state => state.id),
|
||||
"ents": unitIds,
|
||||
"formationTemplate": data.item
|
||||
});
|
||||
|
||||
data.button.onPress = function() {
|
||||
performFormation(data.unitEntStates.map(state => state.id), data.item);
|
||||
performFormation(unitIds, data.item);
|
||||
};
|
||||
|
||||
let tooltip = translate(formationInfo.name);
|
||||
@@ -372,26 +368,21 @@ g_SelectionPanels.Garrison = {
|
||||
|
||||
data.countDisplay.caption = data.item.ents.length || "";
|
||||
|
||||
let garrisonedUnitOwner = entState.player;
|
||||
|
||||
let canUngarrison =
|
||||
g_ViewedPlayer == data.player ||
|
||||
g_ViewedPlayer == garrisonedUnitOwner;
|
||||
g_ViewedPlayer == entState.player;
|
||||
|
||||
data.button.enabled = canUngarrison && controlsPlayer(g_ViewedPlayer);
|
||||
|
||||
let tooltip = canUngarrison || g_IsObserver ?
|
||||
data.button.tooltip = (canUngarrison || g_IsObserver ?
|
||||
sprintf(translate("Unload %(name)s"), { "name": getEntityNames(template) }) + "\n" +
|
||||
translate("Single-click to unload 1. Shift-click to unload all of this type.") :
|
||||
getEntityNames(template);
|
||||
getEntityNames(template)) + "\n" +
|
||||
sprintf(translate("Player: %(playername)s"), {
|
||||
"playername": g_Players[entState.player].name
|
||||
});
|
||||
|
||||
tooltip += "\n" + sprintf(translate("Player: %(playername)s"), {
|
||||
"playername": g_Players[garrisonedUnitOwner].name
|
||||
});
|
||||
|
||||
data.button.tooltip = tooltip;
|
||||
|
||||
data.guiSelection.sprite = getPlayerHighlightColor(garrisonedUnitOwner);
|
||||
data.guiSelection.sprite = getPlayerHighlightColor(entState.player);
|
||||
data.button.sprite_disabled = data.button.sprite;
|
||||
|
||||
// Selection panel buttons only appear disabled if they
|
||||
@@ -442,8 +433,7 @@ g_SelectionPanels.Gate = {
|
||||
data.guiSelection.hidden = data.item.hidden;
|
||||
data.icon.sprite = "stretched:" + data.item.icon;
|
||||
|
||||
let index = data.i + getNumberOfRightPanelButtons();
|
||||
setPanelObjectPosition(data.button, index, data.rowLength);
|
||||
setPanelObjectPosition(data.button, data.i + getNumberOfRightPanelButtons(), data.rowLength);
|
||||
return true;
|
||||
}
|
||||
};
|
||||
@@ -524,8 +514,7 @@ g_SelectionPanels.Pack = {
|
||||
|
||||
data.button.enabled = controlsPlayer(data.player);
|
||||
|
||||
let index = data.i + getNumberOfRightPanelButtons();
|
||||
setPanelObjectPosition(data.button, index, data.rowLength);
|
||||
setPanelObjectPosition(data.button, data.i + getNumberOfRightPanelButtons(), data.rowLength);
|
||||
return true;
|
||||
}
|
||||
};
|
||||
@@ -680,7 +669,6 @@ g_SelectionPanels.Research = {
|
||||
g_SelectionPanels.Research.hideItem(data.i, data.rowLength);
|
||||
return false;
|
||||
}
|
||||
let techs = data.item.tech.pair ? [data.item.tech.bottom, data.item.tech.top] : [data.item.tech];
|
||||
|
||||
// Start position (start at the bottom)
|
||||
let position = data.i + data.rowLength;
|
||||
@@ -696,11 +684,9 @@ g_SelectionPanels.Research = {
|
||||
|
||||
// Handle one or two techs (tech pair)
|
||||
let player = data.player;
|
||||
for (let i in techs)
|
||||
let playerState = GetSimState().players[player];
|
||||
for (let tech of data.item.tech.pair ? [data.item.tech.bottom, data.item.tech.top] : [data.item.tech])
|
||||
{
|
||||
let tech = techs[i];
|
||||
let playerState = GetSimState().players[player];
|
||||
|
||||
// Don't change the object returned by GetTechnologyData
|
||||
let template = clone(GetTechnologyData(tech, playerState.civ));
|
||||
if (!template)
|
||||
@@ -778,18 +764,15 @@ g_SelectionPanels.Research = {
|
||||
};
|
||||
|
||||
button.onPressRight = function () {
|
||||
let researcherTemplate;
|
||||
for (let selectedEntity of data.unitEntStates)
|
||||
if (selectedEntity.id == data.item.researchFacilityId)
|
||||
researcherTemplate = selectedEntity.template;
|
||||
showTemplateDetails(tech, GetTemplateData(researcherTemplate).nativeCiv);
|
||||
showTemplateDetails(
|
||||
tech,
|
||||
GetTemplateData(data.unitEntStates.find(state => state.id == data.item.researchFacilityId).template).nativeCiv);
|
||||
};
|
||||
|
||||
if (data.item.tech.pair)
|
||||
{
|
||||
// On mouse enter, show a cross over the other icon
|
||||
let otherPosition = (position + data.rowLength) % (2 * data.rowLength);
|
||||
let unchosenIcon = Engine.GetGUIObjectByName("unitResearchUnchosenIcon[" + otherPosition + "]");
|
||||
let unchosenIcon = Engine.GetGUIObjectByName("unitResearchUnchosenIcon[" + (position + data.rowLength) % (2 * data.rowLength) + "]");
|
||||
button.onMouseEnter = function() {
|
||||
unchosenIcon.hidden = false;
|
||||
};
|
||||
@@ -920,13 +903,14 @@ g_SelectionPanels.Stance = {
|
||||
},
|
||||
"setupButton": function(data)
|
||||
{
|
||||
data.button.onPress = function() { performStance(data.unitEntStates.map(state => state.id), data.item); };
|
||||
let unitIds = data.unitEntStates.map(state => state.id);
|
||||
data.button.onPress = function() { performStance(unitIds, data.item); };
|
||||
|
||||
data.button.tooltip = getStanceDisplayName(data.item) + "\n" +
|
||||
"[font=\"sans-13\"]" + getStanceTooltip(data.item) + "[/font]";
|
||||
|
||||
data.guiSelection.hidden = !Engine.GuiInterfaceCall("IsStanceSelected", {
|
||||
"ents": data.unitEntStates.map(state => state.id),
|
||||
"ents": unitIds,
|
||||
"stance": data.item
|
||||
});
|
||||
data.icon.sprite = "stretched:session/icons/stances/" + data.item + ".png";
|
||||
@@ -957,8 +941,9 @@ g_SelectionPanels.Training = {
|
||||
"player": data.player
|
||||
});
|
||||
|
||||
let unitIds = data.unitEntStates.map(status => status.id)
|
||||
let [buildingsCountToTrainFullBatch, fullBatchSize, remainderBatch] =
|
||||
getTrainingStatus(data.unitEntStates.map(status => status.id), data.item, data.playerState);
|
||||
getTrainingStatus(unitIds, data.item, data.playerState);
|
||||
|
||||
let trainNum = buildingsCountToTrainFullBatch * fullBatchSize + remainderBatch;
|
||||
|
||||
@@ -971,7 +956,7 @@ g_SelectionPanels.Training = {
|
||||
|
||||
data.button.onPress = function() {
|
||||
if (!neededResources)
|
||||
addTrainingToQueue(data.unitEntStates.map(state => state.id), data.item, data.playerState);
|
||||
addTrainingToQueue(unitIds, data.item, data.playerState);
|
||||
};
|
||||
data.button.onPressRight = function() {
|
||||
showTemplateDetails(data.item);
|
||||
@@ -986,7 +971,7 @@ g_SelectionPanels.Training = {
|
||||
getVisibleEntityClassesFormatted(template),
|
||||
getAurasTooltip(template),
|
||||
getEntityTooltip(template),
|
||||
getEntityCostTooltip(template, data.unitEntStates[0].id, buildingsCountToTrainFullBatch, fullBatchSize, remainderBatch)
|
||||
getEntityCostTooltip(template, unitIds[0], buildingsCountToTrainFullBatch, fullBatchSize, remainderBatch)
|
||||
];
|
||||
|
||||
let limits = getEntityLimitAndCount(data.playerState, data.item);
|
||||
@@ -1141,8 +1126,7 @@ g_SelectionPanels.Upgrade = {
|
||||
}
|
||||
progressOverlay.hidden = !isUpgrading;
|
||||
|
||||
let index = data.i + getNumberOfRightPanelButtons();
|
||||
setPanelObjectPosition(data.button, index, data.rowLength);
|
||||
setPanelObjectPosition(data.button, data.i + getNumberOfRightPanelButtons(), data.rowLength);
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
@@ -55,7 +55,6 @@ function setupUnitPanel(guiName, unitEntStates, playerState)
|
||||
return;
|
||||
}
|
||||
|
||||
let selection = g_Selection.toList();
|
||||
let items = g_SelectionPanels[guiName].getItems(unitEntStates);
|
||||
|
||||
if (!items || !items.length)
|
||||
@@ -138,8 +137,9 @@ function updateUnitCommands(entStates, supplementalDetailsPanel, commandsPanel)
|
||||
|
||||
if (g_IsObserver || entStates.every(entState => controlsPlayer(entState.player)))
|
||||
{
|
||||
for (var guiName of g_PanelsOrder)
|
||||
for (let guiName of g_PanelsOrder)
|
||||
{
|
||||
|
||||
if (g_SelectionPanels[guiName].conflictsWith &&
|
||||
g_SelectionPanels[guiName].conflictsWith.some(p => g_SelectionPanels[p].used))
|
||||
continue;
|
||||
@@ -168,7 +168,7 @@ function updateUnitCommands(entStates, supplementalDetailsPanel, commandsPanel)
|
||||
}
|
||||
|
||||
// Hides / unhides Unit Panels (panels should be grouped by type, not by order, but we will leave that for another time)
|
||||
for (var panelName in g_SelectionPanels)
|
||||
for (let panelName in g_SelectionPanels)
|
||||
Engine.GetGUIObjectByName("unit" + panelName + "Panel").hidden = !g_SelectionPanels[panelName].used;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user