From f239a6140616340854b2330b75f44abad01ae0a2 Mon Sep 17 00:00:00 2001 From: truebrain Date: Mon, 19 Dec 2011 20:56:34 +0000 Subject: (svn r23609) -Add: save/load all GameScript related material --- src/game/game_core.cpp | 54 +++++++++++++++++++++++++++++++++++++------------- 1 file changed, 40 insertions(+), 14 deletions(-) (limited to 'src/game/game_core.cpp') diff --git a/src/game/game_core.cpp b/src/game/game_core.cpp index 22898a3d8..fa63c42e9 100644 --- a/src/game/game_core.cpp +++ b/src/game/game_core.cpp @@ -57,26 +57,29 @@ Game::scanner = new GameScannerInfo(); Game::scanner->Initialize(); } +} - if (Game::instance == NULL) { - /* Clients shouldn't start GameScripts */ - if (_networking && !_network_server) return; +/* static */ void Game::StartNew() +{ + if (Game::instance != NULL) return; - GameConfig *config = GameConfig::GetConfig(); - GameInfo *info = config->GetInfo(); - if (info == NULL) return; + /* Clients shouldn't start GameScripts */ + if (_networking && !_network_server) return; - Backup cur_company(_current_company, FILE_LINE); - cur_company.Change(OWNER_DEITY); + GameConfig *config = GameConfig::GetConfig(); + GameInfo *info = config->GetInfo(); + if (info == NULL) return; - Game::info = info; - Game::instance = new GameInstance(); - Game::instance->Initialize(info); + Backup cur_company(_current_company, FILE_LINE); + cur_company.Change(OWNER_DEITY); - cur_company.Restore(); + Game::info = info; + Game::instance = new GameInstance(); + Game::instance->Initialize(info); - InvalidateWindowData(WC_AI_DEBUG, 0, -1); - } + cur_company.Restore(); + + InvalidateWindowData(WC_AI_DEBUG, 0, -1); } /* static */ void Game::Uninitialize(bool keepConfig) @@ -138,6 +141,29 @@ } +/* static */ void Game::Save() +{ + if (Game::instance != NULL && (!_networking || _network_server)) { + Backup cur_company(_current_company, OWNER_DEITY, FILE_LINE); + Game::instance->Save(); + cur_company.Restore(); + } else { + GameInstance::SaveEmpty(); + } +} + +/* static */ void Game::Load(int version) +{ + if (Game::instance != NULL && (!_networking || _network_server)) { + Backup cur_company(_current_company, OWNER_DEITY, FILE_LINE); + Game::instance->Load(version); + cur_company.Restore(); + } else { + /* Read, but ignore, the load data */ + GameInstance::LoadEmpty(); + } +} + /* static */ char *Game::GetConsoleList(char *p, const char *last, bool newest_only) { return Game::scanner->GetConsoleList(p, last, newest_only); -- cgit v1.2.3-54-g00ecf