Files @ r23289:ce4b5aef37cf
Branch filter:

Location: cpp/openttd-patchpack/source/src/waypoint_base.h - annotation

Henry Wilson
Fix: trains cancelling their pending reversal when ordered to go to a depot behind them

Previously, if a train had been ordered to reverse, and while it was slowing down, was
ordered to travel to a depot that is behind it, the train would continue forwards.
Also when a train had been ordered to reverse, and while it was slowing down, was
ordered to travel to a depot that is in front of it, the train would not cancel the
reversal.
In both cases the train would travel away from the target depot.

Trains in this situation now behave correctly and will travel towards the depot.
r12465:c1b760a56db7
r12465:c1b760a56db7
r12768:980ae0491352
r12768:980ae0491352
r12768:980ae0491352
r12768:980ae0491352
r12768:980ae0491352
r12768:980ae0491352
r12768:980ae0491352
r12465:c1b760a56db7
r12465:c1b760a56db7
r16851:b5784600e35e
r16851:b5784600e35e
r12465:c1b760a56db7
r12467:b4ba97896a21
r12465:c1b760a56db7
r17624:f2c5f47dceaa
r18730:83ef302fe140
r16110:0eb4e685b16c
r12465:c1b760a56db7
r17624:f2c5f47dceaa
r17624:f2c5f47dceaa
r17624:f2c5f47dceaa
r17624:f2c5f47dceaa
r12465:c1b760a56db7
r12465:c1b760a56db7
r12465:c1b760a56db7
r12465:c1b760a56db7
r12465:c1b760a56db7
r18782:6453522c2154
r12465:c1b760a56db7
r12465:c1b760a56db7
r12465:c1b760a56db7
r12465:c1b760a56db7
r21008:be2e3d3c935b
r12465:c1b760a56db7
r12465:c1b760a56db7
r12493:6da69ce1ff42
r12493:6da69ce1ff42
r12493:6da69ce1ff42
r12493:6da69ce1ff42
r12493:6da69ce1ff42
r12493:6da69ce1ff42
r12493:6da69ce1ff42
r12493:6da69ce1ff42
r12493:6da69ce1ff42
r12493:6da69ce1ff42
r14560:a63b9e37c39e
r14560:a63b9e37c39e
r14560:a63b9e37c39e
r14560:a63b9e37c39e
r14560:a63b9e37c39e
r18782:6453522c2154
r14560:a63b9e37c39e
r14560:a63b9e37c39e
r14560:a63b9e37c39e
r15159:901498571693
r15159:901498571693
r15159:901498571693
r15159:901498571693
r15159:901498571693
r15159:901498571693
r15159:901498571693
r18782:6453522c2154
r15159:901498571693
r15159:901498571693
r15159:901498571693
r12465:c1b760a56db7
r12465:c1b760a56db7
r17624:f2c5f47dceaa
r17624:f2c5f47dceaa
r17624:f2c5f47dceaa
r17624:f2c5f47dceaa
r12465:c1b760a56db7
r12465:c1b760a56db7
r16851:b5784600e35e
/* $Id$ */

/*
 * This file is part of OpenTTD.
 * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
 * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
 */

/** @file waypoint_base.h Base of waypoints. */

#ifndef WAYPOINT_BASE_H
#define WAYPOINT_BASE_H

#include "base_station_base.h"

/** Representation of a waypoint. */
struct Waypoint FINAL : SpecializedStation<Waypoint, true> {
	uint16 town_cn;    ///< The N-1th waypoint for this town (consecutive number)

	/**
	 * Create a waypoint at the given tile.
	 * @param tile The location of the waypoint.
	 */
	Waypoint(TileIndex tile = INVALID_TILE) : SpecializedStation<Waypoint, true>(tile) { }
	~Waypoint();

	void UpdateVirtCoord();

	/* virtual */ inline bool TileBelongsToRailStation(TileIndex tile) const
	{
		return IsRailWaypointTile(tile) && GetStationIndex(tile) == this->index;
	}

	/* virtual */ uint32 GetNewGRFVariable(const struct ResolverObject &object, byte variable, byte parameter, bool *available) const;

	/* virtual */ void GetTileArea(TileArea *ta, StationType type) const;

	/* virtual */ uint GetPlatformLength(TileIndex tile, DiagDirection dir) const
	{
		return 1;
	}

	/* virtual */ uint GetPlatformLength(TileIndex tile) const
	{
		return 1;
	}

	/**
	 * Is this a single tile waypoint?
	 * @return true if it is.
	 */
	inline bool IsSingleTile() const
	{
		return (this->facilities & FACIL_TRAIN) != 0 && this->train_station.w == 1 && this->train_station.h == 1;
	}

	/**
	 * Is the "type" of waypoint the same as the given waypoint,
	 * i.e. are both a rail waypoint or are both a buoy?
	 * @param wp The waypoint to compare to.
	 * @return true iff their types are equal.
	 */
	inline bool IsOfType(const Waypoint *wp) const
	{
		return this->string_id == wp->string_id;
	}
};

/**
 * Iterate over all waypoints.
 * @param var The variable used for iteration.
 */
#define FOR_ALL_WAYPOINTS(var) FOR_ALL_BASE_STATIONS_OF_TYPE(Waypoint, var)

#endif /* WAYPOINT_BASE_H */