summaryrefslogtreecommitdiff
path: root/src
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
commit2bff32afb078791d8d4cf238ccd2c1136fae84bb (patch)
treefc3560bf58f5437dd4726b79260ea12e717424fb /src
parentc4a30877238d15bd8e3c5d794449e372dc787bcb (diff)
downloadopenttd-2bff32afb078791d8d4cf238ccd2c1136fae84bb.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.
Diffstat (limited to 'src')
-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);