diff options
author | rubidium <rubidium@openttd.org> | 2007-08-09 05:25:33 +0000 |
---|---|---|
committer | rubidium <rubidium@openttd.org> | 2007-08-09 05:25:33 +0000 |
commit | 36da8a2a38970e681ed87c56dca870f8737103b1 (patch) | |
tree | fc3560bf58f5437dd4726b79260ea12e717424fb | |
parent | 5dfa07e928600f31223ffc874973fc6f7b89738c (diff) | |
download | openttd-36da8a2a38970e681ed87c56dca870f8737103b1.tar.xz |
(svn r10833) -Fix [FS#1115]: assertion (different cost between test and execution) of overbuilding road tunnels with tram tracks (and vice versa) when the dragged area contains both ends of the tunnel.
-rw-r--r-- | src/road_cmd.cpp | 18 | ||||
-rw-r--r-- | src/video/win32_v.cpp | 10 |
2 files changed, 21 insertions, 7 deletions
diff --git a/src/road_cmd.cpp b/src/road_cmd.cpp index 621338ea9..c79d263d9 100644 --- a/src/road_cmd.cpp +++ b/src/road_cmd.cpp @@ -588,6 +588,7 @@ CommandCost CmdBuildLongRoad(TileIndex end_tile, uint32 flags, uint32 p1, uint32 TileIndex start_tile, tile; CommandCost cost, ret; bool had_bridge = false; + bool had_tunnel = false; bool had_success = false; DisallowedRoadDirections drd = DRD_NORTHBOUND; @@ -633,12 +634,19 @@ CommandCost CmdBuildLongRoad(TileIndex end_tile, uint32 flags, uint32 p1, uint32 _error_message = INVALID_STRING_ID; } else { had_success = true; - /* Only pay for the upgrade on one side of the bridge */ - if (IsBridgeTile(tile)) { - if ((!had_bridge || GetBridgeRampDirection(tile) == DIAGDIR_SE || GetBridgeRampDirection(tile) == DIAGDIR_SW)) { - cost.AddCost(ret); + /* Only pay for the upgrade on one side of the bridges and tunnels */ + if (IsTileType(tile, MP_TUNNELBRIDGE)) { + if (IsBridge(tile)) { + if ((!had_bridge || GetBridgeRampDirection(tile) == DIAGDIR_SE || GetBridgeRampDirection(tile) == DIAGDIR_SW)) { + cost.AddCost(ret); + } + had_bridge = true; + } else { + if ((!had_tunnel || GetTunnelDirection(tile) == DIAGDIR_SE || GetTunnelDirection(tile) == DIAGDIR_SW)) { + cost.AddCost(ret); + } + had_tunnel = true; } - had_bridge = true; } else { cost.AddCost(ret); } diff --git a/src/video/win32_v.cpp b/src/video/win32_v.cpp index 02ad4a2d4..65937fa9e 100644 --- a/src/video/win32_v.cpp +++ b/src/video/win32_v.cpp @@ -219,8 +219,9 @@ static void MakeWindow(bool full_screen) // recreate window? if ((full_screen || _wnd.fullscreen) && _wnd.main_wnd) { - DestroyWindow(_wnd.main_wnd); + HWND wnd = _wnd.main_wnd; _wnd.main_wnd = 0; + DestroyWindow(wnd); } #if defined(WINCE) @@ -519,6 +520,9 @@ static LRESULT CALLBACK WndProcGdi(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lP break; case WM_SIZE: + /* Resizing a destroy window is NOT good */ + if (_wnd.main_wnd == 0) return; + if (wParam != SIZE_MINIMIZED) { /* Set maximized flag when we maximize (obviously), but also when we * switched to fullscreen from a maximized state */ @@ -792,7 +796,9 @@ void VideoDriver_Win32::Stop() { DeleteObject(_wnd.gdi_palette); DeleteObject(_wnd.dib_sect); - DestroyWindow(_wnd.main_wnd); + HWND wnd = _wnd.main_wnd; + _wnd.main_wnd = 0; + DestroyWindow(wnd); #if !defined(WINCE) if (_wnd.fullscreen) ChangeDisplaySettings(NULL, 0); |