summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrubidium <rubidium@openttd.org>2008-11-07 17:59:51 +0000
committerrubidium <rubidium@openttd.org>2008-11-07 17:59:51 +0000
commitc7f3935506b584415ea249ab01f4d2c8f70c08cc (patch)
treec380e6faa058315b7e8b64e8999b7750c233e297
parente91ae97e19634917cd9b866e1cab397970f33045 (diff)
downloadopenttd-c7f3935506b584415ea249ab01f4d2c8f70c08cc.tar.xz
(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)
-rw-r--r--src/rail_cmd.cpp2
-rw-r--r--src/rail_map.h9
-rw-r--r--src/roadveh_cmd.cpp2
-rw-r--r--src/smallmap_gui.cpp16
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;
}