Cloudsave support

This commit is contained in:
pelya
2014-08-26 02:04:54 +03:00
parent 69a31cde7b
commit be3f236eaf
5 changed files with 57 additions and 4 deletions

View File

@@ -293,7 +293,7 @@ static const char * const _subdirs[] = {
"game" PATHSEP, "game" PATHSEP,
"game" PATHSEP "library" PATHSEP, "game" PATHSEP "library" PATHSEP,
#ifdef __ANDROID__ #ifdef __ANDROID__
"../../../../../../Pictures/", "screenshot" PATHSEP,
#else #else
"screenshot" PATHSEP, "screenshot" PATHSEP,
#endif #endif

View File

@@ -35,12 +35,16 @@
#include "table/strings.h" #include "table/strings.h"
#include "safeguards.h" #include "safeguards.h"
#ifdef __ANDROID__
#include <SDL_android.h>
#endif
SaveLoadDialogMode _saveload_mode; SaveLoadDialogMode _saveload_mode;
LoadCheckData _load_check_data; ///< Data loaded from save during SL_LOAD_CHECK. LoadCheckData _load_check_data; ///< Data loaded from save during SL_LOAD_CHECK.
static bool _fios_path_changed; static bool _fios_path_changed;
static bool _savegame_sort_dirty; static bool _savegame_sort_dirty;
static const char *NETWORK_SAVE_FILENAME = "network-save.sav";
/** /**
@@ -285,6 +289,7 @@ public:
this->FinishInitNested(0); this->FinishInitNested(0);
this->LowerWidget(WID_SL_DRIVES_DIRECTORIES_LIST); this->LowerWidget(WID_SL_DRIVES_DIRECTORIES_LIST);
if (mode == SLD_SAVE_GAME) this->SetWidgetLoweredState(WID_SL_SAVE_NETWORK_BUTTON, _settings_client.gui.save_to_network);
/* pause is only used in single-player, non-editor mode, non-menu mode. It /* pause is only used in single-player, non-editor mode, non-menu mode. It
* will be unpaused in the WE_DESTROY event handler. */ * will be unpaused in the WE_DESTROY event handler. */
@@ -627,6 +632,32 @@ public:
/* Note, this is also called via the OSK; and we need to lower the button. */ /* Note, this is also called via the OSK; and we need to lower the button. */
this->HandleButtonClick(WID_SL_SAVE_GAME); this->HandleButtonClick(WID_SL_SAVE_GAME);
break; break;
case WID_SL_SAVE_NETWORK_BUTTON:
_settings_client.gui.save_to_network = !_settings_client.gui.save_to_network;
this->SetWidgetLoweredState(WID_SL_SAVE_NETWORK_BUTTON, _settings_client.gui.save_to_network);
this->SetDirty();
break;
case WID_SL_LOAD_NETWORK_BUTTON: {
char savePath[PATH_MAX];
FiosMakeSavegameName(savePath, NETWORK_SAVE_FILENAME, sizeof(savePath));
#ifdef __ANDROID__
if (!SDL_ANDROID_CloudLoad(savePath, NULL, "OpenTTD")) {
break;
}
#endif
_load_check_data.Clear();
SaveOrLoadResult res = SaveOrLoad(savePath, SL_LOAD_CHECK, SAVE_DIR, false);
if (res == SL_OK && !_load_check_data.HasErrors()) {
strecpy(_file_to_saveload.name, savePath, lastof(_file_to_saveload.name));
strecpy(_file_to_saveload.title, "", lastof(_file_to_saveload.title));
if (!_load_check_data.HasNewGrfs() || _load_check_data.grf_compatibility != GLC_NOT_FOUND || _settings_client.gui.UserIsAllowedToChangeNewGRFs()) {
_switch_mode = (_game_mode == GM_EDITOR) ? SM_LOAD_SCENARIO : SM_LOAD_GAME;
}
}
break;
}
} }
} }

View File

@@ -69,6 +69,9 @@
#include <stdarg.h> #include <stdarg.h>
#include "safeguards.h" #include "safeguards.h"
#ifdef __ANDROID__
#include <SDL_android.h>
#endif
void CallLandscapeTick(); void CallLandscapeTick();
void IncreaseDate(); void IncreaseDate();
@@ -81,6 +84,8 @@ bool HandleBootstrap();
extern Company *DoStartupNewCompany(bool is_ai, CompanyID company = INVALID_COMPANY); extern Company *DoStartupNewCompany(bool is_ai, CompanyID company = INVALID_COMPANY);
extern void ShowOSErrorBox(const char *buf, bool system); extern void ShowOSErrorBox(const char *buf, bool system);
extern char *_config_file; extern char *_config_file;
const char *NETWORK_SAVE_SCREENSHOT_FILE = "OpenTTD-network-save";
const char *NETWORK_SAVE_SCREENSHOT_FILE_PNG = "OpenTTD-network-save.png";
/** /**
* Error handling for fatal user errors. * Error handling for fatal user errors.
@@ -1161,6 +1166,23 @@ void SwitchToMode(SwitchMode new_mode)
ShowErrorMessage(STR_JUST_RAW_STRING, INVALID_STRING_ID, WL_ERROR); ShowErrorMessage(STR_JUST_RAW_STRING, INVALID_STRING_ID, WL_ERROR);
} else { } else {
DeleteWindowById(WC_SAVELOAD, 0); DeleteWindowById(WC_SAVELOAD, 0);
#ifdef __ANDROID__
if (_settings_client.gui.save_to_network) {
char screenshotFile[PATH_MAX] = "";
const char* lastPart = strrchr(_file_to_saveload.name, PATHSEPCHAR);
if (!lastPart) {
lastPart = _file_to_saveload.name;
} else {
lastPart++;
}
MakeScreenshot(SC_VIEWPORT, NETWORK_SAVE_SCREENSHOT_FILE);
FioFindFullPath(screenshotFile, sizeof(screenshotFile), SCREENSHOT_DIR, NETWORK_SAVE_SCREENSHOT_FILE_PNG);
int ret = SDL_ANDROID_CloudSave(_file_to_saveload.name, lastPart, "OpenTTD", lastPart, screenshotFile, _date);
if (_settings_client.gui.save_to_network == 2) {
_settings_client.gui.save_to_network = ret ? 1 : 0;
}
}
#endif
} }
break; break;

View File

@@ -871,7 +871,7 @@ bool MakeScreenshot(ScreenshotType t, const char *name)
if (ret) { if (ret) {
SetDParamStr(0, _screenshot_name); SetDParamStr(0, _screenshot_name);
ShowErrorMessage(STR_MESSAGE_SCREENSHOT_SUCCESSFULLY, INVALID_STRING_ID, WL_WARNING); //ShowErrorMessage(STR_MESSAGE_SCREENSHOT_SUCCESSFULLY, INVALID_STRING_ID, WL_WARNING); // No need for message when we're doing cloudsave
} else { } else {
ShowErrorMessage(STR_ERROR_SCREENSHOT_FAILED, INVALID_STRING_ID, WL_ERROR); ShowErrorMessage(STR_ERROR_SCREENSHOT_FAILED, INVALID_STRING_ID, WL_ERROR);
} }

View File

@@ -19,7 +19,7 @@ static const char *_locale_units = "imperial|metric|si";
static const char *_town_names = "english|french|german|american|latin|silly|swedish|dutch|finnish|polish|slovak|norwegian|hungarian|austrian|romanian|czech|swiss|danish|turkish|italian|catalan"; static const char *_town_names = "english|french|german|american|latin|silly|swedish|dutch|finnish|polish|slovak|norwegian|hungarian|austrian|romanian|czech|swiss|danish|turkish|italian|catalan";
static const char *_climates = "temperate|arctic|tropic|toyland"; static const char *_climates = "temperate|arctic|tropic|toyland";
static const char *_autosave_interval = "off|monthly|quarterly|half year|yearly"; static const char *_autosave_interval = "off|monthly|quarterly|half year|yearly";
static const char *_save_to_network = "ask|enabled|disabled"; static const char *_save_to_network = "disabled|enabled|ask";
static const char *_roadsides = "left|right"; static const char *_roadsides = "left|right";
static const char *_savegame_date = "long|short|iso"; static const char *_savegame_date = "long|short|iso";
#ifdef ENABLE_NETWORK #ifdef ENABLE_NETWORK
@@ -178,7 +178,7 @@ cat = SC_BASIC
var = gui.save_to_network var = gui.save_to_network
type = SLE_UINT8 type = SLE_UINT8
flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
def = 0 def = 2
max = 2 max = 2
full = _save_to_network full = _save_to_network
cat = SC_BASIC cat = SC_BASIC