house.h

Go to the documentation of this file.
00001 /* $Id: house.h 21845 2011-01-18 22:31:06Z 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 HOUSE_H
00013 #define HOUSE_H
00014 
00015 #include "strings_type.h"
00016 #include "cargo_type.h"
00017 #include "economy_type.h"
00018 #include "date_type.h"
00019 #include "house_type.h"
00020 #include "newgrf_animation_type.h"
00021 #include "newgrf_commons.h"
00022 
00027 static const byte TOWN_HOUSE_COMPLETED = 3;
00028 
00029 static const uint HOUSE_NO_CLASS      = 0;
00030 static const HouseID NEW_HOUSE_OFFSET = 110;
00031 static const HouseID HOUSE_MAX        = 512;
00032 static const HouseID INVALID_HOUSE_ID = 0xFFFF;
00033 
00038 static const uint HOUSE_CLASS_MAX  = HOUSE_MAX - NEW_HOUSE_OFFSET + 1;
00039 
00040 enum BuildingFlags {
00041   TILE_NO_FLAG         =       0,
00042   TILE_SIZE_1x1        = 1U << 0,
00043   TILE_NOT_SLOPED      = 1U << 1,
00044   TILE_SIZE_2x1        = 1U << 2,
00045   TILE_SIZE_1x2        = 1U << 3,
00046   TILE_SIZE_2x2        = 1U << 4,
00047   BUILDING_IS_ANIMATED = 1U << 5,
00048   BUILDING_IS_CHURCH   = 1U << 6,
00049   BUILDING_IS_STADIUM  = 1U << 7,
00050   BUILDING_HAS_1_TILE  = TILE_SIZE_1x1 | TILE_SIZE_2x1 | TILE_SIZE_1x2 | TILE_SIZE_2x2,
00051   BUILDING_HAS_2_TILES = TILE_SIZE_2x1 | TILE_SIZE_1x2 | TILE_SIZE_2x2,
00052   BUILDING_2_TILES_X   = TILE_SIZE_2x1 | TILE_SIZE_2x2,
00053   BUILDING_2_TILES_Y   = TILE_SIZE_1x2 | TILE_SIZE_2x2,
00054   BUILDING_HAS_4_TILES = TILE_SIZE_2x2,
00055 };
00056 DECLARE_ENUM_AS_BIT_SET(BuildingFlags)
00057 
00058 enum HouseZonesBits {
00059   HZB_BEGIN     = 0,
00060   HZB_TOWN_EDGE = 0,
00061   HZB_TOWN_OUTSKIRT,
00062   HZB_TOWN_OUTER_SUBURB,
00063   HZB_TOWN_INNER_SUBURB,
00064   HZB_TOWN_CENTRE,
00065   HZB_END,
00066 };
00067 assert_compile(HZB_END == 5);
00068 
00069 DECLARE_POSTFIX_INCREMENT(HouseZonesBits)
00070 
00071 enum HouseZones {                  
00072   HZ_NOZNS             = 0x0000,  
00073   HZ_ZON1              = 1U << HZB_TOWN_EDGE,    
00074   HZ_ZON2              = 1U << HZB_TOWN_OUTSKIRT,
00075   HZ_ZON3              = 1U << HZB_TOWN_OUTER_SUBURB,
00076   HZ_ZON4              = 1U << HZB_TOWN_INNER_SUBURB,
00077   HZ_ZON5              = 1U << HZB_TOWN_CENTRE,  
00078   HZ_ZONALL            = 0x001F,  
00079   HZ_SUBARTC_ABOVE     = 0x0800,  
00080   HZ_TEMP              = 0x1000,  
00081   HZ_SUBARTC_BELOW     = 0x2000,  
00082   HZ_SUBTROPIC         = 0x4000,  
00083   HZ_TOYLND            = 0x8000,  
00084   HZ_CLIMALL           = 0xF800,  
00085 };
00086 DECLARE_ENUM_AS_BIT_SET(HouseZones)
00087 
00088 enum HouseExtraFlags {
00089   NO_EXTRA_FLAG            =       0,
00090   BUILDING_IS_HISTORICAL   = 1U << 0,  
00091   BUILDING_IS_PROTECTED    = 1U << 1,  
00092   SYNCHRONISED_CALLBACK_1B = 1U << 2,  
00093   CALLBACK_1A_RANDOM_BITS  = 1U << 3,  
00094 };
00095 
00096 DECLARE_ENUM_AS_BIT_SET(HouseExtraFlags)
00097 
00098 struct HouseSpec {
00099   /* Standard properties */
00100   Year min_year;                     
00101   Year max_year;                     
00102   byte population;                   
00103   byte removal_cost;                 
00104   StringID building_name;            
00105   uint16 remove_rating_decrease;     
00106   byte mail_generation;              
00107   byte cargo_acceptance[3];          
00108   CargoID accepts_cargo[3];          
00109   BuildingFlags building_flags;      
00110   HouseZones building_availability;  
00111   bool enabled;                      
00112 
00113   /* NewHouses properties */
00114   GRFFileProps grf_prop;             
00115   uint16 callback_mask;              
00116   byte random_colour[4];             
00117   byte probability;                  
00118   HouseExtraFlags extra_flags;       
00119   HouseClassID class_id;             
00120   AnimationInfo animation;           
00121   byte processing_time;              
00122   byte minimum_life;                 
00123 
00124   Money GetRemovalCost() const;
00125 
00126   static FORCEINLINE HouseSpec *Get(size_t house_id)
00127   {
00128     assert(house_id < HOUSE_MAX);
00129     extern HouseSpec _house_specs[];
00130     return &_house_specs[house_id];
00131   }
00132 };
00133 
00139 static inline HouseID GetTranslatedHouseID(HouseID hid)
00140 {
00141   const HouseSpec *hs = HouseSpec::Get(hid);
00142   return hs->grf_prop.override == INVALID_HOUSE_ID ? hid : hs->grf_prop.override;
00143 }
00144 
00145 #endif /* HOUSE_H */

Generated on Sun May 15 19:20:08 2011 for OpenTTD by  doxygen 1.6.1