src/ai/api/ai_road.hpp
author rubidium
Sun, 18 Mar 2007 18:06:45 +0000
branchnoai
changeset 9453 727ff178a582
child 9462 a4f49aab1367
permissions -rw-r--r--
(svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
9453
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
     1
/* $Id$ */
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
     2
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
     3
/** @file ai_map.hpp Everything to query and build roads */
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
     4
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
     5
#ifndef AI_ROAD_HPP
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
     6
#define AI_ROAD_HPP
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
     7
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
     8
#include "ai_object.hpp"
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
     9
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    10
/**
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    11
 * Class that handles all road related functions.
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    12
 *
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    13
 * Roads are always build from tile center to tile center.
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    14
 * Furthermore stations and depots need to be build on tiles
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    15
 * that already have road on them. For depots and non-drive
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    16
 * through stations that means that only one roadbit may be
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    17
 * built at the location. The advantage of this method is
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    18
 * that the AI does not need to think about pointing the
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    19
 * exit of the depots and roadstations towards the correct
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    20
 * direction. For drive-through roadstops this works about
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    21
 * the same, though they have to be built on straight roads.
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    22
 */
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    23
class AIRoad : public AIObject {
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    24
public:
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    25
	/**
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    26
	 * Checks whether the given tile is actually a tile with road.
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    27
	 * @param tile the tile to check.
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    28
	 * @pre tile is always positive and smaller than AIMap::GetMapSize().
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    29
	 * @return true if and only if the tile has road.
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    30
	 */
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    31
	bool IsRoadTile(TileIndex tile);
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    32
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    33
	/**
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    34
	 * Builds a road from the center of tile start to the
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    35
	 * center of tile end.
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    36
	 * @param start the start tile of the road.
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    37
	 * @param end   the end tile of the road.
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    38
	 * @pre start is not equal to end
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    39
	 * @pre start is always positive and smaller than AIMap::GetMapSize().
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    40
	 * @pre end is always positive and smaller than AIMap::GetMapSize().
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    41
	 * @pre start and end are in a straight line, i.e.
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    42
	 *  AIMap::GetTileX(start) == AIMap::GetTileX(end) or
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    43
	 *  AIMap::GetTileY(start) == AIMap::GetTileY(end).
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    44
	 * @return whether the road has been/can be build or not.
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    45
	 */
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    46
	bool BuildRoad(TileIndex start, TileIndex end);
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    47
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    48
	/**
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    49
	 * Builds a road depot.
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    50
	 * @param tile  place to build the depot.
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    51
	 * @param front the tile exactly in front of the depot
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    52
	 * @pre tile is always positive and smaller than AIMap::GetMapSize().
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    53
	 * @pre front is always positive and smaller than AIMap::GetMapSize().
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    54
	 * @pre tile is not equal to front
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    55
	 * @return whether the road depot has been/can be build or not.
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    56
	 */
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    57
	bool BuildRoadDepot(TileIndex tile, TileIndex front);
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    58
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    59
	/**
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    60
	 * Builds a road bus or truck station.
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    61
	 * @param tile  place to build the depot.
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    62
	 * @param front the tile exactly in front of the station.
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    63
	 *   For drive-through stations either entrance side can be used.
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    64
	 * @param bus   whether to build a bus or truck station.
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    65
	 * @param drive_through whether to make the station drive through or not.
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    66
	 * @pre tile is always positive and smaller than AIMap::GetMapSize().
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    67
	 * @pre front is always positive and smaller than AIMap::GetMapSize().
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    68
	 * @pre tile is not equal to front
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    69
	 * @return whether the station has been/can be build or not.
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    70
	 */
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    71
	bool BuildRoadStation(TileIndex tile, TileIndex front, bool bus, bool drive_through);
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    72
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    73
	/**
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    74
	 * Removes a road from the center of tile start to the
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    75
	 * center of tile end.
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    76
	 * @param start the start tile of the road.
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    77
	 * @param end   the end tile of the road.
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    78
	 * @pre start is always positive and smaller than AIMap::GetMapSize().
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    79
	 * @pre end is always positive and smaller than AIMap::GetMapSize().
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    80
	 * @pre start and end are in a straight line, i.e.
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    81
	 *  AIMap::GetTileX(start) == AIMap::GetTileX(end) or
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    82
	 *  AIMap::GetTileY(start) == AIMap::GetTileY(end).
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    83
	 * @return whether the road has been/can be removed or not.
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    84
	 */
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    85
	bool RemoveRoad(TileIndex start, TileIndex end);
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    86
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    87
	/**
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    88
	 * Removes a road depot.
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    89
	 * @param tile place to remove the depot from.
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    90
	 * @pre tile is always positive and smaller than AIMap::GetMapSize().
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    91
	 * @pre tile is a road depot.
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    92
	 * @return whether the road depot has been/can be removed or not.
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    93
	 */
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    94
	bool RemoveRoadDepot(TileIndex tile);
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    95
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    96
	/**
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    97
	 * Removes a road bus or truck station.
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    98
	 * @param tile place to remove the station from.
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
    99
	 * @pre tile is always positive and smaller than AIMap::GetMapSize().
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
   100
	 * @pre tile is a road station.
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
   101
	 * @return whether the station has been/can be removed or not.
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
   102
	 */
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
   103
	bool RemoveRoadStation(TileIndex tile);
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
   104
};
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
   105
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
   106
#ifdef DEFINE_SQUIRREL_CLASS
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
   107
void SQAIRoadRegister(Squirrel *engine) {
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
   108
	DefSQClass <AIRoad> SQAIRoad("AIRoad");
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
   109
	SQAIRoad.PreRegister(engine);
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
   110
	SQAIRoad.AddConstructor(engine);
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
   111
	SQAIRoad.DefSQFunction(engine, &AIRoad::BuildRoad,         "BuildRoad");
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
   112
	SQAIRoad.DefSQFunction(engine, &AIRoad::BuildRoadDepot,    "BuildRoadDepot");
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
   113
	SQAIRoad.DefSQFunction(engine, &AIRoad::BuildRoadStation,  "BuildRoadStation");
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
   114
	SQAIRoad.DefSQFunction(engine, &AIRoad::RemoveRoad,        "RemoveRoad");
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
   115
	SQAIRoad.DefSQFunction(engine, &AIRoad::RemoveRoadDepot,   "RemoveRoadDepot");
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
   116
	SQAIRoad.DefSQFunction(engine, &AIRoad::RemoveRoadStation, "RemoveRoadStation");
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
   117
	SQAIRoad.PostRegister(engine);
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
   118
}
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
   119
#endif /* SQUIRREL_CLASS */
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
   120
727ff178a582 (svn r9283) [NoAI] -Add: API for adding/removing road, road depots and road stations.
rubidium
parents:
diff changeset
   121
#endif /* AI_ROAD_HPP */