Files
@ r24498:e9114d9ab04a
Branch filter:
Location: cpp/openttd-patchpack/source/src/pbs.h - annotation
r24498:e9114d9ab04a
2.5 KiB
text/x-c
Fix #6468: don't store version of AIs-started-via-console in name
You can do: "startai myai.3", which starts version 3 of "myai".
This is very useful for testing save/load code between different
versions of your AI.
However, when using this syntax, the AI got saved as "myai.3" as
name of the AI, instead of "myai". This caused several problems,
like indicating to the user the AI could not be found, but still
load the AI. But in all cases, the AI never got the chance to
load the saved data, making the whole reason this exists pointless.
By splitting the name and version already in the console command,
the code becomes simpler and AIs started this way now follow the
normal flow after initialization.
You can do: "startai myai.3", which starts version 3 of "myai".
This is very useful for testing save/load code between different
versions of your AI.
However, when using this syntax, the AI got saved as "myai.3" as
name of the AI, instead of "myai". This caused several problems,
like indicating to the user the AI could not be found, but still
load the AI. But in all cases, the AI never got the chance to
load the saved data, making the whole reason this exists pointless.
By splitting the name and version already in the console command,
the code becomes simpler and AIs started this way now follow the
normal flow after initialization.
r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r9786:b8985de55672 r9786:b8985de55672 r9786:b8985de55672 r9786:b8985de55672 r9786:b8985de55672 r9786:b8985de55672 r9787:d45ab512184a r9786:b8985de55672 r9798:167b062db76e r9786:b8985de55672 r9786:b8985de55672 r9786:b8985de55672 r12492:6a787b05475e r9787:d45ab512184a r19949:26fad1c62a1b r9787:d45ab512184a r9787:d45ab512184a r9798:167b062db76e r9798:167b062db76e r9798:167b062db76e r9798:167b062db76e r10027:0a067b82c949 r9798:167b062db76e r17629:21e9dfd343cd r17629:21e9dfd343cd r17629:21e9dfd343cd r9798:167b062db76e r17629:21e9dfd343cd r17629:21e9dfd343cd r17629:21e9dfd343cd r17629:21e9dfd343cd r17629:21e9dfd343cd r17629:21e9dfd343cd r17629:21e9dfd343cd r9798:167b062db76e r9798:167b062db76e r9798:167b062db76e r23607:36c15679007d r11980:193f7a6b6e37 r11980:193f7a6b6e37 r9798:167b062db76e r11980:193f7a6b6e37 r9814:30d45d4957c8 r9787:d45ab512184a r9787:d45ab512184a r9787:d45ab512184a r9787:d45ab512184a r9787:d45ab512184a r9787:d45ab512184a r9787:d45ab512184a r9787:d45ab512184a r9787:d45ab512184a r9787:d45ab512184a r9787:d45ab512184a r9787:d45ab512184a r9786:b8985de55672 | /*
* 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 pbs.h PBS support routines */
#ifndef PBS_H
#define PBS_H
#include "tile_type.h"
#include "direction_type.h"
#include "track_type.h"
#include "vehicle_type.h"
TrackBits GetReservedTrackbits(TileIndex t);
void SetRailStationPlatformReservation(TileIndex start, DiagDirection dir, bool b);
bool TryReserveRailTrack(TileIndex tile, Track t, bool trigger_stations = true);
void UnreserveRailTrack(TileIndex tile, Track t);
/** This struct contains information about the end of a reserved path. */
struct PBSTileInfo {
TileIndex tile; ///< Tile the path ends, INVALID_TILE if no valid path was found.
Trackdir trackdir; ///< The reserved trackdir on the tile.
bool okay; ///< True if tile is a safe waiting position, false otherwise.
/**
* Create an empty PBSTileInfo.
*/
PBSTileInfo() : tile(INVALID_TILE), trackdir(INVALID_TRACKDIR), okay(false) {}
/**
* Create a PBSTileInfo with given tile, track direction and safe waiting position information.
* @param _t The tile where the path ends.
* @param _td The reserved track dir on the tile.
* @param _okay Whether the tile is a safe waiting point or not.
*/
PBSTileInfo(TileIndex _t, Trackdir _td, bool _okay) : tile(_t), trackdir(_td), okay(_okay) {}
};
PBSTileInfo FollowTrainReservation(const Train *v, Vehicle **train_on_res = nullptr);
bool IsSafeWaitingPosition(const Train *v, TileIndex tile, Trackdir trackdir, bool include_line_end, bool forbid_90deg = false);
bool IsWaitingPositionFree(const Train *v, TileIndex tile, Trackdir trackdir, bool forbid_90deg = false);
Train *GetTrainForReservation(TileIndex tile, Track track);
/**
* Check whether some of tracks is reserved on a tile.
*
* @param tile the tile
* @param tracks the tracks to test
* @return true if at least on of tracks is reserved
*/
static inline bool HasReservedTracks(TileIndex tile, TrackBits tracks)
{
return (GetReservedTrackbits(tile) & tracks) != TRACK_BIT_NONE;
}
#endif /* PBS_H */
|