waypoint.h
changeset 1542 2ca6d1624e6d
child 1718 cef0773365eb
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/waypoint.h	Thu Mar 24 17:03:37 2005 +0000
@@ -0,0 +1,60 @@
+#ifndef WAYPOINT_H
+#define WAYPOINT_H
+
+#include "pool.h"
+
+struct Waypoint {
+	TileIndex xy;
+	uint16 index;
+
+	uint16 town_index;
+	byte town_cn;          // The Nth waypoint for this town (consecutive number)
+	StringID string;       // If this is zero, town + town_cn is used for naming
+
+	ViewportSign sign;
+	uint16 build_date;
+	byte stat_id;
+	byte deleted;          // this is a delete counter. when it reaches 0, the waypoint struct is deleted.
+};
+
+enum {
+	RAIL_TYPE_WAYPOINT = 0xC4,
+	RAIL_WAYPOINT_TRACK_MASK = 1,
+};
+
+extern MemoryPool _waypoint_pool;
+
+/**
+ * Get the pointer to the waypoint with index 'index'
+ */
+static inline Waypoint *GetWaypoint(uint index)
+{
+	return (Waypoint*)GetItemFromPool(&_waypoint_pool, index);
+}
+
+/**
+ * Get the current size of the WaypointPool
+ */
+static inline uint16 GetWaypointPoolSize(void)
+{
+	return _waypoint_pool.total_items;
+}
+
+#define FOR_ALL_WAYPOINTS_FROM(wp, start) for (wp = GetWaypoint(start); wp != NULL; wp = (wp->index + 1 < GetWaypointPoolSize()) ? GetWaypoint(wp->index + 1) : NULL)
+#define FOR_ALL_WAYPOINTS(wp) FOR_ALL_WAYPOINTS_FROM(wp, 0)
+
+static inline bool IsRailWaypoint(byte m5)
+{
+	return (m5 & 0xFC) == 0xC4;
+}
+
+int32 RemoveTrainWaypoint(uint tile, uint32 flags, bool justremove);
+Station *ComposeWaypointStation(uint tile);
+Waypoint *GetWaypointByTile(TileIndex tile);
+void ShowRenameWaypointWindow(Waypoint *cp);
+void DrawWaypointSprite(int x, int y, int image, int railtype);
+void UpdateWaypointSign(Waypoint *cp);
+void FixOldWaypoints(void);
+void UpdateAllWaypointSigns(void);
+
+#endif /* WAYPOINT_H */