From 366085e037e9cafd2d1190372a658e8285d36402 Mon Sep 17 00:00:00 2001 From: elexis Date: Thu, 12 May 2016 12:14:22 +0000 Subject: [PATCH] Savegame cleanup. Simplify the error message for savegames with different mods enabled. Remove deprecated for-each with map and for-of. Simplify code that used conditional operator by replacing it with logical operators. Add linebreaks. Quote object keys. Early return. Prefix global with g_. Remove unneeded sprintf in error messages. Capitalize comments. This was SVN commit r18160. --- .../data/mods/public/gui/savedgames/load.js | 150 +++++++++--------- .../data/mods/public/gui/savedgames/save.js | 69 ++++---- 2 files changed, 114 insertions(+), 105 deletions(-) diff --git a/binaries/data/mods/public/gui/savedgames/load.js b/binaries/data/mods/public/gui/savedgames/load.js index 38b4389310..83f64b6298 100644 --- a/binaries/data/mods/public/gui/savedgames/load.js +++ b/binaries/data/mods/public/gui/savedgames/load.js @@ -1,11 +1,11 @@ -var gameMetadatas = []; +var g_SavedGamesMetadata = []; function init() { var gameSelection = Engine.GetGUIObjectByName("gameSelection"); - var savedGames = Engine.GetSavedGames(); - if (savedGames.length == 0) + var savedGames = Engine.GetSavedGames().sort(sortDecreasingDate); + if (!savedGames.length) { gameSelection.list = [translate("No saved games found")]; gameSelection.selected = 0; @@ -14,20 +14,17 @@ function init() return; } - savedGames.sort(sortDecreasingDate); - - // get current game version and loaded mods + // Get current game version and loaded mods var engineInfo = Engine.GetEngineInfo(); - var gameListIds = [ game.id for each (game in savedGames) ]; - var gameListLabels = [ generateLabel(game.metadata, engineInfo) for each (game in savedGames) ]; - gameMetadatas = [ game.metadata for each (game in savedGames) ]; + g_SavedGamesMetadata = savedGames.map(game => game.metadata); - gameSelection.list = gameListLabels; - gameSelection.list_data = gameListIds; - if (gameSelection.selected == -1) + gameSelection.list = savedGames.map(game => generateLabel(game.metadata, engineInfo)); + gameSelection.list_data = savedGames.map(game => game.id); + + if (gameSelection.selected == -1) gameSelection.selected = 0; - else if (gameSelection.selected >= savedGames.length) // happen when we delete the last saved game + else if (gameSelection.selected >= savedGames.length) // happens when deleting the last saved game gameSelection.selected = savedGames.length - 1; } @@ -36,60 +33,60 @@ function loadGame() var gameSelection = Engine.GetGUIObjectByName("gameSelection"); var gameId = gameSelection.list_data[gameSelection.selected]; var gameLabel = gameSelection.list[gameSelection.selected]; - var metadata = gameMetadatas[gameSelection.selected]; + var metadata = g_SavedGamesMetadata[gameSelection.selected]; - // check game compatibility before really loading it + // Check compatibility before really loading it var engineInfo = Engine.GetEngineInfo(); var sameMods = hasSameMods(metadata, engineInfo); var sameEngineVersion = hasSameEngineVersion(metadata, engineInfo); var sameSavegameVersion = hasSameSavegameVersion(metadata, engineInfo); - if (!sameEngineVersion || !sameSavegameVersion || !sameMods) + + if (sameEngineVersion && sameSavegameVersion && sameMods) { - // version not compatible ... ask for confirmation - var btCaptions = [translate("No"), translate("Yes")]; - var btCode = [init, function(){ reallyLoadGame(gameId); }]; - var message = translate("This saved game may not be compatible:"); - - if (!sameEngineVersion) - { - if (metadata.engine_version) - message += "\n" + sprintf(translate("It needs 0 A.D. version %(requiredVersion)s, while you are running version %(currentVersion)s."), { - requiredVersion: metadata.engine_version, - currentVersion: engineInfo.engine_version - }); - else - message += "\n" + translate("It needs an older version of 0 A.D."); - } - - if (!sameSavegameVersion) - message += "\n" + sprintf(translate("It needs 0 A.D. savegame version %(requiredVersion)s, while you have savegame version %(currentVersion)s."), { - requiredVersion: metadata.version_major, - currentVersion: engineInfo.version_major - }); - - if (!sameMods) - { - if (!metadata.mods) // only for backwards compatibility with previous saved games - metadata.mods = []; - if (metadata.mods.length == 0) - message += "\n" + sprintf(translate("It does not need any mod while you are running with \"%(currentMod)s\"."), { - currentMod: engineInfo.mods.join() - }); - else if (engineInfo.mods.length == 0) - message += "\n" + sprintf(translate("It needs the mod \"%(requiredMod)s\" while you are running without a mod."), { - requiredMod: metadata.mods.join() - }); - else - message += "\n" + sprintf(translate("It needs the mod \"%(requiredMod)s\" while you are running with \"%(currentMod)s\"."), { - requiredMod: metadata.mods.join(), - currentMod: engineInfo.mods.join() - }); - } - message += "\n" + translate("Do you still want to proceed?"); - messageBox(500, 250, message, translate("Warning"), 0, btCaptions, btCode); - } - else reallyLoadGame(gameId); + return; + } + + // Version not compatible ... ask for confirmation + var message = translate("This saved game may not be compatible:"); + + if (!sameEngineVersion) + { + if (metadata.engine_version) + message += "\n" + sprintf(translate("It needs 0 A.D. version %(requiredVersion)s, while you are running version %(currentVersion)s."), { + "requiredVersion": metadata.engine_version, + "currentVersion": engineInfo.engine_version + }); + else + message += "\n" + translate("It needs an older version of 0 A.D."); + } + + if (!sameSavegameVersion) + message += "\n" + sprintf(translate("It needs 0 A.D. savegame version %(requiredVersion)s, while you have savegame version %(currentVersion)s."), { + "requiredVersion": metadata.version_major, + "currentVersion": engineInfo.version_major + }); + + if (!sameMods) + { + if (!metadata.mods) + metadata.mods = []; + + message += translate("The savegame needs a different set of mods:") + "\n"; + errMsg += sprintf(translate("Required: %(mods)s"), { "mods": metadata.mods.join(translate(", ")) }) + "\n"; + errMsg += sprintf(translate("Active: %(mods)s"), { "mods": engineInfo.mods.join(translate(", ")) }); + } + + message += "\n" + translate("Do you still want to proceed?"); + + messageBox( + 500, 250, + message, + translate("Warning"), + 0, + [translate("No"), translate("Yes")], + [init, function(){ reallyLoadGame(gameId); }] + ); } function reallyLoadGame(gameId) @@ -99,18 +96,17 @@ function reallyLoadGame(gameId) { // Probably the file wasn't found // Show error and refresh saved game list - error(sprintf("Could not load saved game '%(id)s'", { id: gameId })); + error("Could not load saved game: " + gameId); init(); + return; } - else - { - Engine.SwitchGuiPage("page_loading.xml", { - "attribs": metadata.initAttributes, - "isNetworked" : false, - "playerAssignments": metadata.gui.playerAssignments, - "savedGUIData": metadata.gui - }); - } + + Engine.SwitchGuiPage("page_loading.xml", { + "attribs": metadata.initAttributes, + "isNetworked" : false, + "playerAssignments": metadata.gui.playerAssignments, + "savedGUIData": metadata.gui + }); } function deleteGame() @@ -120,9 +116,15 @@ function deleteGame() var gameID = gameSelection.list_data[gameSelection.selected]; // Ask for confirmation - var btCaptions = [translate("No"), translate("Yes")]; - var btCode = [null, function(){ reallyDeleteGame(gameID); }]; - messageBox(500, 200, sprintf(translate("\"%(label)s\""), { label: gameLabel }) + "\n" + translate("Saved game will be permanently deleted, are you sure?"), translate("DELETE"), 0, btCaptions, btCode); + messageBox( + 500, 200, + sprintf(translate("\"%(label)s\""), { "label": gameLabel }) + "\n" + + translate("Saved game will be permanently deleted, are you sure?"), + translate("DELETE"), + 0, + [translate("No"), translate("Yes")], + [null, function(){ reallyDeleteGame(gameID); }] + ); } function deleteGameWithoutConfirmation() @@ -135,7 +137,7 @@ function deleteGameWithoutConfirmation() function reallyDeleteGame(gameID) { if (!Engine.DeleteSavedGame(gameID)) - error(sprintf("Could not delete saved game '%(id)s'", { id: gameID })); + error("Could not delete saved game: " + gameID); // Run init again to refresh saved game list init(); diff --git a/binaries/data/mods/public/gui/savedgames/save.js b/binaries/data/mods/public/gui/savedgames/save.js index 5cdcfb0f31..055da498c6 100644 --- a/binaries/data/mods/public/gui/savedgames/save.js +++ b/binaries/data/mods/public/gui/savedgames/save.js @@ -1,44 +1,38 @@ - var g_Descriptions; var g_SavedGameData; function selectDescription() { var gameSelection = Engine.GetGUIObjectByName("gameSelection"); - if (gameSelection.selected != -1) - { - Engine.GetGUIObjectByName("deleteGameButton").enabled = true; - var gameID = gameSelection.list_data[gameSelection.selected]; - Engine.GetGUIObjectByName("saveGameDesc").caption = g_Descriptions[gameID]; - } + if (gameSelection.selected == -1) + return; + + var gameID = gameSelection.list_data[gameSelection.selected]; + Engine.GetGUIObjectByName("deleteGameButton").enabled = true; + Engine.GetGUIObjectByName("saveGameDesc").caption = g_Descriptions[gameID]; } function init(data) { - if (data && data.savedGameData) - g_SavedGameData = data.savedGameData; + g_SavedGameData = data && data.savedGameData || undefined; var gameSelection = Engine.GetGUIObjectByName("gameSelection"); Engine.GetGUIObjectByName("deleteGameButton").enabled = false; - var savedGames = Engine.GetSavedGames(); - if (savedGames.length == 0) + var savedGames = Engine.GetSavedGames().sort(sortDecreasingDate); + if (!savedGames.length) { gameSelection.list = [translate("No saved games found")]; gameSelection.selected = -1; return; } - savedGames.sort(sortDecreasingDate); - - var gameListIDs = [ game.id for each (game in savedGames) ]; - var gameListLabels = [ generateLabel(game.metadata) for each (game in savedGames) ]; - g_Descriptions = {}; - [ g_Descriptions[game.id] = (game.metadata.description ? game.metadata.description : "") for each (game in savedGames) ]; + for (let game of savedGames) + g_Descriptions[game.id] = game.metadata.description || ""; - gameSelection.list = gameListLabels; - gameSelection.list_data = gameListIDs; + gameSelection.list = savedGames.map(game => generateLabel(game.metadata)); + gameSelection.list_data = savedGames.map(game => game.id); gameSelection.selected = -1; } @@ -48,17 +42,24 @@ function saveGame() var gameLabel = gameSelection.list[gameSelection.selected]; var gameID = gameSelection.list_data[gameSelection.selected]; var desc = Engine.GetGUIObjectByName("saveGameDesc").caption; - var name = gameID ? gameID : "savegame"; + var name = gameID || "savegame"; - if (gameSelection.selected != -1) + if (gameSelection.selected == -1) { - // Ask for confirmation - var btCaptions = [translate("No"), translate("Yes")]; - var btCode = [null, function(){ reallySaveGame(name, desc, false); }]; - messageBox(500, 200, sprintf(translate("\"%(label)s\""), { label: gameLabel }) + "\n" + translate("Saved game will be permanently overwritten, are you sure?"), translate("OVERWRITE SAVE"), 0, btCaptions, btCode); - } - else reallySaveGame(name, desc, true); + return; + } + + // Ask for confirmation + messageBox( + 500, 200, + sprintf(translate("\"%(label)s\""), { "label": gameLabel }) + "\n" + + translate("Saved game will be permanently overwritten, are you sure?"), + translate("OVERWRITE SAVE"), + 0, + [translate("No"), translate("Yes")], + [null, function(){ reallySaveGame(name, desc, false); }] + ); } function reallySaveGame(name, desc, nameIsPrefix) @@ -83,15 +84,21 @@ function deleteGame() var gameID = gameSelection.list_data[gameSelection.selected]; // Ask for confirmation - var btCaptions = [translate("No"), translate("Yes")]; - var btCode = [null, function(){ reallyDeleteGame(gameID); }]; - messageBox(500, 200, sprintf(translate("\"%(label)s\""), { label: gameLabel }) + "\n" + translate("Saved game will be permanently deleted, are you sure?"), translate("DELETE"), 0, btCaptions, btCode); + messageBox( + 500, 200, + sprintf(translate("\"%(label)s\""), { "label": gameLabel }) + "\n" + + translate("Saved game will be permanently deleted, are you sure?"), + translate("DELETE"), + 0, + [translate("No"), translate("Yes")], + [null, function(){ reallyDeleteGame(gameID); }] + ); } function reallyDeleteGame(gameID) { if (!Engine.DeleteSavedGame(gameID)) - error(sprintf("Could not delete saved game '%(id)s'", { id: gameID })); + error("Could not delete saved game: " + gameID); // Run init again to refresh saved game list init();