Files
@ r6811:1bece01dbf0a
Branch filter:
Location: cpp/openttd-patchpack/source/src/road.h
r6811:1bece01dbf0a
3.0 KiB
text/x-c
(svn r10050) -Codechange: make it a little easier to force a version number (for releases).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 | /* $Id$ */
/** @file road.h */
#ifndef ROAD_H
#define ROAD_H
#include "helpers.hpp"
/**
* The different roadtypes we support
* @note currently only ROADTYPE_ROAD is supported.
*/
enum RoadType {
ROADTYPE_ROAD = 0,
ROADTYPE_TRAM = 1,
ROADTYPE_HWAY = 2, ///< Only a placeholder. Not sure what we are going to do with this road type.
ROADTYPE_END,
INVALID_ROADTYPE = 0xFF
};
DECLARE_POSTFIX_INCREMENT(RoadType);
/**
* The different roadtypes we support, but then a bitmask of them
* @note currently only ROADTYPES_ROAD is supported.
*/
enum RoadTypes {
ROADTYPES_NONE = 0,
ROADTYPES_ROAD = 1 << ROADTYPE_ROAD,
ROADTYPES_TRAM = 1 << ROADTYPE_TRAM,
ROADTYPES_HWAY = 1 << ROADTYPE_HWAY,
ROADTYPES_ROADTRAM = ROADTYPES_ROAD | ROADTYPES_TRAM,
ROADTYPES_ROADHWAY = ROADTYPES_ROAD | ROADTYPES_HWAY,
ROADTYPES_TRAMHWAY = ROADTYPES_TRAM | ROADTYPES_HWAY,
ROADTYPES_ALL = ROADTYPES_ROAD | ROADTYPES_TRAM | ROADTYPES_HWAY,
};
DECLARE_ENUM_AS_BIT_SET(RoadTypes);
/**
* Whether the given roadtype is valid.
* @param rt the roadtype to check for validness
* @return true if and only if valid
*/
static inline bool IsValidRoadType(RoadType rt)
{
return rt == ROADTYPE_ROAD || rt == ROADTYPE_TRAM;
}
/**
* Are the given bits pointing to valid roadtypes?
* @param rts the roadtypes to check for validness
* @return true if and only if valid
*/
static inline bool AreValidRoadTypes(RoadTypes rts)
{
return HASBIT(rts, ROADTYPE_ROAD) || HASBIT(rts, ROADTYPE_TRAM);
}
/**
* Maps a RoadType to the corresponding RoadTypes value
*/
static inline RoadTypes RoadTypeToRoadTypes(RoadType rt)
{
return (RoadTypes)(1 << rt);
}
static inline RoadTypes ComplementRoadTypes(RoadTypes r)
{
return (RoadTypes)(ROADTYPES_ALL ^ r);
}
enum RoadBits {
ROAD_NONE = 0U,
ROAD_NW = 1U,
ROAD_SW = 2U,
ROAD_SE = 4U,
ROAD_NE = 8U,
ROAD_X = ROAD_SW | ROAD_NE,
ROAD_Y = ROAD_NW | ROAD_SE,
ROAD_ALL = ROAD_X | ROAD_Y
};
DECLARE_ENUM_AS_BIT_SET(RoadBits);
static inline RoadBits ComplementRoadBits(RoadBits r)
{
return (RoadBits)(ROAD_ALL ^ r);
}
static inline RoadBits DiagDirToRoadBits(DiagDirection d)
{
return (RoadBits)(1U << (3 ^ d));
}
/** 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;
}
/**
* 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?
* @param rt the road type to remove the bits from
* @return true when it is allowed to remove the road bits
*/
bool CheckAllowRemoveRoad(TileIndex tile, RoadBits remove, Owner owner, bool *edge_road, RoadType rt);
void DrawTramCatenary(TileInfo *ti, RoadBits tram);
#endif /* ROAD_H */
|