summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrubidium <rubidium@openttd.org>2007-08-09 05:25:33 +0000
committerrubidium <rubidium@openttd.org>2007-08-09 05:25:33 +0000
commit36da8a2a38970e681ed87c56dca870f8737103b1 (patch)
treefc3560bf58f5437dd4726b79260ea12e717424fb
parent5dfa07e928600f31223ffc874973fc6f7b89738c (diff)
downloadopenttd-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.cpp18
-rw-r--r--src/video/win32_v.cpp10
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);