ai_tile.hpp

Go to the documentation of this file.
00001 /* $Id: ai_tile.hpp 18955 2010-01-29 23:56:42Z yexo $ */
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 AI_TILE_HPP
00013 #define AI_TILE_HPP
00014 
00015 #include "ai_abstractlist.hpp"
00016 #include "ai_error.hpp"
00017 #include "ai_company.hpp"
00018 
00022 class AITile : public AIObject {
00023 public:
00024   static const char *GetClassName() { return "AITile"; }
00025 
00029   enum ErrorMessages {
00030 
00032     ERR_TILE_BASE = AIError::ERR_CAT_TILE << AIError::ERR_CAT_BIT_SIZE,
00033 
00035     ERR_TILE_TOO_HIGH,                     // [STR_ERROR_ALREADY_AT_SEA_LEVEL]
00036 
00038     ERR_TILE_TOO_LOW,                      // [STR_ERROR_ALREADY_AT_SEA_LEVEL]
00039 
00041     ERR_AREA_ALREADY_FLAT,                 // [STR_ERROR_ALREADY_LEVELLED]
00042 
00044     ERR_EXCAVATION_WOULD_DAMAGE,           // [STR_ERROR_EXCAVATION_WOULD_DAMAGE]
00045   };
00046 
00050   enum Corner {
00051     CORNER_W       = 0,      
00052     CORNER_S       = 1,      
00053     CORNER_E       = 2,      
00054     CORNER_N       = 3,      
00055 
00056     CORNER_INVALID = 0xFF,
00057   };
00058 
00066   enum Slope {
00067     /* Values are important, as they represent the internal state of the game. */
00068     SLOPE_FLAT     = 0x00,                                  
00069     SLOPE_W        = 1 << CORNER_W,                         
00070     SLOPE_S        = 1 << CORNER_S,                         
00071     SLOPE_E        = 1 << CORNER_E,                         
00072     SLOPE_N        = 1 << CORNER_N,                         
00073     SLOPE_STEEP    = 0x10,                                  
00074     SLOPE_NW       = SLOPE_N | SLOPE_W,                     
00075     SLOPE_SW       = SLOPE_S | SLOPE_W,                     
00076     SLOPE_SE       = SLOPE_S | SLOPE_E,                     
00077     SLOPE_NE       = SLOPE_N | SLOPE_E,                     
00078     SLOPE_EW       = SLOPE_E | SLOPE_W,                     
00079     SLOPE_NS       = SLOPE_N | SLOPE_S,                     
00080     SLOPE_ELEVATED = SLOPE_N | SLOPE_E | SLOPE_S | SLOPE_W, 
00081     SLOPE_NWS      = SLOPE_N | SLOPE_W | SLOPE_S,           
00082     SLOPE_WSE      = SLOPE_W | SLOPE_S | SLOPE_E,           
00083     SLOPE_SEN      = SLOPE_S | SLOPE_E | SLOPE_N,           
00084     SLOPE_ENW      = SLOPE_E | SLOPE_N | SLOPE_W,           
00085     SLOPE_STEEP_W  = SLOPE_STEEP | SLOPE_NWS,               
00086     SLOPE_STEEP_S  = SLOPE_STEEP | SLOPE_WSE,               
00087     SLOPE_STEEP_E  = SLOPE_STEEP | SLOPE_SEN,               
00088     SLOPE_STEEP_N  = SLOPE_STEEP | SLOPE_ENW,               
00089 
00090     SLOPE_INVALID  = 0xFFFF,                                
00091   };
00092 
00096   enum TransportType {
00097     /* Values are important, as they represent the internal state of the game. */
00098     TRANSPORT_RAIL    =  0, 
00099     TRANSPORT_ROAD    =  1, 
00100     TRANSPORT_WATER   =  2, 
00101     TRANSPORT_AIR     =  3, 
00102 
00103     TRANSPORT_INVALID = -1, 
00104   };
00105 
00109   enum BuildType {
00110     BT_FOUNDATION,   
00111     BT_TERRAFORM,    
00112     BT_BUILD_TREES,  
00113     BT_CLEAR_GRASS,  
00114     BT_CLEAR_ROUGH,  
00115     BT_CLEAR_ROCKY,  
00116     BT_CLEAR_FIELDS, 
00117     BT_CLEAR_HOUSE,  
00118   };
00119 
00131   static bool IsBuildable(TileIndex tile);
00132 
00142   static bool IsBuildableRectangle(TileIndex tile, uint width, uint height);
00143 
00150   static bool IsWaterTile(TileIndex tile);
00151 
00160   static bool IsCoastTile(TileIndex tile);
00161 
00168   static bool IsStationTile(TileIndex tile);
00169 
00177   static bool IsSteepSlope(Slope slope);
00178 
00187   static bool IsHalftileSlope(Slope slope);
00188 
00195   static bool HasTreeOnTile(TileIndex tile);
00196 
00203   static bool IsFarmTile(TileIndex tile);
00204 
00211   static bool IsRockTile(TileIndex tile);
00212 
00219   static bool IsRoughTile(TileIndex tile);
00220 
00227   static bool IsSnowTile(TileIndex tile);
00228 
00235   static bool IsDesertTile(TileIndex tile);
00236 
00244   static Slope GetSlope(TileIndex tile);
00245 
00255   static Slope GetComplementSlope(Slope slope);
00256 
00264   static int32 GetMinHeight(TileIndex tile);
00265 
00273   static int32 GetMaxHeight(TileIndex tile);
00274 
00283   static int32 GetCornerHeight(TileIndex tile, Corner corner);
00284 
00292   static AICompany::CompanyID GetOwner(TileIndex tile);
00293 
00306   static bool HasTransportType(TileIndex tile, TransportType transport_type);
00307 
00323   static int32 GetCargoAcceptance(TileIndex tile, CargoID cargo_type, int width, int height, int radius);
00324 
00339   static int32 GetCargoProduction(TileIndex tile, CargoID cargo_type, int width, int height, int radius);
00340 
00347   static int32 GetDistanceManhattanToTile(TileIndex tile_from, TileIndex tile_to);
00348 
00355   static int32 GetDistanceSquareToTile(TileIndex tile_from, TileIndex tile_to);
00356 
00371   static bool RaiseTile(TileIndex tile, int32 slope);
00372 
00387   static bool LowerTile(TileIndex tile, int32 slope);
00388 
00405   static bool LevelTiles(TileIndex start_tile, TileIndex end_tile);
00406 
00414   static bool DemolishTile(TileIndex tile);
00415 
00422   static bool PlantTree(TileIndex tile);
00423 
00434   static bool PlantTreeRectangle(TileIndex tile, uint width, uint height);
00435 
00443   static bool IsWithinTownInfluence(TileIndex tile, TownID town_id);
00444 
00451   static TownID GetClosestTown(TileIndex tile);
00452 
00458   static Money GetBuildCost(BuildType build_type);
00459 };
00460 
00461 #endif /* AI_TILE_HPP */

Generated on Fri Apr 30 21:55:18 2010 for OpenTTD by  doxygen 1.6.1