diff -r 4c5eedbc3ba9 -r 727ff178a582 src/ai/api/ai_road.hpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/ai/api/ai_road.hpp Sun Mar 18 18:06:45 2007 +0000 @@ -0,0 +1,121 @@ +/* $Id$ */ + +/** @file ai_map.hpp Everything to query and build roads */ + +#ifndef AI_ROAD_HPP +#define AI_ROAD_HPP + +#include "ai_object.hpp" + +/** + * Class that handles all road related functions. + * + * Roads are always build from tile center to tile center. + * Furthermore stations and depots need to be build on tiles + * that already have road on them. For depots and non-drive + * through stations that means that only one roadbit may be + * built at the location. The advantage of this method is + * that the AI does not need to think about pointing the + * exit of the depots and roadstations towards the correct + * direction. For drive-through roadstops this works about + * the same, though they have to be built on straight roads. + */ +class AIRoad : public AIObject { +public: + /** + * Checks whether the given tile is actually a tile with road. + * @param tile the tile to check. + * @pre tile is always positive and smaller than AIMap::GetMapSize(). + * @return true if and only if the tile has road. + */ + bool IsRoadTile(TileIndex tile); + + /** + * Builds a road from the center of tile start to the + * center of tile end. + * @param start the start tile of the road. + * @param end the end tile of the road. + * @pre start is not equal to end + * @pre start is always positive and smaller than AIMap::GetMapSize(). + * @pre end is always positive and smaller than AIMap::GetMapSize(). + * @pre start and end are in a straight line, i.e. + * AIMap::GetTileX(start) == AIMap::GetTileX(end) or + * AIMap::GetTileY(start) == AIMap::GetTileY(end). + * @return whether the road has been/can be build or not. + */ + bool BuildRoad(TileIndex start, TileIndex end); + + /** + * Builds a road depot. + * @param tile place to build the depot. + * @param front the tile exactly in front of the depot + * @pre tile is always positive and smaller than AIMap::GetMapSize(). + * @pre front is always positive and smaller than AIMap::GetMapSize(). + * @pre tile is not equal to front + * @return whether the road depot has been/can be build or not. + */ + bool BuildRoadDepot(TileIndex tile, TileIndex front); + + /** + * Builds a road bus or truck station. + * @param tile place to build the depot. + * @param front the tile exactly in front of the station. + * For drive-through stations either entrance side can be used. + * @param bus whether to build a bus or truck station. + * @param drive_through whether to make the station drive through or not. + * @pre tile is always positive and smaller than AIMap::GetMapSize(). + * @pre front is always positive and smaller than AIMap::GetMapSize(). + * @pre tile is not equal to front + * @return whether the station has been/can be build or not. + */ + bool BuildRoadStation(TileIndex tile, TileIndex front, bool bus, bool drive_through); + + /** + * Removes a road from the center of tile start to the + * center of tile end. + * @param start the start tile of the road. + * @param end the end tile of the road. + * @pre start is always positive and smaller than AIMap::GetMapSize(). + * @pre end is always positive and smaller than AIMap::GetMapSize(). + * @pre start and end are in a straight line, i.e. + * AIMap::GetTileX(start) == AIMap::GetTileX(end) or + * AIMap::GetTileY(start) == AIMap::GetTileY(end). + * @return whether the road has been/can be removed or not. + */ + bool RemoveRoad(TileIndex start, TileIndex end); + + /** + * Removes a road depot. + * @param tile place to remove the depot from. + * @pre tile is always positive and smaller than AIMap::GetMapSize(). + * @pre tile is a road depot. + * @return whether the road depot has been/can be removed or not. + */ + bool RemoveRoadDepot(TileIndex tile); + + /** + * Removes a road bus or truck station. + * @param tile place to remove the station from. + * @pre tile is always positive and smaller than AIMap::GetMapSize(). + * @pre tile is a road station. + * @return whether the station has been/can be removed or not. + */ + bool RemoveRoadStation(TileIndex tile); +}; + +#ifdef DEFINE_SQUIRREL_CLASS +void SQAIRoadRegister(Squirrel *engine) { + DefSQClass SQAIRoad("AIRoad"); + SQAIRoad.PreRegister(engine); + SQAIRoad.AddConstructor(engine); + SQAIRoad.DefSQFunction(engine, &AIRoad::BuildRoad, "BuildRoad"); + SQAIRoad.DefSQFunction(engine, &AIRoad::BuildRoadDepot, "BuildRoadDepot"); + SQAIRoad.DefSQFunction(engine, &AIRoad::BuildRoadStation, "BuildRoadStation"); + SQAIRoad.DefSQFunction(engine, &AIRoad::RemoveRoad, "RemoveRoad"); + SQAIRoad.DefSQFunction(engine, &AIRoad::RemoveRoadDepot, "RemoveRoadDepot"); + SQAIRoad.DefSQFunction(engine, &AIRoad::RemoveRoadStation, "RemoveRoadStation"); + SQAIRoad.PostRegister(engine); +} +#endif /* SQUIRREL_CLASS */ + +#endif /* AI_ROAD_HPP */