(svn r23609) -Add: save/load all GameScript related material

This commit is contained in:
truebrain
2011-12-19 20:56:34 +00:00
parent dba90d725c
commit 5d4b2519a4
11 changed files with 243 additions and 14 deletions

View File

@@ -33,6 +33,11 @@ public:
*/
static void Initialize();
/**
* Start up a new GameScript.
*/
static void StartNew();
/**
* Uninitialize the Game system.
*/
@@ -51,6 +56,16 @@ public:
static void Rescan();
static void ResetConfig();
/**
* Save data from a GameScript to a savegame.
*/
static void Save();
/**
* Load data for a GameScript from a savegame.
*/
static void Load(int version);
/** Wrapper function for GameScanner::GetConsoleList */
static char *GetConsoleList(char *p, const char *last, bool newest_only = false);
/** Wrapper function for GameScanner::GetInfoList */

View File

@@ -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<CompanyByte> 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<CompanyByte> 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<CompanyByte> 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<CompanyByte> 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);