From 0b3706a8d390e97c2d39f901977b414a5440d174 Mon Sep 17 00:00:00 2001 From: rubidium Date: Fri, 7 Nov 2008 17:59:51 +0000 Subject: (svn r14566) -Fix [FS#2397]: RV's go via order would reserve a slot at the 'via' station which it never uses, which makes it unlikely that it reserves a slot for the next station and that makes queueing fail (Aali) --- src/rail_cmd.cpp | 2 ++ src/rail_map.h | 9 +++++++++ src/roadveh_cmd.cpp | 2 +- src/smallmap_gui.cpp | 16 +++++++++++++++- 4 files changed, 27 insertions(+), 2 deletions(-) diff --git a/src/rail_cmd.cpp b/src/rail_cmd.cpp index 3b3621c46..fa8a63817 100644 --- a/src/rail_cmd.cpp +++ b/src/rail_cmd.cpp @@ -2108,6 +2108,8 @@ static void TileLoop_Track(TileIndex tile) RailGroundType old_ground = GetRailGroundType(tile); RailGroundType new_ground; + UpdateStat(tile, !EnsureNoVehicleOnGround(tile)); + if (old_ground == RAIL_GROUND_WATER) { TileLoop_Water(tile); return; diff --git a/src/rail_map.h b/src/rail_map.h index a6077cf0d..cf4e6e861 100644 --- a/src/rail_map.h +++ b/src/rail_map.h @@ -598,6 +598,15 @@ static inline bool IsSnowRailGround(TileIndex t) return GetRailGroundType(t) == RAIL_GROUND_ICE_DESERT; } +static inline void UpdateStat(TileIndex t, bool on_track) +{ + _me[t].m7 = _me[t].m7 << 1 | !!on_track; +} + +static inline byte GetStat(TileIndex t) +{ + return _me[t].m7; +} static inline void MakeRailNormal(TileIndex t, Owner o, TrackBits b, RailType r) { diff --git a/src/roadveh_cmd.cpp b/src/roadveh_cmd.cpp index 214d4f120..6a7a75f70 100644 --- a/src/roadveh_cmd.cpp +++ b/src/roadveh_cmd.cpp @@ -1922,7 +1922,7 @@ void RoadVehicle::OnNewDay() } /* update destination */ - if (!(this->vehstatus & VS_STOPPED) && this->current_order.IsType(OT_GOTO_STATION) && this->u.road.slot == NULL && !(this->vehstatus & VS_CRASHED)) { + if (!(this->vehstatus & VS_STOPPED) && this->current_order.IsType(OT_GOTO_STATION) && !(this->current_order.GetNonStopType() & ONSF_NO_STOP_AT_DESTINATION_STATION) && this->u.road.slot == NULL && !(this->vehstatus & VS_CRASHED)) { Station *st = GetStation(this->current_order.GetDestination()); RoadStop *rs = st->GetPrimaryRoadStop(this); RoadStop *best = NULL; diff --git a/src/smallmap_gui.cpp b/src/smallmap_gui.cpp index 5c993cc2c..4eaf50926 100644 --- a/src/smallmap_gui.cpp +++ b/src/smallmap_gui.cpp @@ -383,6 +383,20 @@ static inline uint32 GetSmallMapIndustriesPixels(TileIndex tile) return ApplyMask(MKCOLOR(0x54545454), &_smallmap_vehicles_andor[t]); } +#define MK(x) MKCOLOR(x << 24 | x << 16 | x << 8 | x) + +static const uint32 _busyness[] = { + MK(15), + MK(150), + MK(209), + MK(206), + MK(191), + MK(186), + MK(184), + MK(180), +}; + + /** * Return the color a tile would be displayed with in the small map in mode "Routes". * @@ -405,7 +419,7 @@ static inline uint32 GetSmallMapRoutesPixels(TileIndex tile) } } else { /* ground color */ - bits = ApplyMask(MKCOLOR(0x54545454), &_smallmap_contours_andor[t]); + bits = ApplyMask(t == MP_RAILWAY ? _busyness[CountBits(GetStat(tile))] : MKCOLOR(0x54545454), &_smallmap_contours_andor[t]); } return bits; } -- cgit v1.2.3-54-g00ecf