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.
This commit is contained in:
elexis
2016-05-12 12:14:22 +00:00
parent 518ad5380d
commit 366085e037
2 changed files with 114 additions and 105 deletions
@@ -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();
@@ -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();