Files
@ r7473:b9020aa56336
Branch filter:
Location: cpp/openttd-patchpack/source/src/road.h - annotation
r7473:b9020aa56336
5.3 KiB
text/x-c
(svn r10980) -Fix [FS#1158] : This will hopefully fix the case of an assert that happens when an industry uses a special gfx index (tile spec 0xFF). This 0xFF is the sentinel of a special check done for oil rigs, where water need to be around, but no tile will be constructed on it.
Problem is that the upper limit of gfx tiles is currently at 175. So, of course the system will assert with 255 ;)
Problem is that the upper limit of gfx tiles is currently at 175. So, of course the system will assert with 255 ;)
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 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 | r5475:3f5cd13d1b63 r5475:3f5cd13d1b63 r6393:f9322fdf4c2c r6393:f9322fdf4c2c r5475:3f5cd13d1b63 r5475:3f5cd13d1b63 r5475:3f5cd13d1b63 r5587:034e5e185dc2 r5587:034e5e185dc2 r6661:a60bd28b4b57 r6661:a60bd28b4b57 r7395:9b2d0a909adf r7395:9b2d0a909adf r6661:a60bd28b4b57 r6661:a60bd28b4b57 r7395:9b2d0a909adf r7395:9b2d0a909adf r7395:9b2d0a909adf r7395:9b2d0a909adf r7395:9b2d0a909adf r6661:a60bd28b4b57 r6661:a60bd28b4b57 r6661:a60bd28b4b57 r6661:a60bd28b4b57 r6661:a60bd28b4b57 r7395:9b2d0a909adf r6661:a60bd28b4b57 r6661:a60bd28b4b57 r7395:9b2d0a909adf r7395:9b2d0a909adf r7395:9b2d0a909adf r7395:9b2d0a909adf r7395:9b2d0a909adf r7395:9b2d0a909adf r7395:9b2d0a909adf r7395:9b2d0a909adf r6661:a60bd28b4b57 r6661:a60bd28b4b57 r6661:a60bd28b4b57 r6661:a60bd28b4b57 r6661:a60bd28b4b57 r6661:a60bd28b4b57 r6661:a60bd28b4b57 r6661:a60bd28b4b57 r6661:a60bd28b4b57 r6661:a60bd28b4b57 r6691:9c52dabf0c18 r6661:a60bd28b4b57 r6661:a60bd28b4b57 r6661:a60bd28b4b57 r6661:a60bd28b4b57 r6661:a60bd28b4b57 r6661:a60bd28b4b57 r6661:a60bd28b4b57 r6661:a60bd28b4b57 r6661:a60bd28b4b57 r6691:9c52dabf0c18 r6661:a60bd28b4b57 r6661:a60bd28b4b57 r6661:a60bd28b4b57 r6661:a60bd28b4b57 r7395:9b2d0a909adf r7395:9b2d0a909adf r7395:9b2d0a909adf r6661:a60bd28b4b57 r6661:a60bd28b4b57 r6661:a60bd28b4b57 r6661:a60bd28b4b57 r6661:a60bd28b4b57 r6661:a60bd28b4b57 r7395:9b2d0a909adf r7395:9b2d0a909adf r7395:9b2d0a909adf r7395:9b2d0a909adf r7395:9b2d0a909adf r7395:9b2d0a909adf r7395:9b2d0a909adf r7395:9b2d0a909adf r7395:9b2d0a909adf r6661:a60bd28b4b57 r6661:a60bd28b4b57 r6661:a60bd28b4b57 r6661:a60bd28b4b57 r6661:a60bd28b4b57 r7395:9b2d0a909adf r7395:9b2d0a909adf r7395:9b2d0a909adf r7395:9b2d0a909adf r7395:9b2d0a909adf r7395:9b2d0a909adf r6248:b940b09d7ab8 r7395:9b2d0a909adf r7395:9b2d0a909adf r7395:9b2d0a909adf r7395:9b2d0a909adf r7395:9b2d0a909adf r7395:9b2d0a909adf r7395:9b2d0a909adf r7395:9b2d0a909adf r6248:b940b09d7ab8 r5475:3f5cd13d1b63 r5587:034e5e185dc2 r5587:034e5e185dc2 r7395:9b2d0a909adf r7395:9b2d0a909adf r7395:9b2d0a909adf r7395:9b2d0a909adf r7395:9b2d0a909adf r7395:9b2d0a909adf r7395:9b2d0a909adf r7395:9b2d0a909adf r7395:9b2d0a909adf r5475:3f5cd13d1b63 r5475:3f5cd13d1b63 r5475:3f5cd13d1b63 r5475:3f5cd13d1b63 r5475:3f5cd13d1b63 r7395:9b2d0a909adf r7395:9b2d0a909adf r7395:9b2d0a909adf r7395:9b2d0a909adf r7395:9b2d0a909adf r7395:9b2d0a909adf r7395:9b2d0a909adf r7395:9b2d0a909adf r7395:9b2d0a909adf r5475:3f5cd13d1b63 r5475:3f5cd13d1b63 r5475:3f5cd13d1b63 r5475:3f5cd13d1b63 r5475:3f5cd13d1b63 r7395:9b2d0a909adf r7395:9b2d0a909adf r7395:9b2d0a909adf r7395:9b2d0a909adf r7395:9b2d0a909adf r6009:d2757f681649 r6009:d2757f681649 r6009:d2757f681649 r6009:d2757f681649 r6009:d2757f681649 r7395:9b2d0a909adf r7395:9b2d0a909adf r7395:9b2d0a909adf r7395:9b2d0a909adf r7395:9b2d0a909adf r6009:d2757f681649 r6009:d2757f681649 r6009:d2757f681649 r6009:d2757f681649 r6009:d2757f681649 r6116:7fce3188a378 r6116:7fce3188a378 r6116:7fce3188a378 r6116:7fce3188a378 r6116:7fce3188a378 r6116:7fce3188a378 r6661:a60bd28b4b57 r6116:7fce3188a378 r6116:7fce3188a378 r6661:a60bd28b4b57 r6116:7fce3188a378 r7395:9b2d0a909adf r7395:9b2d0a909adf r7395:9b2d0a909adf r7395:9b2d0a909adf r7395:9b2d0a909adf r6691:9c52dabf0c18 r6691:9c52dabf0c18 r5475:3f5cd13d1b63 | /* $Id$ */
/** @file road.h */
#ifndef ROAD_H
#define ROAD_H
#include "helpers.hpp"
/**
* The different roadtypes we support
*
* @note currently only ROADTYPE_ROAD and ROADTYPE_TRAM are supported.
*/
enum RoadType {
ROADTYPE_ROAD = 0, ///< Basic road type
ROADTYPE_TRAM = 1, ///< Trams
ROADTYPE_HWAY = 2, ///< Only a placeholder. Not sure what we are going to do with this road type.
ROADTYPE_END, ///< Used for iterations
INVALID_ROADTYPE = 0xFF ///< flag for invalid roadtype
};
DECLARE_POSTFIX_INCREMENT(RoadType);
/**
* The different roadtypes we support, but then a bitmask of them
* @note currently only roadtypes with ROADTYPE_ROAD and ROADTYPE_TRAM are supported.
*/
enum RoadTypes {
ROADTYPES_NONE = 0, ///< No roadtypes
ROADTYPES_ROAD = 1 << ROADTYPE_ROAD, ///< Road
ROADTYPES_TRAM = 1 << ROADTYPE_TRAM, ///< Trams
ROADTYPES_HWAY = 1 << ROADTYPE_HWAY, ///< Highway (or whatever substitute)
ROADTYPES_ROADTRAM = ROADTYPES_ROAD | ROADTYPES_TRAM, ///< Road + trams
ROADTYPES_ROADHWAY = ROADTYPES_ROAD | ROADTYPES_HWAY, ///< Road + highway (or whatever substitute)
ROADTYPES_TRAMHWAY = ROADTYPES_TRAM | ROADTYPES_HWAY, ///< Trams + highway (or whatever substitute)
ROADTYPES_ALL = ROADTYPES_ROAD | ROADTYPES_TRAM | ROADTYPES_HWAY, ///< Road + trams + highway (or whatever substitute)
};
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
*
* @param rt the roadtype to get the roadtypes from
* @return the roadtypes with the given roadtype
*/
static inline RoadTypes RoadTypeToRoadTypes(RoadType rt)
{
return (RoadTypes)(1 << rt);
}
/**
* Returns the RoadTypes which are not present in the given RoadTypes
*
* This function returns the complement of a given RoadTypes.
*
* @param r The given RoadTypes
* @return The complement of the given RoadTypes
* @note The unused value ROADTYPES_HWAY will be used, too.
*/
static inline RoadTypes ComplementRoadTypes(RoadTypes r)
{
return (RoadTypes)(ROADTYPES_ALL ^ r);
}
/**
* Enumeration for the road parts on a tile.
*
* This enumeration defines the possible road parts which
* can be build on a tile.
*/
enum RoadBits {
ROAD_NONE = 0U, ///< No road-part is build
ROAD_NW = 1U, ///< North-west part
ROAD_SW = 2U, ///< South-west part
ROAD_SE = 4U, ///< South-east part
ROAD_NE = 8U, ///< North-east part
ROAD_X = ROAD_SW | ROAD_NE, ///< Full road along the x-axis (south-west + north-east)
ROAD_Y = ROAD_NW | ROAD_SE, ///< Full road along the y-axis (north-west + south-east)
ROAD_ALL = ROAD_X | ROAD_Y ///< Full 4-way crossing
};
DECLARE_ENUM_AS_BIT_SET(RoadBits);
/**
* Calculate the complement of a RoadBits value
*
* Simply flips all bits in the RoadBits value to get the complement
* of the RoadBits.
*
* @param r The given RoadBits value
* @return the complement
*/
static inline RoadBits ComplementRoadBits(RoadBits r)
{
return (RoadBits)(ROAD_ALL ^ r);
}
/**
* Create the road-part which belongs to the given DiagDirection
*
* This function returns a RoadBits value which belongs to
* the given DiagDirection.
*
* @param d The DiagDirection
* @return The result RoadBits which the selected road-part set
*/
static inline RoadBits DiagDirToRoadBits(DiagDirection d)
{
return (RoadBits)(1U << (3 ^ d));
}
/**
* Checks whether the trackdir means that we are reversing.
* @param dir the trackdir to check
* @return true if it is a reversing road trackdir
*/
static inline bool IsReversingRoadTrackdir(Trackdir dir)
{
return (dir & 0x07) >= 6;
}
/**
* Checks whether the given trackdir is a straight road
* @param dir the trackdir to check
* @return true if it is a straight road trackdir
*/
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);
/**
* Draw the catenary for tram road bits
* @param ti information about the tile (position, slope)
* @param tram the roadbits to draw the catenary for
*/
void DrawTramCatenary(TileInfo *ti, RoadBits tram);
#endif /* ROAD_H */
|