summaryrefslogtreecommitdiff
path: root/src/genworld.cpp
diff options
context:
space:
mode:
authorfrosch <frosch@openttd.org>2010-06-05 13:32:42 +0000
committerfrosch <frosch@openttd.org>2010-06-05 13:32:42 +0000
commit9e53f1e004bf8e65f268b8854a6eb08229e3f2ed (patch)
treefa373b8ec4b6089ac9c1e51f168d44434df8c238 /src/genworld.cpp
parente852bf154f2af40b3cee1f67bef41a78c2056de5 (diff)
downloadopenttd-9e53f1e004bf8e65f268b8854a6eb08229e3f2ed.tar.xz
(svn r19933) -Fix [FS#3804]: Keep _current_company and _local_company in sync during GUI operation.
Diffstat (limited to 'src/genworld.cpp')
-rw-r--r--src/genworld.cpp11
1 files changed, 8 insertions, 3 deletions
diff --git a/src/genworld.cpp b/src/genworld.cpp
index 3b0f2260d..e433fea33 100644
--- a/src/genworld.cpp
+++ b/src/genworld.cpp
@@ -34,6 +34,7 @@
#include "town.h"
#include "newgrf.h"
#include "core/random_func.hpp"
+#include "core/backup_type.hpp"
#include "table/sprites.h"
@@ -96,6 +97,9 @@ static void CleanupGeneration()
*/
static void _GenerateWorld(void *)
{
+ /* Make sure everything is done via OWNER_NONE. */
+ Backup<CompanyByte> _cur_company(_current_company, OWNER_NONE, FILE_LINE);
+
try {
_generating_world = true;
_genworld_mapgen_mutex->BeginCritical();
@@ -132,6 +136,7 @@ static void _GenerateWorld(void *)
/* only generate towns, tree and industries in newgame mode. */
if (_game_mode != GM_EDITOR) {
if (!GenerateTowns(_settings_game.economy.town_layout)) {
+ _cur_company.Restore();
HandleGeneratingWorldAbortion();
return;
}
@@ -164,7 +169,8 @@ static void _GenerateWorld(void *)
}
ResetObjectToPlace();
- _local_company = _gw.lc;
+ _cur_company.Trash();
+ _current_company = _local_company = _gw.lc;
SetGeneratingWorldProgress(GWP_GAME_START, 1);
/* Call any callback */
@@ -185,6 +191,7 @@ static void _GenerateWorld(void *)
SaveOrLoad(name, SL_SAVE, AUTOSAVE_DIR);
}
} catch (...) {
+ if (_cur_company.IsValid()) _cur_company.Restore();
_generating_world = false;
_genworld_mapgen_mutex->EndCritical();
throw;
@@ -287,8 +294,6 @@ void GenerateWorld(GenWorldMode mode, uint size_x, uint size_y, bool reset_setti
/* This disables some commands and stuff */
SetLocalCompany(COMPANY_SPECTATOR);
- /* Make sure everything is done via OWNER_NONE */
- _current_company = OWNER_NONE;
/* Set the date before loading sprites as some newgrfs check it */
SetDate(ConvertYMDToDate(_settings_game.game_creation.starting_year, 0, 1));