track_type.h

Go to the documentation of this file.
00001 /* $Id: track_type.h 17248 2009-08-21 20:21:05Z rubidium $ */
00002 
00003 /*
00004  * This file is part of OpenTTD.
00005  * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
00006  * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
00007  * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
00008  */
00009 
00012 #ifndef TRACK_TYPE_H
00013 #define TRACK_TYPE_H
00014 
00015 #include "core/enum_type.hpp"
00016 
00021 enum Track {
00022   TRACK_BEGIN = 0,        
00023   TRACK_X     = 0,        
00024   TRACK_Y     = 1,        
00025   TRACK_UPPER = 2,        
00026   TRACK_LOWER = 3,        
00027   TRACK_LEFT  = 4,        
00028   TRACK_RIGHT = 5,        
00029   TRACK_END,              
00030   INVALID_TRACK = 0xFF    
00031 };
00032 
00034 DECLARE_POSTFIX_INCREMENT(Track);
00036 template <> struct EnumPropsT<Track> : MakeEnumPropsT<Track, byte, TRACK_BEGIN, TRACK_END, INVALID_TRACK> {};
00037 typedef TinyEnumT<Track> TrackByte;
00038 
00039 
00041 enum TrackBits {
00042   TRACK_BIT_NONE    = 0U,                                                 
00043   TRACK_BIT_X       = 1U << TRACK_X,                                      
00044   TRACK_BIT_Y       = 1U << TRACK_Y,                                      
00045   TRACK_BIT_UPPER   = 1U << TRACK_UPPER,                                  
00046   TRACK_BIT_LOWER   = 1U << TRACK_LOWER,                                  
00047   TRACK_BIT_LEFT    = 1U << TRACK_LEFT,                                   
00048   TRACK_BIT_RIGHT   = 1U << TRACK_RIGHT,                                  
00049   TRACK_BIT_CROSS   = TRACK_BIT_X     | TRACK_BIT_Y,                      
00050   TRACK_BIT_HORZ    = TRACK_BIT_UPPER | TRACK_BIT_LOWER,                  
00051   TRACK_BIT_VERT    = TRACK_BIT_LEFT  | TRACK_BIT_RIGHT,                  
00052   TRACK_BIT_3WAY_NE = TRACK_BIT_X     | TRACK_BIT_UPPER | TRACK_BIT_RIGHT,
00053   TRACK_BIT_3WAY_SE = TRACK_BIT_Y     | TRACK_BIT_LOWER | TRACK_BIT_RIGHT,
00054   TRACK_BIT_3WAY_SW = TRACK_BIT_X     | TRACK_BIT_LOWER | TRACK_BIT_LEFT, 
00055   TRACK_BIT_3WAY_NW = TRACK_BIT_Y     | TRACK_BIT_UPPER | TRACK_BIT_LEFT, 
00056   TRACK_BIT_ALL     = TRACK_BIT_CROSS | TRACK_BIT_HORZ  | TRACK_BIT_VERT, 
00057   TRACK_BIT_MASK    = 0x3FU,                                              
00058   TRACK_BIT_WORMHOLE = 0x40U,                                             
00059   TRACK_BIT_DEPOT   = 0x80U,                                              
00060   INVALID_TRACK_BIT = 0xFF                                                
00061 };
00062 DECLARE_ENUM_AS_BIT_SET(TrackBits);
00063 typedef SimpleTinyEnumT<TrackBits, byte> TrackBitsByte;
00064 
00074 enum Trackdir {
00075   TRACKDIR_BEGIN    =  0,         
00076   TRACKDIR_X_NE     =  0,         
00077   TRACKDIR_Y_SE     =  1,         
00078   TRACKDIR_UPPER_E  =  2,         
00079   TRACKDIR_LOWER_E  =  3,         
00080   TRACKDIR_LEFT_S   =  4,         
00081   TRACKDIR_RIGHT_S  =  5,         
00082   TRACKDIR_RVREV_NE =  6,         
00083   TRACKDIR_RVREV_SE =  7,         
00084   TRACKDIR_X_SW     =  8,         
00085   TRACKDIR_Y_NW     =  9,         
00086   TRACKDIR_UPPER_W  = 10,         
00087   TRACKDIR_LOWER_W  = 11,         
00088   TRACKDIR_LEFT_N   = 12,         
00089   TRACKDIR_RIGHT_N  = 13,         
00090   TRACKDIR_RVREV_SW = 14,         
00091   TRACKDIR_RVREV_NW = 15,         
00092   TRACKDIR_END,                   
00093   INVALID_TRACKDIR  = 0xFF,       
00094 };
00095 
00097 template <> struct EnumPropsT<Trackdir> : MakeEnumPropsT<Trackdir, byte, TRACKDIR_BEGIN, TRACKDIR_END, INVALID_TRACKDIR> {};
00098 typedef TinyEnumT<Trackdir> TrackdirByte;
00099 
00106 enum TrackdirBits {
00107   TRACKDIR_BIT_NONE     = 0x0000, 
00108   TRACKDIR_BIT_X_NE     = 0x0001, 
00109   TRACKDIR_BIT_Y_SE     = 0x0002, 
00110   TRACKDIR_BIT_UPPER_E  = 0x0004, 
00111   TRACKDIR_BIT_LOWER_E  = 0x0008, 
00112   TRACKDIR_BIT_LEFT_S   = 0x0010, 
00113   TRACKDIR_BIT_RIGHT_S  = 0x0020, 
00114   /* Again, note the two missing values here. This enables trackdir -> track conversion by doing (trackdir & 0xFF) */
00115   TRACKDIR_BIT_X_SW     = 0x0100, 
00116   TRACKDIR_BIT_Y_NW     = 0x0200, 
00117   TRACKDIR_BIT_UPPER_W  = 0x0400, 
00118   TRACKDIR_BIT_LOWER_W  = 0x0800, 
00119   TRACKDIR_BIT_LEFT_N   = 0x1000, 
00120   TRACKDIR_BIT_RIGHT_N  = 0x2000, 
00121   TRACKDIR_BIT_MASK     = 0x3F3F, 
00122   INVALID_TRACKDIR_BIT  = 0xFFFF, 
00123 };
00124 DECLARE_ENUM_AS_BIT_SET(TrackdirBits);
00125 typedef SimpleTinyEnumT<TrackdirBits, uint16> TrackdirBitsShort;
00126 
00127 typedef uint32 TrackStatus;
00128 
00129 #endif /* TRACK_TYPE_H */

Generated on Tue Jan 5 21:03:00 2010 for OpenTTD by  doxygen 1.5.6