From 5f4541768a7eb3fbfe5f01ae05f2fc88dd9bac48 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Sat, 24 Oct 2020 14:48:02 +0100 Subject: [PATCH] Allow RV overtaking when another vehicle is on the same tile behind it --- src/roadveh_cmd.cpp | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/roadveh_cmd.cpp b/src/roadveh_cmd.cpp index 87e2ea3360..e6fa370057 100644 --- a/src/roadveh_cmd.cpp +++ b/src/roadveh_cmd.cpp @@ -825,7 +825,27 @@ static Vehicle *EnumFindVehBlockingOvertake(Vehicle *v, void *data) { const OvertakeData *od = (OvertakeData*)data; - return (v->First() == v && v != od->u && v != od->v) ? v : nullptr; + if (v->First() == od->u || v->First() == od->v) return nullptr; + if (RoadVehicle::From(v)->overtaking != 0 || v->direction != od->v->direction) return v; + + /* Check if other vehicle is behind */ + switch (DirToDiagDir(v->direction)) { + case DIAGDIR_NE: + if (v->x_pos > od->v->x_pos) return nullptr; + break; + case DIAGDIR_SE: + if (v->y_pos < od->v->y_pos) return nullptr; + break; + case DIAGDIR_SW: + if (v->x_pos < od->v->x_pos) return nullptr; + break; + case DIAGDIR_NW: + if (v->y_pos > od->v->y_pos) return nullptr; + break; + default: + NOT_REACHED(); + } + return v; } /**