src/rail_type.h
branchnoai
changeset 9724 b39bc69bb2f2
parent 9723 eee46cb39750
equal deleted inserted replaced
9723:eee46cb39750 9724:b39bc69bb2f2
     2 
     2 
     3 /** @file rail_type.h The different types of rail */
     3 /** @file rail_type.h The different types of rail */
     4 
     4 
     5 #ifndef RAIL_TYPE_H
     5 #ifndef RAIL_TYPE_H
     6 #define RAIL_TYPE_H
     6 #define RAIL_TYPE_H
       
     7 
       
     8 #include "core/enum_type.hpp"
     7 
     9 
     8 /**
    10 /**
     9  * Enumeration for all possible railtypes.
    11  * Enumeration for all possible railtypes.
    10  *
    12  *
    11  * This enumeration defines all 4 possible railtypes.
    13  * This enumeration defines all 4 possible railtypes.
    18 	RAILTYPE_MAGLEV   = 3,          ///< Maglev
    20 	RAILTYPE_MAGLEV   = 3,          ///< Maglev
    19 	RAILTYPE_END,                   ///< Used for iterations
    21 	RAILTYPE_END,                   ///< Used for iterations
    20 	INVALID_RAILTYPE  = 0xFF        ///< Flag for invalid railtype
    22 	INVALID_RAILTYPE  = 0xFF        ///< Flag for invalid railtype
    21 };
    23 };
    22 
    24 
    23 typedef byte RailTypeMask;
       
    24 
       
    25 /** Allow incrementing of Track variables */
    25 /** Allow incrementing of Track variables */
    26 DECLARE_POSTFIX_INCREMENT(RailType);
    26 DECLARE_POSTFIX_INCREMENT(RailType);
    27 /** Define basic enum properties */
    27 /** Define basic enum properties */
    28 template <> struct EnumPropsT<RailType> : MakeEnumPropsT<RailType, byte, RAILTYPE_BEGIN, RAILTYPE_END, INVALID_RAILTYPE> {};
    28 template <> struct EnumPropsT<RailType> : MakeEnumPropsT<RailType, byte, RAILTYPE_BEGIN, RAILTYPE_END, INVALID_RAILTYPE> {};
    29 typedef TinyEnumT<RailType> RailTypeByte;
    29 typedef TinyEnumT<RailType> RailTypeByte;
    30 
    30 
       
    31 /**
       
    32  * The different roadtypes we support, but then a bitmask of them
       
    33  */
       
    34 enum RailTypes {
       
    35 	RAILTYPES_NONE     = 0,                      ///< No rail types
       
    36 	RAILTYPES_RAIL     = 1 << RAILTYPE_RAIL,     ///< Non-electrified rails
       
    37 	RAILTYPES_ELECTRIC = 1 << RAILTYPE_ELECTRIC, ///< Electrified rails
       
    38 	RAILTYPES_MONO     = 1 << RAILTYPE_MONO,     ///< Monorail!
       
    39 	RAILTYPES_MAGLEV   = 1 << RAILTYPE_MAGLEV,   ///< Ever fast maglev
       
    40 	RAILTYPES_ALL      = RAILTYPES_RAIL | RAILTYPES_ELECTRIC | RAILTYPES_MONO | RAILTYPES_MAGLEV, ///< All of them
       
    41 	RAILTYPES_END,                               ///< Used for iterations?
       
    42 	INVALID_RAILTYPES  = 0xFF                    ///< Invalid railtypes
       
    43 };
       
    44 DECLARE_ENUM_AS_BIT_SET(RailTypes);
       
    45 template <> struct EnumPropsT<RailTypes> : MakeEnumPropsT<RailTypes, byte, RAILTYPES_NONE, RAILTYPES_END, INVALID_RAILTYPES> {};
       
    46 typedef TinyEnumT<RailTypes> RailTypesByte;
       
    47 
    31 #endif /* RAIL_TYPE_H */
    48 #endif /* RAIL_TYPE_H */