Changeset View
Changeset View
Standalone View
Standalone View
binaries/data/mods/public/gui/loadgame/load.js
var g_SavegameWriter; | |||||
var g_SavedGamesMetadata = []; | var g_SavedGamesMetadata = []; | ||||
/** | /** | ||||
* Needed for formatPlayerInfo to show the player civs in the details. | * Needed for formatPlayerInfo to show the player civs in the details. | ||||
*/ | */ | ||||
const g_CivData = loadCivData(false, false); | const g_CivData = loadCivData(false, false); | ||||
function init() | function init(data) | ||||
{ | |||||
let save = Engine.IsGameStarted(); | |||||
if (save) | |||||
g_SavegameWriter = new SavegameWriter(data); | |||||
let confirmButton = Engine.GetGUIObjectByName("confirmButton"); | |||||
confirmButton.caption = save ? translate("Save") : translate("Load"); | |||||
confirmButton.onPress = save ? () => { g_SavegameWriter.saveGame(); } : loadGame; | |||||
Engine.GetGUIObjectByName("title").caption = save ? translate("Save Game") : translate("Load Game") | |||||
Engine.GetGUIObjectByName("saveGameDesc").hidden = !save; | |||||
updateSavegameList(); | |||||
let gameSelection = Engine.GetGUIObjectByName("gameSelection"); | |||||
if (!save && gameSelection.list.length) | |||||
gameSelection.selected = 0; | |||||
else | |||||
selectionChanged(); | |||||
} | |||||
function updateSavegameList() | |||||
{ | { | ||||
let savedGames = Engine.GetSavedGames(); | let savedGames = Engine.GetSavedGames(); | ||||
// Get current game version and loaded mods | // Get current game version and loaded mods | ||||
let engineInfo = Engine.GetEngineInfo(); | let engineInfo = Engine.GetEngineInfo(); | ||||
if (Engine.GetGUIObjectByName("compatibilityFilter").checked) | if (Engine.GetGUIObjectByName("compatibilityFilter").checked) | ||||
savedGames = savedGames.filter(game => isCompatibleSavegame(game.metadata, engineInfo)); | savedGames = savedGames.filter(game => isCompatibleSavegame(game.metadata, engineInfo)); | ||||
let gameSelection = Engine.GetGUIObjectByName("gameSelection"); | let gameSelection = Engine.GetGUIObjectByName("gameSelection"); | ||||
gameSelection.enabled = !!savedGames.length; | gameSelection.enabled = !!savedGames.length; | ||||
gameSelection.onSelectionChange = selectionChanged; | |||||
gameSelection.onSelectionColumnChange = updateSavegameList; | |||||
gameSelection.onMouseLeftDoubleClickItem = loadGame; | |||||
Engine.GetGUIObjectByName("gameSelectionFeedback").hidden = !!savedGames.length; | Engine.GetGUIObjectByName("gameSelectionFeedback").hidden = !!savedGames.length; | ||||
let selectedGameId = gameSelection.list_data[gameSelection.selected]; | let selectedGameId = gameSelection.list_data[gameSelection.selected]; | ||||
// Save metadata for the detailed view | // Save metadata for the detailed view | ||||
g_SavedGamesMetadata = savedGames.map(game => { | g_SavedGamesMetadata = savedGames.map(game => { | ||||
game.metadata.id = game.id; | game.metadata.id = game.id; | ||||
return game.metadata; | return game.metadata; | ||||
▲ Show 20 Lines • Show All 54 Lines • ▼ Show 20 Lines | function updateSavegameList() | ||||
gameSelection.list = g_SavedGamesMetadata.map(metadata => generateSavegameLabel(metadata, engineInfo)); | gameSelection.list = g_SavedGamesMetadata.map(metadata => generateSavegameLabel(metadata, engineInfo)); | ||||
gameSelection.list_data = g_SavedGamesMetadata.map(metadata => metadata.id); | gameSelection.list_data = g_SavedGamesMetadata.map(metadata => metadata.id); | ||||
let selectedGameIndex = g_SavedGamesMetadata.findIndex(metadata => metadata.id == selectedGameId); | let selectedGameIndex = g_SavedGamesMetadata.findIndex(metadata => metadata.id == selectedGameId); | ||||
if (selectedGameIndex != -1) | if (selectedGameIndex != -1) | ||||
gameSelection.selected = selectedGameIndex; | gameSelection.selected = selectedGameIndex; | ||||
else if (gameSelection.selected >= g_SavedGamesMetadata.length) // happens when deleting the last saved game | else if (gameSelection.selected >= g_SavedGamesMetadata.length) // happens when deleting the last saved game | ||||
gameSelection.selected = g_SavedGamesMetadata.length - 1; | gameSelection.selected = g_SavedGamesMetadata.length - 1; | ||||
else if (gameSelection.selected == -1 && g_SavedGamesMetadata.length) | |||||
gameSelection.selected = 0; | |||||
selectionChanged(); | |||||
Silier: is safe to remove selectionChanged?
in all if branches selected item is changed | |||||
elexisAuthorUnsubmitted Done Inline ActionsselectionChanged was called twice before in most cases, because its also triggered upon selected = foo. (due to the onSelection = ... handler). Its relevant to be called if there are no savegames in order to disable the "Load" button. elexis: `selectionChanged` was called twice before in most cases, because its also triggered upon… | |||||
Engine.GetGUIObjectByName("deleteGameButton").tooltip = deleteTooltip(); | Engine.GetGUIObjectByName("deleteGameButton").tooltip = deleteTooltip(); | ||||
} | } | ||||
function selectionChanged() | function selectionChanged() | ||||
{ | { | ||||
let metadata = g_SavedGamesMetadata[Engine.GetGUIObjectByName("gameSelection").selected]; | let metadata = g_SavedGamesMetadata[Engine.GetGUIObjectByName("gameSelection").selected]; | ||||
Engine.GetGUIObjectByName("invalidGame").hidden = !!metadata; | Engine.GetGUIObjectByName("invalidGame").hidden = !!metadata; | ||||
Engine.GetGUIObjectByName("validGame").hidden = !metadata; | Engine.GetGUIObjectByName("validGame").hidden = !metadata; | ||||
Engine.GetGUIObjectByName("loadGameButton").enabled = !!metadata; | Engine.GetGUIObjectByName("confirmButton").enabled = !!metadata || Engine.IsGameStarted(); | ||||
Engine.GetGUIObjectByName("deleteGameButton").enabled = !!metadata; | Engine.GetGUIObjectByName("deleteGameButton").enabled = !!metadata; | ||||
if (!metadata) | if (!metadata) | ||||
return; | return; | ||||
Engine.GetGUIObjectByName("savedMapName").caption = translate(metadata.initAttributes.settings.Name); | Engine.GetGUIObjectByName("savedMapName").caption = translate(metadata.initAttributes.settings.Name); | ||||
Engine.GetGUIObjectByName("savedInfoPreview").sprite = getMapPreviewImage( | Engine.GetGUIObjectByName("savedInfoPreview").sprite = getMapPreviewImage( | ||||
getMapDescriptionAndPreview(metadata.initAttributes.mapType, metadata.initAttributes.map, metadata.initAttributes).preview); | getMapDescriptionAndPreview(metadata.initAttributes.mapType, metadata.initAttributes.map, metadata.initAttributes).preview); | ||||
▲ Show 20 Lines • Show All 91 Lines • Show Last 20 Lines |
Wildfire Games · Phabricator
is safe to remove selectionChanged?
in all if branches selected item is changed