Files @ r4603:3b159d0db197
Branch filter:

Location: cpp/openttd-patchpack/source/waypoint.h - annotation

peter1138
(svn r6455) - Feature: Add 2cc (two company colours) livery schemes. This replaces the original colour selection window and bumps the saveload version. Liveries are supported for all vehicles, not just those with 2cc support. Thanks to lakie for GUI inspiration.
r2186:5ee653b1b5e1
r2186:5ee653b1b5e1
r1542:6bae7041e7bc
r1542:6bae7041e7bc
r1542:6bae7041e7bc
r1542:6bae7041e7bc
r3239:b5370b5d565d
r1542:6bae7041e7bc
r1542:6bae7041e7bc
r2670:992f15ff9b56
r4389:7f4a6b884ac1
r2670:992f15ff9b56
r3346:134319cc6f99
r2670:992f15ff9b56
r2670:992f15ff9b56
r1542:6bae7041e7bc
r2670:992f15ff9b56
r4289:b392a03b3ca3
r1542:6bae7041e7bc
r2670:992f15ff9b56
r2670:992f15ff9b56
r2670:992f15ff9b56
r2670:992f15ff9b56
r2670:992f15ff9b56
r1542:6bae7041e7bc
r1542:6bae7041e7bc
r1542:6bae7041e7bc
r1542:6bae7041e7bc
r1542:6bae7041e7bc
r1542:6bae7041e7bc
r1542:6bae7041e7bc
r4389:7f4a6b884ac1
r1542:6bae7041e7bc
r1542:6bae7041e7bc
r1542:6bae7041e7bc
r1542:6bae7041e7bc
r1542:6bae7041e7bc
r1542:6bae7041e7bc
r1542:6bae7041e7bc
r1542:6bae7041e7bc
r1542:6bae7041e7bc
r1542:6bae7041e7bc
r1542:6bae7041e7bc
r1542:6bae7041e7bc
r4346:fa4ac6b6f852
r4346:fa4ac6b6f852
r4346:fa4ac6b6f852
r4346:fa4ac6b6f852
r4346:fa4ac6b6f852
r4346:fa4ac6b6f852
r4346:fa4ac6b6f852
r4346:fa4ac6b6f852
r4389:7f4a6b884ac1
r4352:460a517b040f
r4352:460a517b040f
r4352:460a517b040f
r4352:460a517b040f
r4390:5bab99565ca2
r4390:5bab99565ca2
r4390:5bab99565ca2
r4390:5bab99565ca2
r4390:5bab99565ca2
r4390:5bab99565ca2
r4390:5bab99565ca2
r4390:5bab99565ca2
r4346:fa4ac6b6f852
r1542:6bae7041e7bc
r1542:6bae7041e7bc
r1542:6bae7041e7bc
r2670:992f15ff9b56
r2670:992f15ff9b56
r2670:992f15ff9b56
r2670:992f15ff9b56
r2670:992f15ff9b56
r2670:992f15ff9b56
r2670:992f15ff9b56
r2670:992f15ff9b56
r2670:992f15ff9b56
r2670:992f15ff9b56
r2670:992f15ff9b56
r1977:1f8b99c96041
r1977:1f8b99c96041
r2116:ddc2d73f5c38
r2520:1767662fb229
r1542:6bae7041e7bc
r1542:6bae7041e7bc
r2670:992f15ff9b56
r1542:6bae7041e7bc
r1542:6bae7041e7bc
/* $Id$ */

#ifndef WAYPOINT_H
#define WAYPOINT_H

#include "pool.h"
#include "rail_map.h"

struct Waypoint {
	TileIndex xy;      ///< Tile of waypoint
	WaypointID index;  ///< Index of waypoint

	TownID town_index; ///< Town associated with the waypoint
	byte town_cn;      ///< The Nth waypoint for this town (consecutive number)
	StringID string;   ///< If this is zero (i.e. no custom name), town + town_cn is used for naming

	ViewportSign sign; ///< Dimensions of sign (not saved)
	Date build_date;   ///< Date of construction

	byte stat_id;      ///< ID of waypoint within the waypoint class (not saved)
	uint32 grfid;      ///< ID of GRF file
	byte localidx;     ///< Index of station within GRF file

	byte deleted;      ///< Delete counter. If greater than 0 then it is decremented until it reaches 0; the waypoint is then is deleted.
};

extern MemoryPool _waypoint_pool;

/**
 * Get the pointer to the waypoint with index 'index'
 */
static inline Waypoint *GetWaypoint(WaypointID index)
{
	return (Waypoint*)GetItemFromPool(&_waypoint_pool, index);
}

/**
 * Get the current size of the WaypointPool
 */
static inline uint16 GetWaypointPoolSize(void)
{
	return _waypoint_pool.total_items;
}

/**
 * Check if a Waypoint really exists.
 */
static inline bool IsValidWaypoint(const Waypoint *wp)
{
	return wp->xy != 0;
}

static inline bool IsValidWaypointID(WaypointID index)
{
	return index < GetWaypointPoolSize() && IsValidWaypoint(GetWaypoint(index));
}

void DestroyWaypoint(Waypoint *wp);

static inline void DeleteWaypoint(Waypoint *wp)
{
	DestroyWaypoint(wp);
	wp->xy = 0;
}

#define FOR_ALL_WAYPOINTS_FROM(wp, start) for (wp = GetWaypoint(start); wp != NULL; wp = (wp->index + 1 < GetWaypointPoolSize()) ? GetWaypoint(wp->index + 1) : NULL) if (IsValidWaypoint(wp))
#define FOR_ALL_WAYPOINTS(wp) FOR_ALL_WAYPOINTS_FROM(wp, 0)


/**
 * Fetch a waypoint by tile
 * @param tile Tile of waypoint
 * @return Waypoint
 */
static inline Waypoint *GetWaypointByTile(TileIndex tile)
{
	assert(IsTileType(tile, MP_RAILWAY) && IsRailWaypoint(tile));
	return GetWaypoint(_m[tile].m2);
}

int32 RemoveTrainWaypoint(TileIndex tile, uint32 flags, bool justremove);
Station *ComposeWaypointStation(TileIndex tile);
void ShowRenameWaypointWindow(const Waypoint *cp);
void DrawWaypointSprite(int x, int y, int image, RailType railtype);
void FixOldWaypoints(void);
void UpdateAllWaypointSigns(void);
void UpdateAllWaypointCustomGraphics(void);

#endif /* WAYPOINT_H */