forked from 0ad/0ad
Gallaecio
e05c8263c5
It includes a marvelous language selection menu developed by Yves. It also includes the introduction of a sprintf implementation for JavaScript, as well as translation helper functions that use JavaScript-side translation caching. This patch includes code by Yves, sanderd17, leper and Gallaecio. Ref #67 This was SVN commit r14954.
109 lines
3.2 KiB
JavaScript
109 lines
3.2 KiB
JavaScript
|
|
var g_Descriptions;
|
|
var 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];
|
|
}
|
|
}
|
|
|
|
function init(data)
|
|
{
|
|
if (data)
|
|
{
|
|
if (data.savedGameData)
|
|
savedGameData = data.savedGameData;
|
|
}
|
|
|
|
var gameSelection = Engine.GetGUIObjectByName("gameSelection");
|
|
Engine.GetGUIObjectByName("deleteGameButton").enabled = false;
|
|
|
|
var savedGames = Engine.GetSavedGames();
|
|
if (savedGames.length == 0)
|
|
{
|
|
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) ];
|
|
|
|
gameSelection.list = gameListLabels;
|
|
gameSelection.list_data = gameListIDs;
|
|
gameSelection.selected = -1;
|
|
}
|
|
|
|
function saveGame()
|
|
{
|
|
var gameSelection = Engine.GetGUIObjectByName("gameSelection");
|
|
var gameLabel = gameSelection.list[gameSelection.selected];
|
|
var gameID = gameSelection.list_data[gameSelection.selected];
|
|
var desc = Engine.GetGUIObjectByName("saveGameDesc").caption;
|
|
var name = gameID ? gameID : "savegame";
|
|
|
|
if (gameSelection.selected != -1)
|
|
{
|
|
// Ask for confirmation
|
|
var btCaptions = [translate("Yes"), translate("No")];
|
|
var btCode = [function(){ reallySaveGame(name, desc, false); }, null];
|
|
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);
|
|
}
|
|
|
|
function reallySaveGame(name, desc, nameIsPrefix)
|
|
{
|
|
if (nameIsPrefix)
|
|
Engine.SaveGamePrefix(name, desc, savedGameData);
|
|
else
|
|
Engine.SaveGame(name, desc, savedGameData);
|
|
|
|
closeSave();
|
|
}
|
|
|
|
function closeSave()
|
|
{
|
|
Engine.PopGuiPageCB(0);
|
|
}
|
|
|
|
function deleteGame()
|
|
{
|
|
var gameSelection = Engine.GetGUIObjectByName("gameSelection");
|
|
var gameLabel = gameSelection.list[gameSelection.selected];
|
|
var gameID = gameSelection.list_data[gameSelection.selected];
|
|
|
|
// Ask for confirmation
|
|
var btCaptions = [translate("Yes"), translate("No")];
|
|
var btCode = [function(){ reallyDeleteGame(gameID); }, null];
|
|
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);
|
|
}
|
|
|
|
function reallyDeleteGame(gameID)
|
|
{
|
|
if (!Engine.DeleteSavedGame(gameID))
|
|
error(sprintf("Could not delete saved game '%(id)s'", { id: gameID }));
|
|
|
|
// Run init again to refresh saved game list
|
|
init();
|
|
}
|
|
|
|
// HACK: Engine.SaveGame* expects this function to be defined on the current page.
|
|
// That's why we have to pass the data to this page even if we don't need it.
|
|
function getSavedGameData()
|
|
{
|
|
return savedGameData;
|
|
}
|