2006-04-12 05:26:36 +00:00
|
|
|
/* $Id$ */
|
|
|
|
|
2007-03-28 20:41:35 +00:00
|
|
|
/** @file road.h */
|
|
|
|
|
2006-04-12 05:26:36 +00:00
|
|
|
#ifndef ROAD_H
|
|
|
|
#define ROAD_H
|
|
|
|
|
2007-01-10 18:56:51 +00:00
|
|
|
#include "helpers.hpp"
|
|
|
|
|
2007-03-07 12:11:48 +00:00
|
|
|
enum RoadBits {
|
2007-01-10 18:56:51 +00:00
|
|
|
ROAD_NONE = 0U,
|
2006-05-09 10:35:13 +00:00
|
|
|
ROAD_NW = 1U,
|
|
|
|
ROAD_SW = 2U,
|
|
|
|
ROAD_SE = 4U,
|
|
|
|
ROAD_NE = 8U,
|
2006-04-12 05:26:36 +00:00
|
|
|
ROAD_X = ROAD_SW | ROAD_NE,
|
|
|
|
ROAD_Y = ROAD_NW | ROAD_SE,
|
|
|
|
ROAD_ALL = ROAD_X | ROAD_Y
|
2007-03-07 12:11:48 +00:00
|
|
|
};
|
2006-04-12 05:26:36 +00:00
|
|
|
|
2007-01-10 18:56:51 +00:00
|
|
|
DECLARE_ENUM_AS_BIT_SET(RoadBits);
|
|
|
|
|
2006-04-12 05:26:36 +00:00
|
|
|
static inline RoadBits ComplementRoadBits(RoadBits r)
|
|
|
|
{
|
2006-05-27 16:12:16 +00:00
|
|
|
return (RoadBits)(ROAD_ALL ^ r);
|
2006-04-12 05:26:36 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static inline RoadBits DiagDirToRoadBits(DiagDirection d)
|
|
|
|
{
|
2006-05-27 16:12:16 +00:00
|
|
|
return (RoadBits)(1U << (3 ^ d));
|
2006-04-12 05:26:36 +00:00
|
|
|
}
|
|
|
|
|
2007-02-14 10:33:36 +00:00
|
|
|
/** Checks whether the trackdir means that we are reversing */
|
|
|
|
static inline bool IsReversingRoadTrackdir(Trackdir dir)
|
|
|
|
{
|
|
|
|
return (dir & 0x07) >= 6;
|
|
|
|
}
|
|
|
|
|
|
|
|
/** Checks whether the given trackdir is a straight road */
|
|
|
|
static inline bool IsStraightRoadTrackdir(Trackdir dir)
|
|
|
|
{
|
|
|
|
return (dir & 0x06) == 0;
|
|
|
|
}
|
|
|
|
|
2007-02-23 00:17:46 +00:00
|
|
|
/**
|
|
|
|
* Is it allowed to remove the given road bits from the given tile?
|
|
|
|
* @param tile the tile to remove the road from
|
|
|
|
* @param remove the roadbits that are going to be removed
|
|
|
|
* @param owner the actual owner of the roadbits of the tile
|
|
|
|
* @param edge_road are the removed bits from a town?
|
|
|
|
* @return true when it is allowed to remove the road bits
|
|
|
|
*/
|
|
|
|
bool CheckAllowRemoveRoad(TileIndex tile, RoadBits remove, Owner owner, bool *edge_road);
|
|
|
|
|
2006-09-28 18:42:35 +00:00
|
|
|
#endif /* ROAD_H */
|