From 1d606e73921852906d12e0f8b73aa4d40b539130 Mon Sep 17 00:00:00 2001 From: celestar Date: Thu, 27 Apr 2006 11:19:12 +0000 Subject: (svn r4591) -Fix (FS#122) Game no longer errors out when "Many random towns" is selected in the scenario editor. -Side effects: - Removed one global variable from variables.h - Remove an ugly hack for the "many random towns" function --- main_gui.c | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) (limited to 'main_gui.c') diff --git a/main_gui.c b/main_gui.c index fe365e59b..bcd03de08 100644 --- a/main_gui.c +++ b/main_gui.c @@ -1452,7 +1452,8 @@ void CcBuildTown(bool success, TileIndex tile, uint32 p1, uint32 p2) static void PlaceProc_Town(TileIndex tile) { - DoCommandP(tile, 0, 0, CcBuildTown, CMD_BUILD_TOWN | CMD_MSG(STR_0236_CAN_T_BUILD_TOWN_HERE)); + Window *w = FindWindowById(WC_SCEN_TOWN_GEN, 0); + DoCommandP(tile, 1 + FIND_FIRST_BIT(w->click_state >> 7), 0, CcBuildTown, CMD_BUILD_TOWN | CMD_MSG(STR_0236_CAN_T_BUILD_TOWN_HERE)); } @@ -1474,11 +1475,14 @@ static void ScenEditTownGenWndProc(Window *w, WindowEvent *e) { switch (e->event) { case WE_PAINT: - w->click_state = (w->click_state & ~(1<<7 | 1<<8 | 1<<9) ) | (1 << (_new_town_size + 7)); DrawWindowWidgets(w); DrawStringCentered(80, 56, STR_02A5_TOWN_SIZE, 0); break; + case WE_CREATE: + w->click_state = 1 << 8; /* medium town size selected */ + break; + case WE_CLICK: switch (e->click.widget) { case 4: /* new town */ @@ -1489,7 +1493,7 @@ static void ScenEditTownGenWndProc(Window *w, WindowEvent *e) HandleButtonClick(w, 5); _generating_world = true; - t = CreateRandomTown(20); + t = CreateRandomTown(20, 1 + FIND_FIRST_BIT(w->click_state >> 7)); _generating_world = false; if (t == NULL) { @@ -1504,18 +1508,13 @@ static void ScenEditTownGenWndProc(Window *w, WindowEvent *e) HandleButtonClick(w, 6); _generating_world = true; - _game_mode = GM_NORMAL; // little hack to avoid towns of the same size - if (!GenerateTowns()) { - ShowErrorMessage(STR_NO_SPACE_FOR_TOWN, STR_CANNOT_GENERATE_TOWN, 0, 0); - } + if (!GenerateTowns()) ShowErrorMessage(STR_NO_SPACE_FOR_TOWN, STR_CANNOT_GENERATE_TOWN, 0, 0); _generating_world = false; - - _game_mode = GM_EDITOR; break; } case 7: case 8: case 9: - _new_town_size = e->click.widget - 7; + w->click_state = 1 << e->click.widget; SetWindowDirty(w); break; } @@ -1528,7 +1527,7 @@ static void ScenEditTownGenWndProc(Window *w, WindowEvent *e) _place_proc(e->place.tile); break; case WE_ABORT_PLACE_OBJ: - w->click_state = 0; + w->click_state &= (1 << 7 | 1 << 8 | 1 << 9); SetWindowDirty(w); break; } -- cgit v1.2.3-70-g09d2