diff options
Diffstat (limited to 'src/rail_cmd.cpp')
-rw-r--r-- | src/rail_cmd.cpp | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/src/rail_cmd.cpp b/src/rail_cmd.cpp index 118551c2e..724a7213d 100644 --- a/src/rail_cmd.cpp +++ b/src/rail_cmd.cpp @@ -2230,6 +2230,29 @@ static const signed char _deltacoord_leaveoffset[8] = { 0, 1, 0, -1 /* y */ }; + +/** Compute number of ticks when next wagon will leave a depot. + * Negative means next wagon should have left depot n ticks before. + * @param v vehicle outside (leaving) the depot + * @return number of ticks when the next wagon will leave + */ +int TicksToLeaveDepot(const Vehicle *v) +{ + DiagDirection dir = GetRailDepotDirection(v->tile); + int length = v->u.rail.cached_veh_length; + + switch (dir) { + case DIAGDIR_NE: return ((int)(v->x_pos & 0x0F) - ((_fractcoords_enter[dir] & 0x0F) - (length + 1))); + case DIAGDIR_SE: return -((int)(v->y_pos & 0x0F) - ((_fractcoords_enter[dir] >> 4) + (length + 1))); + case DIAGDIR_SW: return -((int)(v->x_pos & 0x0F) - ((_fractcoords_enter[dir] & 0x0F) + (length + 1))); + default: + case DIAGDIR_NW: return ((int)(v->y_pos & 0x0F) - ((_fractcoords_enter[dir] >> 4) - (length + 1))); + } + + return 0; // make compilers happy +} + + static VehicleEnterTileStatus VehicleEnter_Track(Vehicle *v, TileIndex tile, int x, int y) { byte fract_coord; |