From afdb67a3534f85b4efbd3327ece8137211042d7b Mon Sep 17 00:00:00 2001 From: truebrain Date: Tue, 29 Nov 2011 23:07:38 +0000 Subject: (svn r23354) -Codechange: move all src/ai/api/ai_*.[hc]pp files to src/script/api/script_* (Rubidium) --- src/script/api/script_airport.hpp | 197 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 197 insertions(+) create mode 100644 src/script/api/script_airport.hpp (limited to 'src/script/api/script_airport.hpp') diff --git a/src/script/api/script_airport.hpp b/src/script/api/script_airport.hpp new file mode 100644 index 000000000..c60564526 --- /dev/null +++ b/src/script/api/script_airport.hpp @@ -0,0 +1,197 @@ +/* $Id$ */ + +/* + * This file is part of OpenTTD. + * 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. + * 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. + * 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 . + */ + +/** @file script_airport.hpp Everything to query and build airports. */ + +#ifndef SCRIPT_AIRPORT_HPP +#define SCRIPT_AIRPORT_HPP + +#include "script_object.hpp" + +/** + * Class that handles all airport related functions. + */ +class AIAirport : public AIObject { +public: + /** + * The types of airports available in the game. + */ + enum AirportType { + /* Note: the values _are_ important as they represent an in-game value */ + AT_SMALL = 0, ///< The small airport. + AT_LARGE = 1, ///< The large airport. + AT_METROPOLITAN = 3, ///< The metropolitan airport. + AT_INTERNATIONAL = 4, ///< The international airport. + AT_COMMUTER = 5, ///< The commuter airport. + AT_INTERCON = 7, ///< The intercontinental airport. + + /* Next are the airports which only have helicopter platforms */ + AT_HELIPORT = 2, ///< The heliport. + AT_HELISTATION = 8, ///< The helistation. + AT_HELIDEPOT = 6, ///< The helidepot. + + AT_INVALID = 255, ///< Invalid airport. + }; + + /** + * All plane types available. + */ + enum PlaneType { + /* Note: the values _are_ important as they represent an in-game value */ + PT_HELICOPTER = 0, ///< A helicopter. + PT_SMALL_PLANE = 1, ///< A small plane. + PT_BIG_PLANE = 3, ///< A big plane. + + PT_INVALID = -1, ///< An invalid PlaneType + }; + + /** + * Checks whether the given AirportType is valid and available. + * @param type The AirportType to check. + * @return True if and only if the AirportType is valid and available. + * @post return value == true -> IsAirportInformationAvailable returns true. + */ + static bool IsValidAirportType(AirportType type); + + /** + * Can you get information on this airport type? As opposed to + * IsValidAirportType this will return also return true when + * an airport type is no longer buildable. + * @param type The AirportType to check. + * @return True if and only if the AirportType is valid. + * @post return value == false -> IsValidAirportType returns false. + */ + static bool IsAirportInformationAvailable(AirportType type); + + /** + * Get the cost to build this AirportType. + * @param type The AirportType to check. + * @pre AirportAvailable(type). + * @return The cost of building this AirportType. + */ + static Money GetPrice(AirportType type); + + /** + * Checks whether the given tile is actually a tile with a hangar. + * @param tile The tile to check. + * @pre AIMap::IsValidTile(tile). + * @return True if and only if the tile has a hangar. + */ + static bool IsHangarTile(TileIndex tile); + + /** + * Checks whether the given tile is actually a tile with an airport. + * @param tile The tile to check. + * @pre AIMap::IsValidTile(tile). + * @return True if and only if the tile has an airport. + */ + static bool IsAirportTile(TileIndex tile); + + /** + * Get the width of this type of airport. + * @param type The type of airport. + * @pre IsAirportInformationAvailable(type). + * @return The width in tiles. + */ + static int32 GetAirportWidth(AirportType type); + + /** + * Get the height of this type of airport. + * @param type The type of airport. + * @pre IsAirportInformationAvailable(type). + * @return The height in tiles. + */ + static int32 GetAirportHeight(AirportType type); + + /** + * Get the coverage radius of this type of airport. + * @param type The type of airport. + * @pre IsAirportInformationAvailable(type). + * @return The radius in tiles. + */ + static int32 GetAirportCoverageRadius(AirportType type); + + /** + * Get the number of hangars of the airport. + * @param tile Any tile of the airport. + * @pre AIMap::IsValidTile(tile). + * @return The number of hangars of the airport. + */ + static int32 GetNumHangars(TileIndex tile); + + /** + * Get the first hanger tile of the airport. + * @param tile Any tile of the airport. + * @pre AIMap::IsValidTile(tile). + * @pre GetNumHangars(tile) > 0. + * @return The first hanger tile of the airport. + * @note Possible there are more hangars, but you won't be able to find them + * without walking over all the tiles of the airport and using + * IsHangarTile() on them. + */ + static TileIndex GetHangarOfAirport(TileIndex tile); + + /** + * Builds a airport with tile at the topleft corner. + * @param tile The topleft corner of the airport. + * @param type The type of airport to build. + * @param station_id The station to join, AIStation::STATION_NEW or AIStation::STATION_JOIN_ADJACENT. + * @pre AIMap::IsValidTile(tile). + * @pre AirportAvailable(type). + * @pre station_id == AIStation::STATION_NEW || station_id == AIStation::STATION_JOIN_ADJACENT || AIStation::IsValidStation(station_id). + * @exception AIError::ERR_AREA_NOT_CLEAR + * @exception AIError::ERR_FLAT_LAND_REQUIRED + * @exception AIError::ERR_LOCAL_AUTHORITY_REFUSES + * @exception AIStation::ERR_STATION_TOO_LARGE + * @exception AIStation::ERR_STATION_TOO_CLOSE_TO_ANOTHER_STATION + * @return Whether the airport has been/can be build or not. + */ + static bool BuildAirport(TileIndex tile, AirportType type, StationID station_id); + + /** + * Removes an airport. + * @param tile Any tile of the airport. + * @pre AIMap::IsValidTile(tile). + * @exception AIError::ERR_OWNED_BY_ANOTHER_COMPANY + * @return Whether the airport has been/can be removed or not. + */ + static bool RemoveAirport(TileIndex tile); + + /** + * Get the AirportType of an existing airport. + * @param tile Any tile of the airport. + * @pre AITile::IsStationTile(tile). + * @pre AIStation::HasStationType(AIStation.GetStationID(tile), AIStation::STATION_AIRPORT). + * @return The AirportType of the airport. + */ + static AirportType GetAirportType(TileIndex tile); + + /** + * Get the noise that will be added to the nearest town if an airport was + * built at this tile. + * @param tile The tile to check. + * @param type The AirportType to check. + * @pre IsAirportInformationAvailable(type). + * @return The amount of noise added to the nearest town. + * @note The noise will be added to the town with TownID GetNearestTown(tile, type). + */ + static int GetNoiseLevelIncrease(TileIndex tile, AirportType type); + + /** + * Get the TownID of the town whose local authority will influence + * an airport at some tile. + * @param tile The tile to check. + * @param type The AirportType to check. + * @pre IsAirportInformationAvailable(type). + * @return The TownID of the town closest to the tile. + */ + static TownID GetNearestTown(TileIndex tile, AirportType type); +}; + +#endif /* SCRIPT_AIRPORT_HPP */ -- cgit v1.2.3-54-g00ecf