diff options
author | rubidium <rubidium@openttd.org> | 2014-02-22 19:52:13 +0000 |
---|---|---|
committer | rubidium <rubidium@openttd.org> | 2014-02-22 19:52:13 +0000 |
commit | 98539bd2c3c9805683f67a275c61972730a7c789 (patch) | |
tree | a8c45bcbcaf5ae2cc342c5c0be6e2ca35d782d53 /src/station_cmd.cpp | |
parent | 90fef59f8010882e99cdf27e52af6e9695edfabb (diff) | |
download | openttd-98539bd2c3c9805683f67a275c61972730a7c789.tar.xz |
(svn r26363) -Codechange [FS#5894]: make it clearer that drive through road stops need an Axis in CmdBuildRoadStop and the non drive through stops need a DiagDir
Diffstat (limited to 'src/station_cmd.cpp')
-rw-r--r-- | src/station_cmd.cpp | 24 |
1 files changed, 15 insertions, 9 deletions
diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index c253679d9..341681124 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -1757,7 +1757,8 @@ static CommandCost FindJoiningRoadStop(StationID existing_stop, StationID statio * bit 1: 0 For normal stops, 1 for drive-through. * bit 2..3: The roadtypes. * bit 5: Allow stations directly adjacent to other stations. - * bit 6..7: Entrance direction (#DiagDirection). + * bit 6..7: Entrance direction (#DiagDirection) for normal stops. + * bit 6: #Axis of the road for drive-through stops. * bit 16..31: Station ID to join (NEW_STATION if build new one). * @param text Unused. * @return The cost of this operation or an error. @@ -1791,12 +1792,17 @@ CommandCost CmdBuildRoadStop(TileIndex tile, DoCommandFlag flags, uint32 p1, uin /* Trams only have drive through stops */ if (!is_drive_through && HasBit(rts, ROADTYPE_TRAM)) return CMD_ERROR; - DiagDirection ddir = Extract<DiagDirection, 6, 2>(p2); - - /* Safeguard the parameters. */ - if (!IsValidDiagDirection(ddir)) return CMD_ERROR; - /* If it is a drive-through stop, check for valid axis. */ - if (is_drive_through && !IsValidAxis((Axis)ddir)) return CMD_ERROR; + DiagDirection ddir; + Axis axis; + if (is_drive_through) { + /* By definition axis is valid, due to there being 2 axes and reading 1 bit. */ + axis = Extract<Axis, 6, 1>(p2); + ddir = AxisToDiagDir(axis); + } else { + /* By definition ddir is valid, due to there being 4 diagonal directions and reading 2 bits. */ + ddir = Extract<DiagDirection, 6, 2>(p2); + axis = DiagDirToAxis(ddir); + } CommandCost ret = CheckIfAuthorityAllowsNewStation(tile, flags); if (ret.Failed()) return ret; @@ -1804,7 +1810,7 @@ CommandCost CmdBuildRoadStop(TileIndex tile, DoCommandFlag flags, uint32 p1, uin /* Total road stop cost. */ CommandCost cost(EXPENSES_CONSTRUCTION, roadstop_area.w * roadstop_area.h * _price[type ? PR_BUILD_STATION_TRUCK : PR_BUILD_STATION_BUS]); StationID est = INVALID_STATION; - ret = CheckFlatLandRoadStop(roadstop_area, flags, is_drive_through ? 5 << ddir : 1 << ddir, is_drive_through, type, DiagDirToAxis(ddir), &est, rts); + ret = CheckFlatLandRoadStop(roadstop_area, flags, is_drive_through ? 5 << axis : 1 << ddir, is_drive_through, type, axis, &est, rts); if (ret.Failed()) return ret; cost.AddCost(ret); @@ -1858,7 +1864,7 @@ CommandCost CmdBuildRoadStop(TileIndex tile, DoCommandFlag flags, uint32 p1, uin } } - MakeDriveThroughRoadStop(cur_tile, st->owner, road_owner, tram_owner, st->index, rs_type, rts | cur_rts, DiagDirToAxis(ddir)); + MakeDriveThroughRoadStop(cur_tile, st->owner, road_owner, tram_owner, st->index, rs_type, rts | cur_rts, axis); road_stop->MakeDriveThrough(); } else { /* Non-drive-through stop never overbuild and always count as two road bits. */ |