rubidium@9723: /* $Id$ */ rubidium@9723: rubidium@9723: /** @file rail_type.h The different types of rail */ rubidium@9723: rubidium@9723: #ifndef RAIL_TYPE_H rubidium@9723: #define RAIL_TYPE_H rubidium@9723: rubidium@9724: #include "core/enum_type.hpp" rubidium@9724: rubidium@9723: /** rubidium@9723: * Enumeration for all possible railtypes. rubidium@9723: * rubidium@9723: * This enumeration defines all 4 possible railtypes. rubidium@9723: */ rubidium@9723: enum RailType { rubidium@9723: RAILTYPE_BEGIN = 0, ///< Used for iterations rubidium@9723: RAILTYPE_RAIL = 0, ///< Standard non-electric rails rubidium@9723: RAILTYPE_ELECTRIC = 1, ///< Electric rails rubidium@9723: RAILTYPE_MONO = 2, ///< Monorail rubidium@9723: RAILTYPE_MAGLEV = 3, ///< Maglev rubidium@9723: RAILTYPE_END, ///< Used for iterations rubidium@9723: INVALID_RAILTYPE = 0xFF ///< Flag for invalid railtype rubidium@9723: }; rubidium@9723: rubidium@9723: /** Allow incrementing of Track variables */ rubidium@9723: DECLARE_POSTFIX_INCREMENT(RailType); rubidium@9723: /** Define basic enum properties */ rubidium@9723: template <> struct EnumPropsT : MakeEnumPropsT {}; rubidium@9723: typedef TinyEnumT RailTypeByte; rubidium@9723: rubidium@9724: /** rubidium@9724: * The different roadtypes we support, but then a bitmask of them rubidium@9724: */ rubidium@9724: enum RailTypes { rubidium@9724: RAILTYPES_NONE = 0, ///< No rail types rubidium@9724: RAILTYPES_RAIL = 1 << RAILTYPE_RAIL, ///< Non-electrified rails rubidium@9724: RAILTYPES_ELECTRIC = 1 << RAILTYPE_ELECTRIC, ///< Electrified rails rubidium@9724: RAILTYPES_MONO = 1 << RAILTYPE_MONO, ///< Monorail! rubidium@9724: RAILTYPES_MAGLEV = 1 << RAILTYPE_MAGLEV, ///< Ever fast maglev rubidium@9724: RAILTYPES_ALL = RAILTYPES_RAIL | RAILTYPES_ELECTRIC | RAILTYPES_MONO | RAILTYPES_MAGLEV, ///< All of them rubidium@9724: RAILTYPES_END, ///< Used for iterations? rubidium@9724: INVALID_RAILTYPES = 0xFF ///< Invalid railtypes rubidium@9724: }; rubidium@9724: DECLARE_ENUM_AS_BIT_SET(RailTypes); rubidium@9724: template <> struct EnumPropsT : MakeEnumPropsT {}; rubidium@9724: typedef TinyEnumT RailTypesByte; rubidium@9724: rubidium@9723: #endif /* RAIL_TYPE_H */