diff --git a/binaries/data/mods/public/gui/session/menu.js b/binaries/data/mods/public/gui/session/menu.js index 923c62eedf..314fb2e732 100644 --- a/binaries/data/mods/public/gui/session/menu.js +++ b/binaries/data/mods/public/gui/session/menu.js @@ -74,17 +74,10 @@ var g_SummarySelectedData; // Redefined every time someone makes a tribute (so we can save some data in a closure). Called in input.js handleInputBeforeGui. var g_FlushTributing = function() {}; -function initSessionMenuButtons() -{ - initMenuPosition(); - updateGameSpeedControl(); - resizeDiplomacyDialog(); - resizeTradeDialog(); -} - -function initMenuPosition() +function initMenu() { Engine.GetGUIObjectByName("menu").size = "100%-164 " + MENU_TOP + " 100% " + MENU_BOTTOM; + Engine.GetGUIObjectByName("menuExitButton").enabled = !Engine.IsAtlasRunning(); } function updateMenuPosition(dt) @@ -777,6 +770,8 @@ function updateTraderTexts() */ function barterOpenCommon(resourceCode, idx, prefix) { + g_BarterSell = g_BarterSell || g_ResourceData.GetCodes()[0]; + let barterButton = {}; for (let action of g_BarterActions) barterButton[action] = Engine.GetGUIObjectByName(prefix + action + "Button[" + idx + "]"); @@ -1025,6 +1020,8 @@ function toggleTutorial() function updateGameSpeedControl() { + Engine.GetGUIObjectByName("gameSpeedButton").hidden = g_IsNetworked; + let player = g_Players[Engine.GetPlayerID()]; g_GameSpeeds = getGameSpeedChoices(!player || player.state != "active"); diff --git a/binaries/data/mods/public/gui/session/session.js b/binaries/data/mods/public/gui/session/session.js index 03bbbec9f6..b965f3ea83 100644 --- a/binaries/data/mods/public/gui/session/session.js +++ b/binaries/data/mods/public/gui/session/session.js @@ -269,43 +269,18 @@ function init(initData, hotloadData) if (initData.savedGUIData) restoreSavedGameData(initData.savedGUIData); - - Engine.GetGUIObjectByName("gameSpeedButton").hidden = g_IsNetworked; } else if (g_IsReplay)// Needed for autostart loading option g_PlayerAssignments.local.player = -1; LoadModificationTemplates(); - updatePlayerData(); - - g_BarterSell = g_ResourceData.GetCodes()[0]; - initializeMusic(); // before changing the perspective - - initSessionMenuButtons(); - - for (let slot in Engine.GetGUIObjectByName("panelEntityPanel").children) - initPanelEntities(slot); - - g_DisplayedPlayerColors = g_Players.map(player => player.color); - updateViewedPlayerDropdown(); - - // Select "observer" in the view player dropdown when rejoining as a defeated player - let player = g_Players[Engine.GetPlayerID()]; - Engine.GetGUIObjectByName("viewPlayer").selected = player && player.state == "defeated" ? 0 : Engine.GetPlayerID() + 1; - - // If in Atlas editor, disable the exit button - if (Engine.IsAtlasRunning()) - Engine.GetGUIObjectByName("menuExitButton").enabled = false; + initGUIObjects(); if (hotloadData) g_Selection.selected = hotloadData.selection; - Engine.SetBoundingBoxDebugOverlay(false); - updateEnabledRangeOverlayTypes(); - initChatWindow(); - sendLobbyPlayerlistUpdate(); onSimulationUpdate(); setTimeout(displayGamestateNotifications, 1000); @@ -321,6 +296,19 @@ function init(initData, hotloadData) // setTimeout(function() { reportPerformance(60); }, 60000); } +function initGUIObjects() +{ + initMenu(); + updateGameSpeedControl(); + resizeDiplomacyDialog(); + resizeTradeDialog(); + initPanelEntities(); + initViewedPlayerDropdown(); + initChatWindow(); + Engine.SetBoundingBoxDebugOverlay(false); + updateEnabledRangeOverlayTypes(); +} + function updatePlayerData() { let simState = GetSimState(); @@ -372,16 +360,21 @@ function updatePlayerData() function updateDiplomacyColorsButton() { g_DiplomacyColorsToggle = !g_DiplomacyColorsToggle; + let diplomacyColorsButton = Engine.GetGUIObjectByName("diplomacyColorsButton"); + diplomacyColorsButton.sprite = g_DiplomacyColorsToggle ? "stretched:session/minimap-diplomacy-on.png" : "stretched:session/minimap-diplomacy-off.png"; + diplomacyColorsButton.sprite_over = g_DiplomacyColorsToggle ? "stretched:session/minimap-diplomacy-on-highlight.png" : "stretched:session/minimap-diplomacy-off-highlight.png"; + Engine.GetGUIObjectByName("diplomacyColorsWindowButtonIcon").sprite = g_DiplomacyColorsToggle ? "stretched:session/icons/diplomacy-on.png" : "stretched:session/icons/diplomacy.png"; + updateDisplayedPlayerColors(); } @@ -469,26 +462,27 @@ function updateHotkeyTooltips() }); } -function initPanelEntities(slot) +function initPanelEntities() { - let button = Engine.GetGUIObjectByName("panelEntityButton[" + slot + "]"); + Engine.GetGUIObjectByName("panelEntityPanel").children.forEach((button, slot) => { - button.onPress = function() { - let panelEnt = g_PanelEntities.find(ent => ent.slot !== undefined && ent.slot == slot); - if (!panelEnt) - return; + button.onPress = function() { + let panelEnt = g_PanelEntities.find(ent => ent.slot !== undefined && ent.slot == slot); + if (!panelEnt) + return; - if (!Engine.HotkeyIsPressed("selection.add")) - g_Selection.reset(); + if (!Engine.HotkeyIsPressed("selection.add")) + g_Selection.reset(); - g_Selection.addList([panelEnt.ent]); - }; + g_Selection.addList([panelEnt.ent]); + }; - button.onDoublePress = function() { - let panelEnt = g_PanelEntities.find(ent => ent.slot !== undefined && ent.slot == slot); - if (panelEnt) - selectAndMoveTo(getEntityOrHolder(panelEnt.ent)); - }; + button.onDoublePress = function() { + let panelEnt = g_PanelEntities.find(ent => ent.slot !== undefined && ent.slot == slot); + if (panelEnt) + selectAndMoveTo(getEntityOrHolder(panelEnt.ent)); + }; + }); } /** @@ -513,6 +507,16 @@ function initializeMusic() playAmbient(); } +function initViewedPlayerDropdown() +{ + g_DisplayedPlayerColors = g_Players.map(player => player.color); + updateViewedPlayerDropdown(); + + // Select "observer" in the view player dropdown when rejoining as a defeated player + let player = g_Players[Engine.GetPlayerID()]; + Engine.GetGUIObjectByName("viewPlayer").selected = player && player.state == "defeated" ? 0 : Engine.GetPlayerID() + 1; +} + function updateViewedPlayerDropdown() { let viewPlayer = Engine.GetGUIObjectByName("viewPlayer"); @@ -903,8 +907,7 @@ function confirmExit() closeOpenDialogs(); // Don't ask for exit if other humans are still playing - let isHost = g_IsController && g_IsNetworked; - let askExit = !isHost || isHost && g_Players.every((player, i) => + let askExit = !Engine.HasNetServer() || g_Players.every((player, i) => i == 0 || player.state != "active" || g_GameAttributes.settings.PlayerData[i].AI != "");