public bool SaveGameFiles()
{
if (AttemptToSaveGame != null)
{
bool allowSave = true;
AttemptToSaveGame(ref allowSave);
if (!allowSave)
{
return false;
}
}
PreSaveGameEventArgs evArgs = new PreSaveGameEventArgs();
if (PreSaveGame != null)
{
PreSaveGame(evArgs);
}
foreach (Script script in _game.RootScriptFolder.AllScriptsFlat)
{
if (script.Modified)
{
if (AttemptToGetWriteAccess(script.FileName))
{
script.SaveToDisk();
}
}
}
List<string> filesToCheck = new List<string>();
filesToCheck.Add(USER_DATA_FILE_NAME);
filesToCheck.Add(GAME_FILE_NAME);
if (Factory.NativeProxy.AreSpritesModified)
{
filesToCheck.Add(SPRITE_FILE_NAME);
filesToCheck.Add(SPRITE_INDEX_FILE_NAME);
}
if (!AttemptToGetWriteAccess(filesToCheck))
{
return false;
}
if (!IsEnoughSpaceFreeOnDisk(MINIMUM_BYTES_FREE_TO_SAVE))
{
Factory.GUIController.ShowMessage("The disk is full. Please clear some space then try again", MessageBoxIcon.Warning);
return false;
}
// Make sure the game's name in the Recent list is updated, in
// case the user has just changed it
this.RecentGames.AddRecentGame(_game.DirectoryPath, _game.Settings.GameName);
bool result = (bool)BusyDialog.Show("Please wait while your files are saved...", new BusyDialog.ProcessingHandler(SaveGameFilesProcess), null);
if (!evArgs.SaveSucceeded)
{
result = false;
}
return result;
}