From 6814a983e1da65689f34eb53128a22dbbdba8d2d Mon Sep 17 00:00:00 2001 From: elexis Date: Fri, 11 Oct 2019 12:28:12 +0000 Subject: [PATCH] Refactor diplomacy dialog to use object orientation paradigm using the class keyword, refs #5387. Includes dilomacy colors, tribute buttons, spy request buttons, attack request buttons, minimap panel, idle worker button, ceasefire counter. Differential Revision: https://code.wildfiregames.com/D2365 Use hotkey release event from 78bc56f33e to remove input.js state and evil global nested closure hackery from cb890ad876, refs #1839, #3194. Fixes masstribute selecitonchange issue subject of D1191. This was SVN commit r23065. --- .../mods/public/gui/common/gamedescription.js | 6 +- .../gui/session/diplomacy/DiplomacyDialog.js | 89 +++++ .../DiplomacyDialog.xml} | 7 +- .../DiplomacyDialogCeasefireCounter.js | 27 ++ .../diplomacy/DiplomacyDialogColorsButton.js | 31 ++ .../diplomacy/DiplomacyPlayerControl.js | 51 +++ .../playercontrols/AttackRequestButton.js | 38 +++ .../playercontrols/DiplomacyPlayerText.js | 80 +++++ .../playercontrols/SpyRequestButton.js | 142 ++++++++ .../diplomacy/playercontrols/StanceButton.js | 60 ++++ .../diplomacy/playercontrols/TributeButton.js | 119 +++++++ .../data/mods/public/gui/session/input.js | 28 +- binaries/data/mods/public/gui/session/menu.js | 309 +----------------- .../data/mods/public/gui/session/messages.js | 13 +- .../public/gui/session/minimap/MiniMap.js | 26 ++ .../MiniMap.xml} | 16 +- .../minimap/MiniMapDiplomacyColorsButton.js | 36 ++ .../minimap/MiniMapIdleWorkerButton.js | 32 ++ .../gui/session/minimap/MiniMapPanel.js | 18 + .../public/gui/session/selection_details.js | 10 +- .../public/gui/session/selection_panels.js | 4 +- .../gui/session/selection_panels_helpers.js | 5 - .../data/mods/public/gui/session/session.js | 124 ++----- .../data/mods/public/gui/session/session.xml | 8 +- .../gui/session/top_panel/DiplomacyButton.js | 22 ++ .../session/top_panel/button_diplomacy.xml | 3 - .../data/mods/public/gui/summary/summary.js | 2 +- 27 files changed, 824 insertions(+), 482 deletions(-) create mode 100644 binaries/data/mods/public/gui/session/diplomacy/DiplomacyDialog.js rename binaries/data/mods/public/gui/session/{diplomacy_window.xml => diplomacy/DiplomacyDialog.xml} (94%) create mode 100644 binaries/data/mods/public/gui/session/diplomacy/DiplomacyDialogCeasefireCounter.js create mode 100644 binaries/data/mods/public/gui/session/diplomacy/DiplomacyDialogColorsButton.js create mode 100644 binaries/data/mods/public/gui/session/diplomacy/DiplomacyPlayerControl.js create mode 100644 binaries/data/mods/public/gui/session/diplomacy/playercontrols/AttackRequestButton.js create mode 100644 binaries/data/mods/public/gui/session/diplomacy/playercontrols/DiplomacyPlayerText.js create mode 100644 binaries/data/mods/public/gui/session/diplomacy/playercontrols/SpyRequestButton.js create mode 100644 binaries/data/mods/public/gui/session/diplomacy/playercontrols/StanceButton.js create mode 100644 binaries/data/mods/public/gui/session/diplomacy/playercontrols/TributeButton.js create mode 100644 binaries/data/mods/public/gui/session/minimap/MiniMap.js rename binaries/data/mods/public/gui/session/{minimap_panel.xml => minimap/MiniMap.xml} (66%) create mode 100644 binaries/data/mods/public/gui/session/minimap/MiniMapDiplomacyColorsButton.js create mode 100644 binaries/data/mods/public/gui/session/minimap/MiniMapIdleWorkerButton.js create mode 100644 binaries/data/mods/public/gui/session/minimap/MiniMapPanel.js create mode 100644 binaries/data/mods/public/gui/session/top_panel/DiplomacyButton.js diff --git a/binaries/data/mods/public/gui/common/gamedescription.js b/binaries/data/mods/public/gui/common/gamedescription.js index 8c3c4518a2..3cdb761dd6 100644 --- a/binaries/data/mods/public/gui/common/gamedescription.js +++ b/binaries/data/mods/public/gui/common/gamedescription.js @@ -449,13 +449,9 @@ function getGameDescription() /** * Sets the win/defeat icon to indicate current player's state. - * @param {string} state - The current in-game state of the player. - * @param {string} imageID - The name of the XML image object to update. */ -function setOutcomeIcon(state, imageID) +function setOutcomeIcon(state, image) { - let image = Engine.GetGUIObjectByName(imageID); - if (state == "won") { image.sprite = "stretched:session/icons/victory.png"; diff --git a/binaries/data/mods/public/gui/session/diplomacy/DiplomacyDialog.js b/binaries/data/mods/public/gui/session/diplomacy/DiplomacyDialog.js new file mode 100644 index 0000000000..23a7563353 --- /dev/null +++ b/binaries/data/mods/public/gui/session/diplomacy/DiplomacyDialog.js @@ -0,0 +1,89 @@ +/** + * This class is concerned with opening, closing and resizing the diplomacy dialog and + * relaying events to the classes that update individual elements of the dialog. + */ +class DiplomacyDialog +{ + constructor(diplomacyColors) + { + this.diplomacyDialogCeasefireCounter = new DiplomacyDialogCeasefireCounter(); + this.diplomacyDialogColorsButton = new DiplomacyDialogColorsButton(diplomacyColors); + this.diplomacyDialogPlayerControlManager = undefined; + + this.diplomacyDialogPanel = Engine.GetGUIObjectByName("diplomacyDialogPanel"); + Engine.GetGUIObjectByName("diplomacyClose").onPress = this.close.bind(this); + } + + onPlayerInit() + { + this.diplomacyDialogPlayerControlManager = new DiplomacyDialogPlayerControlManager(); + this.resize(); + } + + onSpyResponse(notification, player) + { + this.diplomacyDialogPlayerControlManager.onSpyResponse(notification, player); + } + + update() + { + if (!this.isOpen()) + return; + + if (g_ViewedPlayer >= 1) + this.updatePanels(); + else + this.close(); + } + + updatePanels() + { + this.diplomacyDialogCeasefireCounter.update(); + this.diplomacyDialogColorsButton.update(); + this.diplomacyDialogPlayerControlManager.update(); + } + + open() + { + closeOpenDialogs(); + + if (g_ViewedPlayer < 1) + return; + + this.updatePanels(); + this.diplomacyDialogPanel.hidden = false; + } + + close() + { + this.diplomacyDialogPanel.hidden = true; + } + + isOpen() + { + return !this.diplomacyDialogPanel.hidden; + } + + toggle() + { + let open = this.isOpen(); + + closeOpenDialogs(); + + if (!open) + this.open(); + } + + resize() + { + let widthOffset = DiplomacyDialogPlayerControl.prototype.TributeButtonManager.getWidthOffset() / 2; + let heightOffset = DiplomacyDialogPlayerControl.prototype.DiplomacyPlayerText.getHeightOffset() / 2; + + let size = this.diplomacyDialogPanel.size; + size.left -= widthOffset; + size.right += widthOffset; + size.top -= heightOffset; + size.bottom += heightOffset; + this.diplomacyDialogPanel.size = size; + } +} diff --git a/binaries/data/mods/public/gui/session/diplomacy_window.xml b/binaries/data/mods/public/gui/session/diplomacy/DiplomacyDialog.xml similarity index 94% rename from binaries/data/mods/public/gui/session/diplomacy_window.xml rename to binaries/data/mods/public/gui/session/diplomacy/DiplomacyDialog.xml index 20cf482166..6c00abf1ad 100644 --- a/binaries/data/mods/public/gui/session/diplomacy_window.xml +++ b/binaries/data/mods/public/gui/session/diplomacy/DiplomacyDialog.xml @@ -55,11 +55,12 @@