From 05e549ccdcb4859fcfd80ab2a03803b387cf5872 Mon Sep 17 00:00:00 2001 From: alberth Date: Sun, 14 Mar 2010 15:42:26 +0000 Subject: (svn r19420) -Codechange: Don't use _error_message to keep track of success/failure, use a had_success boolean. --- src/rail_cmd.cpp | 24 +++++++++++++++++------- src/road_cmd.cpp | 20 ++++++++++---------- 2 files changed, 27 insertions(+), 17 deletions(-) diff --git a/src/rail_cmd.cpp b/src/rail_cmd.cpp index 139983b09..61512f3f9 100644 --- a/src/rail_cmd.cpp +++ b/src/rail_cmd.cpp @@ -760,16 +760,20 @@ static CommandCost CmdRailTrackHelper(TileIndex tile, DoCommandFlag flags, uint3 if (flags & DC_EXEC) SndPlayTileFx(SND_20_SPLAT_2, tile); + bool had_success = false; + CommandCost last_error = CMD_ERROR; for (;;) { CommandCost ret = DoCommand(tile, railtype, TrackdirToTrack(trackdir), flags, remove ? CMD_REMOVE_SINGLE_RAIL : CMD_BUILD_SINGLE_RAIL); if (ret.Failed()) { - if (_error_message != STR_ERROR_ALREADY_BUILT && !remove) { - if (HasBit(p2, 8)) return CMD_ERROR; + last_error = ret; + last_error.SetGlobalErrorMessage(); + if (last_error.GetErrorMessage() != STR_ERROR_ALREADY_BUILT && !remove) { + if (HasBit(p2, 8)) return last_error; break; } - _error_message = INVALID_STRING_ID; } else { + had_success = true; total_cost.AddCost(ret); } @@ -781,7 +785,9 @@ static CommandCost CmdRailTrackHelper(TileIndex tile, DoCommandFlag flags, uint3 if (!IsDiagonalTrackdir(trackdir)) ToggleBit(trackdir, 0); } - return (total_cost.GetCost() == 0) ? CommandCost(remove ? INVALID_STRING_ID : (_error_message == INVALID_STRING_ID ? STR_ERROR_ALREADY_BUILT : _error_message)) : total_cost; + if (had_success) return total_cost; + if (remove) return CMD_ERROR; + return last_error; } /** Build rail on a stretch of track. @@ -1128,7 +1134,6 @@ static bool CheckSignalAutoFill(TileIndex &tile, Trackdir &trackdir, int &signal static CommandCost CmdSignalTrackHelper(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text) { CommandCost total_cost(EXPENSES_CONSTRUCTION); - bool err = true; TileIndex start_tile = tile; Track track = (Track)GB(p2, 0, 3); @@ -1191,6 +1196,8 @@ static CommandCost CmdSignalTrackHelper(TileIndex tile, DoCommandFlag flags, uin * and convert all others to semaphore/signal * remove - 1 remove signals, 0 build signals */ int signal_ctr = 0; + CommandCost last_error = CMD_ERROR; + bool had_success = false; for (;;) { /* only build/remove signals with the specified density */ if ((remove && autofill) || signal_ctr % signal_density == 0) { @@ -1209,8 +1216,11 @@ static CommandCost CmdSignalTrackHelper(TileIndex tile, DoCommandFlag flags, uin /* Be user-friendly and try placing signals as much as possible */ if (ret.Succeeded()) { - err = false; + had_success = true; total_cost.AddCost(ret); + } else { + last_error = ret; + last_error.SetGlobalErrorMessage(); } } @@ -1234,7 +1244,7 @@ static CommandCost CmdSignalTrackHelper(TileIndex tile, DoCommandFlag flags, uin } } - return err ? CMD_ERROR : total_cost; + return had_success ? total_cost : last_error; } /** Build signals on a stretch of track. diff --git a/src/road_cmd.cpp b/src/road_cmd.cpp index d76dba933..5f985babc 100644 --- a/src/road_cmd.cpp +++ b/src/road_cmd.cpp @@ -728,14 +728,8 @@ do_clear:; */ CommandCost CmdBuildLongRoad(TileIndex start_tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text) { - CommandCost cost(EXPENSES_CONSTRUCTION); - bool had_bridge = false; - bool had_tunnel = false; - bool had_success = false; DisallowedRoadDirections drd = DRD_NORTHBOUND; - _error_message = INVALID_STRING_ID; - if (p1 >= MapSize()) return CMD_ERROR; TileIndex end_tile = p1; @@ -763,7 +757,12 @@ CommandCost CmdBuildLongRoad(TileIndex start_tile, DoCommandFlag flags, uint32 p /* No disallowed direction bits have to be toggled */ if (!HasBit(p2, 5)) drd = DRD_NONE; + CommandCost cost(EXPENSES_CONSTRUCTION); + CommandCost last_error = CMD_ERROR; TileIndex tile = start_tile; + bool had_bridge = false; + bool had_tunnel = false; + bool had_success = false; /* Start tile is the first tile clicked by the user. */ for (;;) { RoadBits bits = AxisToRoadBits(axis); @@ -772,11 +771,12 @@ CommandCost CmdBuildLongRoad(TileIndex start_tile, DoCommandFlag flags, uint32 p if (tile == end_tile && !HasBit(p2, 1)) bits &= DiagDirToRoadBits(ReverseDiagDir(dir)); if (tile == start_tile && HasBit(p2, 0)) bits &= DiagDirToRoadBits(dir); - _error_message = INVALID_STRING_ID; CommandCost ret = DoCommand(tile, drd << 6 | rt << 4 | bits, 0, flags, CMD_BUILD_ROAD); if (ret.Failed()) { - if (_error_message != STR_ERROR_ALREADY_BUILT) { - if (HasBit(p2, 6)) return CMD_ERROR; + last_error = ret; + last_error.SetGlobalErrorMessage(); + if (last_error.GetErrorMessage() != STR_ERROR_ALREADY_BUILT) { + if (HasBit(p2, 6)) return last_error; break; } } else { @@ -804,7 +804,7 @@ CommandCost CmdBuildLongRoad(TileIndex start_tile, DoCommandFlag flags, uint32 p tile += TileOffsByDiagDir(dir); } - return !had_success ? CMD_ERROR : cost; + return had_success ? cost : last_error; } /** Remove a long piece of road. -- cgit v1.2.3-54-g00ecf