diff -r 5a8b295aa345 -r 4cc327ad39d5 src/road.h --- a/src/road.h Tue Mar 27 23:27:27 2007 +0000 +++ b/src/road.h Sat Jun 02 19:59:29 2007 +0000 @@ -1,10 +1,74 @@ /* $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, @@ -46,8 +110,11 @@ * @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); +bool CheckAllowRemoveRoad(TileIndex tile, RoadBits remove, Owner owner, bool *edge_road, RoadType rt); + +void DrawTramCatenary(TileInfo *ti, RoadBits tram); #endif /* ROAD_H */