summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfrosch <frosch@openttd.org>2014-02-16 17:45:24 +0000
committerfrosch <frosch@openttd.org>2014-02-16 17:45:24 +0000
commit55502341ac4975e2e5bf0661b094fa3d4e7fe890 (patch)
treeb9af05a42afcf280c0141d06090749b666a0717f
parent20785c79fc2437683eb59ebdf98dde0ce1863c2c (diff)
downloadopenttd-55502341ac4975e2e5bf0661b094fa3d4e7fe890.tar.xz
(svn r26346) -Fix [FS#5870]: Call Layouter::ReduceLineCache from GenerateTownName in all cases.
-rw-r--r--src/town_cmd.cpp8
-rw-r--r--src/townname.cpp5
2 files changed, 5 insertions, 8 deletions
diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp
index 7ca11fe31..d3c480af1 100644
--- a/src/town_cmd.cpp
+++ b/src/town_cmd.cpp
@@ -46,7 +46,6 @@
#include "object_base.h"
#include "ai/ai.hpp"
#include "game/game.hpp"
-#include "gfx_layout.h"
#include "table/strings.h"
#include "table/town_land.h"
@@ -1909,13 +1908,6 @@ bool GenerateTowns(TownLayout layout)
* Note that this is really a suggested value, not a required one.
* We would not like the system to lock up just because the user wanted 100 cities on a 64*64 map, would we? */
do {
- if (total % 512 == 0) {
- /* Clear the caches regularly, otherwise it will only be done
- * at the end of the whole cycle when OpenTTD has allocated
- * lots and lots of memory for these essentially caches. */
- Layouter::ReduceLineCache();
- }
-
bool city = (_settings_game.economy.larger_towns != 0 && Chance16(1, _settings_game.economy.larger_towns));
IncreaseGeneratingWorldProgress(GWP_TOWN);
/* Get a unique name for the town. */
diff --git a/src/townname.cpp b/src/townname.cpp
index 136882103..ad9b26fee 100644
--- a/src/townname.cpp
+++ b/src/townname.cpp
@@ -16,6 +16,7 @@
#include "strings_func.h"
#include "core/random_func.hpp"
#include "genworld.h"
+#include "gfx_layout.h"
#include "table/townname.h"
@@ -125,6 +126,10 @@ bool GenerateTownName(uint32 *townnameparts, TownNames *town_names)
* too much). */
TownNameParams par(_settings_game.game_creation.town_name);
+ /* This function is called very often without entering the gameloop
+ * inbetween. So reset layout cache to prevent it from growing too big. */
+ Layouter::ReduceLineCache();
+
for (int i = 1000; i != 0; i--) {
uint32 r = _generating_world ? Random() : InteractiveRandom();
if (!VerifyTownName(r, &par, town_names)) continue;