(svn r12625) [NoAI] -Add: support for GetLastError in AIRoad. Patch by Morloth.
--- a/src/ai/api/ai_error.hpp Tue Apr 08 07:19:02 2008 +0000
+++ b/src/ai/api/ai_error.hpp Tue Apr 08 07:24:23 2008 +0000
@@ -40,6 +40,7 @@
ERR_CAT_SIGN, //!< Error messages related to building / removing signs.
ERR_CAT_ROAD, //!< Error messages related to building / maintaining roads.
ERR_CAT_ORDER, //!< Error messages related to managing orders.
+ ERR_CAT_MARINE, //!< Error messages related to building / removing ships, docks and channels.
/**
* DO NOT USE! The error bitsize determines how many errors can be stored in
@@ -89,7 +90,13 @@
ERR_LAND_SLOPED_WRONG, // [STR_1000_LAND_SLOPED_IN_WRONG_DIRECTION]
/** A vehicle is in the way */
- ERR_VEHICLE_IN_THE_WAY, // [STR_8803_TRAIN_IN_THE_WAY, STR_9000_ROAD_VEHICLE_IN_THE_WAY, STR_980E_SHIP_IN_THE_WAY, STR_A015_AIRCRAFT_IN_THE_WAY]
+ ERR_VEHICLE_IN_THE_WAY, // [STR_8803_TRAIN_IN_THE_WAY, STR_9000_ROAD_VEHICLE_IN_THE_WAY, STR_980E_SHIP_IN_THE_WAY, STR_A015_AIRCRAFT_IN_THE_WAY]
+
+ /** Site is unsuitable */
+ ERR_SITE_UNSUITABLE, // [STR_0239_SITE_UNSUITABLE, STR_304B_SITE_UNSUITABLE]
+
+ /** Too close to the edge of the map */
+ ERR_TOO_CLOSE_TO_EDGE, // [STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP]
};
/**
--- a/src/ai/api/ai_error.hpp.sq Tue Apr 08 07:19:02 2008 +0000
+++ b/src/ai/api/ai_error.hpp.sq Tue Apr 08 07:24:23 2008 +0000
@@ -30,6 +30,7 @@
SQAIError.DefSQConst(engine, AIError::ERR_CAT_SIGN, "ERR_CAT_SIGN");
SQAIError.DefSQConst(engine, AIError::ERR_CAT_ROAD, "ERR_CAT_ROAD");
SQAIError.DefSQConst(engine, AIError::ERR_CAT_ORDER, "ERR_CAT_ORDER");
+ SQAIError.DefSQConst(engine, AIError::ERR_CAT_MARINE, "ERR_CAT_MARINE");
SQAIError.DefSQConst(engine, AIError::ERR_CAT_BIT_SIZE, "ERR_CAT_BIT_SIZE");
SQAIError.DefSQConst(engine, AIError::ERR_NONE, "ERR_NONE");
SQAIError.DefSQConst(engine, AIError::ERR_UNKNOWN, "ERR_UNKNOWN");
@@ -45,6 +46,8 @@
SQAIError.DefSQConst(engine, AIError::ERR_FLAT_LAND_REQUIRED, "ERR_FLAT_LAND_REQUIRED");
SQAIError.DefSQConst(engine, AIError::ERR_LAND_SLOPED_WRONG, "ERR_LAND_SLOPED_WRONG");
SQAIError.DefSQConst(engine, AIError::ERR_VEHICLE_IN_THE_WAY, "ERR_VEHICLE_IN_THE_WAY");
+ SQAIError.DefSQConst(engine, AIError::ERR_SITE_UNSUITABLE, "ERR_SITE_UNSUITABLE");
+ SQAIError.DefSQConst(engine, AIError::ERR_TOO_CLOSE_TO_EDGE, "ERR_TOO_CLOSE_TO_EDGE");
AIError::RegisterErrorMap(STR_0003_NOT_ENOUGH_CASH_REQUIRES, AIError::ERR_NOT_ENOUGH_CASH);
AIError::RegisterErrorMap(STR_2009_LOCAL_AUTHORITY_REFUSES, AIError::ERR_LOCAL_AUTHORITY_REFUSES);
@@ -77,6 +80,9 @@
AIError::RegisterErrorMap(STR_9000_ROAD_VEHICLE_IN_THE_WAY, AIError::ERR_VEHICLE_IN_THE_WAY);
AIError::RegisterErrorMap(STR_980E_SHIP_IN_THE_WAY, AIError::ERR_VEHICLE_IN_THE_WAY);
AIError::RegisterErrorMap(STR_A015_AIRCRAFT_IN_THE_WAY, AIError::ERR_VEHICLE_IN_THE_WAY);
+ AIError::RegisterErrorMap(STR_0239_SITE_UNSUITABLE, AIError::ERR_SITE_UNSUITABLE);
+ AIError::RegisterErrorMap(STR_304B_SITE_UNSUITABLE, AIError::ERR_SITE_UNSUITABLE);
+ AIError::RegisterErrorMap(STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP, AIError::ERR_TOO_CLOSE_TO_EDGE);
AIError::RegisterErrorMapString(AIError::ERR_NONE, "ERR_NONE");
AIError::RegisterErrorMapString(AIError::ERR_UNKNOWN, "ERR_UNKNOWN");
@@ -91,6 +97,8 @@
AIError::RegisterErrorMapString(AIError::ERR_FLAT_LAND_REQUIRED, "ERR_FLAT_LAND_REQUIRED");
AIError::RegisterErrorMapString(AIError::ERR_LAND_SLOPED_WRONG, "ERR_LAND_SLOPED_WRONG");
AIError::RegisterErrorMapString(AIError::ERR_VEHICLE_IN_THE_WAY, "ERR_VEHICLE_IN_THE_WAY");
+ AIError::RegisterErrorMapString(AIError::ERR_SITE_UNSUITABLE, "ERR_SITE_UNSUITABLE");
+ AIError::RegisterErrorMapString(AIError::ERR_TOO_CLOSE_TO_EDGE, "ERR_TOO_CLOSE_TO_EDGE");
SQAIError.DefSQStaticMethod(engine, &AIError::GetClassName, "GetClassName", 1, "x");
SQAIError.DefSQStaticMethod(engine, &AIError::GetErrorCategory, "GetErrorCategory", 1, "x");
--- a/src/ai/api/ai_marine.cpp Tue Apr 08 07:19:02 2008 +0000
+++ b/src/ai/api/ai_marine.cpp Tue Apr 08 07:24:23 2008 +0000
@@ -46,75 +46,75 @@
/* static */ bool AIMarine::BuildWaterDepot(TileIndex tile, bool vertical)
{
- if (!::IsValidTile(tile)) return false;
+ EnforcePrecondition(false, ::IsValidTile(tile));
return AIObject::DoCommand(tile, vertical, 0, CMD_BUILD_SHIP_DEPOT, false);
}
/* static */ bool AIMarine::BuildDock(TileIndex tile)
{
- if (!::IsValidTile(tile)) return false;
+ EnforcePrecondition(false, ::IsValidTile(tile));
return AIObject::DoCommand(tile, 1, 0, CMD_BUILD_DOCK, false);
}
/* static */ bool AIMarine::BuildBuoy(TileIndex tile)
{
- if (!::IsValidTile(tile)) return false;
+ EnforcePrecondition(false, ::IsValidTile(tile));
return AIObject::DoCommand(tile, 0, 0, CMD_BUILD_BUOY, false);
}
/* static */ bool AIMarine::BuildLock(TileIndex tile)
{
- if (!::IsValidTile(tile)) return false;
+ EnforcePrecondition(false, ::IsValidTile(tile));
return AIObject::DoCommand(tile, 0, 0, CMD_BUILD_LOCK, false);
}
/* static */ bool AIMarine::BuildCanal(TileIndex tile)
{
- if (!::IsValidTile(tile)) return false;
+ EnforcePrecondition(false, ::IsValidTile(tile));
return AIObject::DoCommand(tile, tile, 0, CMD_BUILD_CANAL, false);
}
/* static */ bool AIMarine::RemoveWaterDepot(TileIndex tile)
{
- if (!::IsValidTile(tile)) return false;
- if (!IsWaterDepotTile(tile)) return false;
+ EnforcePrecondition(false, ::IsValidTile(tile));
+ EnforcePrecondition(false, IsWaterDepotTile(tile));
return AIObject::DoCommand(tile, 0, 0, CMD_LANDSCAPE_CLEAR, false);
}
/* static */ bool AIMarine::RemoveDock(TileIndex tile)
{
- if (!::IsValidTile(tile)) return false;
- if (!IsDockTile(tile)) return false;
+ EnforcePrecondition(false, ::IsValidTile(tile));
+ EnforcePrecondition(false, IsDockTile(tile));
return AIObject::DoCommand(tile, 0, 0, CMD_LANDSCAPE_CLEAR, false);
}
/* static */ bool AIMarine::RemoveBuoy(TileIndex tile)
{
- if (!::IsValidTile(tile)) return false;
- if (!IsBuoyTile(tile)) return false;
+ EnforcePrecondition(false, ::IsValidTile(tile));
+ EnforcePrecondition(false, IsBuoyTile(tile));
return AIObject::DoCommand(tile, 0, 0, CMD_LANDSCAPE_CLEAR, false);
}
/* static */ bool AIMarine::RemoveLock(TileIndex tile)
{
- if (!::IsValidTile(tile)) return false;
- if (!IsLockTile(tile)) return false;
+ EnforcePrecondition(false, ::IsValidTile(tile));
+ EnforcePrecondition(false, IsLockTile(tile));
return AIObject::DoCommand(tile, 0, 0, CMD_LANDSCAPE_CLEAR, false);
}
/* static */ bool AIMarine::RemoveCanal(TileIndex tile)
{
- if (!::IsValidTile(tile)) return false;
- if (!IsCanalTile(tile)) return false;
+ EnforcePrecondition(false, ::IsValidTile(tile));
+ EnforcePrecondition(false, IsCanalTile(tile));
return AIObject::DoCommand(tile, 0, 0, CMD_LANDSCAPE_CLEAR, false);
}
--- a/src/ai/api/ai_marine.hpp Tue Apr 08 07:19:02 2008 +0000
+++ b/src/ai/api/ai_marine.hpp Tue Apr 08 07:24:23 2008 +0000
@@ -6,6 +6,7 @@
#define AI_MARINE_HPP
#include "ai_object.hpp"
+#include "ai_error.hpp"
/**
* Class that handles all marine related functions.
@@ -14,6 +15,14 @@
public:
static const char *GetClassName() { return "AIMarine"; }
+ enum ErrorMessages {
+ /** Base for marine related errors */
+ ERR_MARINE_BASE = AIError::ERR_CAT_MARINE << AIError::ERR_CAT_BIT_SIZE,
+
+ /** Infrastructure must be built on water */
+ ERR_MARINE_MUST_BE_BUILT_ON_WATER, // [STR_3801_MUST_BE_BUILT_ON_WATER]
+ };
+
/**
* Checks whether the given tile is actually a tile with a water depot.
* @param tile The tile to check.
@@ -59,6 +68,9 @@
* @param tile The tile where the water depot will be build.
* @param vertical If true, depot will be vertical, else horizontal.
* @pre AIMap::IsValidTile(tile).
+ * @exception AIError::ERR_AREA_NOT_CLEAR
+ * @exception AIError::ERR_SITE_UNSUITABLE
+ * @exception AIMarine::ERR_MARINE_MUST_BE_BUILT_ON_WATER
* @return Whether the water depot has been/can be build or not.
*/
static bool BuildWaterDepot(TileIndex tile, bool vertical);
@@ -67,6 +79,10 @@
* Builds a dock where tile is the tile still on land.
* @param tile The tile still on land of the dock.
* @pre AIMap::IsValidTile(tile).
+ * @exception AIError::ERR_AREA_NOT_CLEAR
+ * @exception AIError::ERR_SITE_UNSUITABLE
+ * @exception AIStation::ERR_STATION_TOO_CLOSE_TO_ANOTHER_STATION
+ * @exception AIStation::ERR_STATION_TOO_MANY_STATIONS
* @return Whether the dock has been/can be build or not.
*/
static bool BuildDock(TileIndex tile);
@@ -75,6 +91,9 @@
* Builds a buoy on tile.
* @param tile The tile where the buoy will be build.
* @pre AIMap::IsValidTile(tile).
+ * @exception AIError::ERR_AREA_NOT_CLEAR
+ * @exception AIError::ERR_SITE_UNSUITABLE
+ * @exception AIStation::ERR_STATION_TOO_MANY_STATIONS
* @return Whether the buoy has been/can be build or not.
*/
static bool BuildBuoy(TileIndex tile);
@@ -83,6 +102,8 @@
* Builds a lock on tile.
* @param tile The tile where the lock will be build.
* @pre AIMap::IsValidTile(tile).
+ * @exception AIError::ERR_LAND_SLOPED_WRONG
+ * @exception AIError::ERR_SITE_UNSUITABLE
* @return Whether the lock has been/can be build or not.
*/
static bool BuildLock(TileIndex tile);
@@ -91,6 +112,10 @@
* Builds a canal on tile.
* @param tile The tile where the canal will be build.
* @pre AIMap::IsValidTile(tile).
+ * @exception AIError::ERR_AREA_NOT_CLEAR
+ * @exception AIError::ERR_LAND_SLOPED_WRONG
+ * @exception AIError::ERR_OWNED_BY_ANOTHER_COMPANY
+ * @exception AIError::ERR_ALREADY_BUILT
* @return Whether the canal has been/can be build or not.
*/
static bool BuildCanal(TileIndex tile);
@@ -99,6 +124,7 @@
* Removes a water depot.
* @param tile Any tile of the water depot.
* @pre AIMap::IsValidTile(tile).
+ * @exception AIError::ERR_OWNED_BY_ANOTHER_COMPANY
* @return Whether the water depot has been/can be removed or not.
*/
static bool RemoveWaterDepot(TileIndex tile);
@@ -107,6 +133,7 @@
* Removes a dock.
* @param tile Any tile of the dock.
* @pre AIMap::IsValidTile(tile).
+ * @exception AIError::ERR_OWNED_BY_ANOTHER_COMPANY
* @return Whether the dock has been/can be removed or not.
*/
static bool RemoveDock(TileIndex tile);
@@ -115,6 +142,7 @@
* Removes a buoy.
* @param tile Any tile of the buoy.
* @pre AIMap::IsValidTile(tile).
+ * @exception AIError::ERR_OWNED_BY_ANOTHER_COMPANY
* @return Whether the buoy has been/can be removed or not.
*/
static bool RemoveBuoy(TileIndex tile);
@@ -123,6 +151,7 @@
* Removes a lock.
* @param tile Any tile of the lock.
* @pre AIMap::IsValidTile(tile).
+ * @exception AIError::ERR_OWNED_BY_ANOTHER_COMPANY
* @return Whether the lock has been/can be removed or not.
*/
static bool RemoveLock(TileIndex tile);
@@ -131,6 +160,7 @@
* Removes a canal.
* @param tile Any tile of the canal.
* @pre AIMap::IsValidTile(tile).
+ * @exception AIError::ERR_OWNED_BY_ANOTHER_COMPANY
* @return Whether the canal has been/can be removed or not.
*/
static bool RemoveCanal(TileIndex tile);
--- a/src/ai/api/ai_marine.hpp.sq Tue Apr 08 07:19:02 2008 +0000
+++ b/src/ai/api/ai_marine.hpp.sq Tue Apr 08 07:24:23 2008 +0000
@@ -1,6 +1,10 @@
#include "ai_marine.hpp"
namespace SQConvert {
+ /* Allow enums to be used as Squirrel parameters */
+ template <> AIMarine::ErrorMessages GetParam(ForceType<AIMarine::ErrorMessages>, HSQUIRRELVM vm, int index) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (AIMarine::ErrorMessages)tmp; }
+ template <> int Return<AIMarine::ErrorMessages>(HSQUIRRELVM vm, AIMarine::ErrorMessages res) { sq_pushinteger(vm, (int32)res); return 1; }
+
/* Allow AIMarine to be used as Squirrel parameter */
template <> AIMarine *GetParam(ForceType<AIMarine *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (AIMarine *)instance; }
template <> AIMarine &GetParam(ForceType<AIMarine &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIMarine *)instance; }
@@ -14,6 +18,13 @@
SQAIMarine.PreRegister(engine);
SQAIMarine.AddConstructor<void (AIMarine::*)(), 1>(engine, "x");
+ SQAIMarine.DefSQConst(engine, AIMarine::ERR_MARINE_BASE, "ERR_MARINE_BASE");
+ SQAIMarine.DefSQConst(engine, AIMarine::ERR_MARINE_MUST_BE_BUILT_ON_WATER, "ERR_MARINE_MUST_BE_BUILT_ON_WATER");
+
+ AIError::RegisterErrorMap(STR_3801_MUST_BE_BUILT_ON_WATER, AIMarine::ERR_MARINE_MUST_BE_BUILT_ON_WATER);
+
+ AIError::RegisterErrorMapString(AIMarine::ERR_MARINE_MUST_BE_BUILT_ON_WATER, "ERR_MARINE_MUST_BE_BUILT_ON_WATER");
+
SQAIMarine.DefSQStaticMethod(engine, &AIMarine::GetClassName, "GetClassName", 1, "x");
SQAIMarine.DefSQStaticMethod(engine, &AIMarine::IsWaterDepotTile, "IsWaterDepotTile", 2, "xi");
SQAIMarine.DefSQStaticMethod(engine, &AIMarine::IsDockTile, "IsDockTile", 2, "xi");
--- a/src/ai/api/ai_road.cpp Tue Apr 08 07:19:02 2008 +0000
+++ b/src/ai/api/ai_road.cpp Tue Apr 08 07:24:23 2008 +0000
@@ -155,7 +155,8 @@
/* static */ bool AIRoad::RemoveRoadDepot(TileIndex tile)
{
EnforcePrecondition(false, ::IsValidTile(tile));
- EnforcePrecondition(false, IsTileType(tile, MP_ROAD) && GetRoadTileType(tile) == ROAD_TILE_DEPOT);
+ EnforcePrecondition(false, IsTileType(tile, MP_ROAD))
+ EnforcePrecondition(false, GetRoadTileType(tile) == ROAD_TILE_DEPOT);
return AIObject::DoCommand(tile, 0, 0, CMD_LANDSCAPE_CLEAR);
}
@@ -163,7 +164,8 @@
/* static */ bool AIRoad::RemoveRoadStation(TileIndex tile)
{
EnforcePrecondition(false, ::IsValidTile(tile));
- EnforcePrecondition(false, IsTileType(tile, MP_STATION) && IsRoadStop(tile));
+ EnforcePrecondition(false, IsTileType(tile, MP_STATION));
+ EnforcePrecondition(false, IsRoadStop(tile));
return AIObject::DoCommand(tile, 0, GetRoadStopType(tile), CMD_REMOVE_ROAD_STOP);
}
--- a/src/ai/api/ai_road.hpp Tue Apr 08 07:19:02 2008 +0000
+++ b/src/ai/api/ai_road.hpp Tue Apr 08 07:24:23 2008 +0000
@@ -28,14 +28,6 @@
/** Drive through roads can't be build on town owned roads */
ERR_ROAD_CANNOT_BUILD_ON_TOWN_ROAD, // [STR_DRIVE_THROUGH_ERROR_ON_TOWN_ROAD]
- /** There are too many stations in the game */
- ERR_ROAD_TOO_MANY_STATIONS, // [STR_3008_TOO_MANY_STATIONS_LOADING, STR_TOO_MANY_TRUCK_STOPS, STR_TOO_MANY_BUS_STOPS]
-
- /** There are too many stations in a town */
- ERR_ROAD_TOO_MANY_STATIONS_IN_TOWN, // [STR_3007_TOO_MANY_STATIONS_LOADING]
-
- /** The station is too close to another station */
- ERR_ROAD_TOO_CLOSE_TO_ANOTHER_STATION, // [STR_3009_TOO_CLOSE_TO_ANOTHER_STATION]
/** One way roads can't have junctions */
ERR_ROAD_ONE_WAY_ROADS_CANNOT_HAVE_JUNCTIONS, // [STR_ERR_ONEWAY_ROADS_CAN_T_HAVE_JUNCTION]
@@ -138,7 +130,7 @@
* @exception AIError::ERR_AREA_NOT_CLEAR
* @exception AIRoad::ERR_ROAD_ONE_WAY_ROADS_CANNOT_HAVE_JUNCTIONS
* @exception AIRoad::ERR_ROAD_WORKS_IN_PROGRESS
- * @exception AIRoad::ERR_VEHICLE_IN_THE_WAY
+ * @exception AIError::ERR_VEHICLE_IN_THE_WAY
* @return Whether the road has been/can be build or not.
*/
static bool BuildRoad(TileIndex start, TileIndex end);
@@ -159,7 +151,7 @@
* @exception AIError::ERR_AREA_NOT_CLEAR
* @exception AIRoad::ERR_ROAD_ONE_WAY_ROADS_CANNOT_HAVE_JUNCTIONS
* @exception AIRoad::ERR_ROAD_WORKS_IN_PROGRESS
- * @exception AIRoad::ERR_VEHICLE_IN_THE_WAY
+ * @exception AIError::ERR_VEHICLE_IN_THE_WAY
* @return Whether the road has been/can be build or not.
*/
static bool BuildRoadFull(TileIndex start, TileIndex end);
@@ -192,10 +184,10 @@
* @exception AIError::ERR_FLAT_LAND_REQUIRED
* @exception AIRoad::ERR_ROAD_DRIVE_THROUGH_WRONG_DIRECTION
* @exception AIRoad::ERR_ROAD_CANNOT_BUILD_ON_TOWN_ROAD
- * @exception AIRoad::ERR_VEHICLE_IN_THE_WAY
- * @exception AIRoad::ERR_ROAD_TOO_CLOSE_TO_ANOTHER_STATION
- * @exception AIRoad::ERR_ROAD_TOO_MANY_STATIONS
- * @exception AIRoad::ERR_ROAD_TOO_MANY_STATIONS_IN_TOWN
+ * @exception AIError:ERR_VEHICLE_IN_THE_WAY
+ * @exception AIStation::ERR_STATION_TOO_CLOSE_TO_ANOTHER_STATION
+ * @exception AIStation::ERR_STATION_TOO_MANY_STATIONS
+ * @exception AIStation::ERR_STATION_TOO_MANY_STATIONS_IN_TOWN
* @return Whether the station has been/can be build or not.
*/
static bool BuildRoadStation(TileIndex tile, TileIndex front, bool truck, bool drive_through);
@@ -210,7 +202,7 @@
* AIMap::GetTileX(start) == AIMap::GetTileX(end) or
* AIMap::GetTileY(start) == AIMap::GetTileY(end).
* @exception AIError::ERR_OWNED_BY_ANOTHER_COMPANY
- * @exception AIRoad::ERR_VEHICLE_IN_THE_WAY
+ * @exception AIError::ERR_VEHICLE_IN_THE_WAY
* @exception AIRoad::ERR_ROAD_WORKS_IN_PROGRESS
* @return Whether the road has been/can be removed or not.
*/
@@ -227,7 +219,7 @@
* AIMap::GetTileX(start) == AIMap::GetTileX(end) or
* AIMap::GetTileY(start) == AIMap::GetTileY(end).
* @exception AIError::ERR_OWNED_BY_ANOTHER_COMPANY
- * @exception AIRoad::ERR_VEHICLE_IN_THE_WAY
+ * @exception AIError::ERR_VEHICLE_IN_THE_WAY
* @exception AIRoad::ERR_ROAD_WORKS_IN_PROGRESS
* @return Whether the road has been/can be removed or not.
*/
@@ -239,7 +231,7 @@
* @pre AIMap::IsValidTile(tile).
* @pre Tile is a road depot.
* @exception AIError::ERR_OWNED_BY_ANOTHER_COMPANY
- * @exception AIRoad::ERR_VEHICLE_IN_THE_WAY
+ * @exception AIError::ERR_VEHICLE_IN_THE_WAY
* @return Whether the road depot has been/can be removed or not.
*/
static bool RemoveRoadDepot(TileIndex tile);
@@ -250,7 +242,7 @@
* @pre AIMap::IsValidTile(tile).
* @pre Tile is a road station.
* @exception AIError::ERR_OWNED_BY_ANOTHER_COMPANY
- * @exception AIRoad::ERR_VEHICLE_IN_THE_WAY
+ * @exception AIError::ERR_VEHICLE_IN_THE_WAY
* @return Whether the station has been/can be removed or not.
*/
static bool RemoveRoadStation(TileIndex tile);
--- a/src/ai/api/ai_road.hpp.sq Tue Apr 08 07:19:02 2008 +0000
+++ b/src/ai/api/ai_road.hpp.sq Tue Apr 08 07:24:23 2008 +0000
@@ -22,27 +22,16 @@
SQAIRoad.DefSQConst(engine, AIRoad::ERR_ROAD_WORKS_IN_PROGRESS, "ERR_ROAD_WORKS_IN_PROGRESS");
SQAIRoad.DefSQConst(engine, AIRoad::ERR_ROAD_DRIVE_THROUGH_WRONG_DIRECTION, "ERR_ROAD_DRIVE_THROUGH_WRONG_DIRECTION");
SQAIRoad.DefSQConst(engine, AIRoad::ERR_ROAD_CANNOT_BUILD_ON_TOWN_ROAD, "ERR_ROAD_CANNOT_BUILD_ON_TOWN_ROAD");
- SQAIRoad.DefSQConst(engine, AIRoad::ERR_ROAD_TOO_MANY_STATIONS, "ERR_ROAD_TOO_MANY_STATIONS");
- SQAIRoad.DefSQConst(engine, AIRoad::ERR_ROAD_TOO_MANY_STATIONS_IN_TOWN, "ERR_ROAD_TOO_MANY_STATIONS_IN_TOWN");
- SQAIRoad.DefSQConst(engine, AIRoad::ERR_ROAD_TOO_CLOSE_TO_ANOTHER_STATION, "ERR_ROAD_TOO_CLOSE_TO_ANOTHER_STATION");
SQAIRoad.DefSQConst(engine, AIRoad::ERR_ROAD_ONE_WAY_ROADS_CANNOT_HAVE_JUNCTIONS, "ERR_ROAD_ONE_WAY_ROADS_CANNOT_HAVE_JUNCTIONS");
AIError::RegisterErrorMap(STR_ROAD_WORKS_IN_PROGRESS, AIRoad::ERR_ROAD_WORKS_IN_PROGRESS);
AIError::RegisterErrorMap(STR_DRIVE_THROUGH_ERROR_DIRECTION, AIRoad::ERR_ROAD_DRIVE_THROUGH_WRONG_DIRECTION);
AIError::RegisterErrorMap(STR_DRIVE_THROUGH_ERROR_ON_TOWN_ROAD, AIRoad::ERR_ROAD_CANNOT_BUILD_ON_TOWN_ROAD);
- AIError::RegisterErrorMap(STR_3008_TOO_MANY_STATIONS_LOADING, AIRoad::ERR_ROAD_TOO_MANY_STATIONS);
- AIError::RegisterErrorMap(STR_TOO_MANY_TRUCK_STOPS, AIRoad::ERR_ROAD_TOO_MANY_STATIONS);
- AIError::RegisterErrorMap(STR_TOO_MANY_BUS_STOPS, AIRoad::ERR_ROAD_TOO_MANY_STATIONS);
- AIError::RegisterErrorMap(STR_3007_TOO_MANY_STATIONS_LOADING, AIRoad::ERR_ROAD_TOO_MANY_STATIONS_IN_TOWN);
- AIError::RegisterErrorMap(STR_3009_TOO_CLOSE_TO_ANOTHER_STATION, AIRoad::ERR_ROAD_TOO_CLOSE_TO_ANOTHER_STATION);
AIError::RegisterErrorMap(STR_ERR_ONEWAY_ROADS_CAN_T_HAVE_JUNCTION, AIRoad::ERR_ROAD_ONE_WAY_ROADS_CANNOT_HAVE_JUNCTIONS);
AIError::RegisterErrorMapString(AIRoad::ERR_ROAD_WORKS_IN_PROGRESS, "ERR_ROAD_WORKS_IN_PROGRESS");
AIError::RegisterErrorMapString(AIRoad::ERR_ROAD_DRIVE_THROUGH_WRONG_DIRECTION, "ERR_ROAD_DRIVE_THROUGH_WRONG_DIRECTION");
AIError::RegisterErrorMapString(AIRoad::ERR_ROAD_CANNOT_BUILD_ON_TOWN_ROAD, "ERR_ROAD_CANNOT_BUILD_ON_TOWN_ROAD");
- AIError::RegisterErrorMapString(AIRoad::ERR_ROAD_TOO_MANY_STATIONS, "ERR_ROAD_TOO_MANY_STATIONS");
- AIError::RegisterErrorMapString(AIRoad::ERR_ROAD_TOO_MANY_STATIONS_IN_TOWN, "ERR_ROAD_TOO_MANY_STATIONS_IN_TOWN");
- AIError::RegisterErrorMapString(AIRoad::ERR_ROAD_TOO_CLOSE_TO_ANOTHER_STATION, "ERR_ROAD_TOO_CLOSE_TO_ANOTHER_STATION");
AIError::RegisterErrorMapString(AIRoad::ERR_ROAD_ONE_WAY_ROADS_CANNOT_HAVE_JUNCTIONS, "ERR_ROAD_ONE_WAY_ROADS_CANNOT_HAVE_JUNCTIONS");
SQAIRoad.DefSQStaticMethod(engine, &AIRoad::GetClassName, "GetClassName", 1, "x");
--- a/src/ai/api/ai_station.hpp Tue Apr 08 07:19:02 2008 +0000
+++ b/src/ai/api/ai_station.hpp Tue Apr 08 07:24:23 2008 +0000
@@ -24,10 +24,16 @@
ERR_STATION_BASE = AIError::ERR_CAT_STATION << AIError::ERR_CAT_BIT_SIZE,
/** The station size exceeds the station spread */
- ERR_STATION_TOO_LARGE, // [STR_306C_STATION_TOO_SPREAD_OUT]
+ ERR_STATION_TOO_LARGE, // [STR_306C_STATION_TOO_SPREAD_OUT]
- /** The station is build too close to another station */
- ERR_STATION_TOO_CLOSE_TO_OTHER_STATION, // [STR_300D_TOO_CLOSE_TO_ANOTHER_AIRPORT, STR_3009_TOO_CLOSE_TO_ANOTHER_STATION]
+ /** The station is build too close to another station, airport or dock */
+ ERR_STATION_TOO_CLOSE_TO_ANOTHER_STATION, // [STR_300D_TOO_CLOSE_TO_ANOTHER_AIRPORT, STR_3009_TOO_CLOSE_TO_ANOTHER_STATION, STR_304C_TOO_CLOSE_TO_ANOTHER_DOCK]
+
+ /** There are too many stations, airports and docks in the game */
+ ERR_STATION_TOO_MANY_STATIONS, // [STR_3008_TOO_MANY_STATIONS_LOADING, STR_TOO_MANY_TRUCK_STOPS, STR_TOO_MANY_BUS_STOPS]
+
+ /** There are too many stations, airports of docks in a town */
+ ERR_STATION_TOO_MANY_STATIONS_IN_TOWN, // [STR_3007_TOO_MANY_STATIONS_LOADING]
};
/**
--- a/src/ai/api/ai_station.hpp.sq Tue Apr 08 07:19:02 2008 +0000
+++ b/src/ai/api/ai_station.hpp.sq Tue Apr 08 07:24:23 2008 +0000
@@ -20,22 +20,31 @@
SQAIStation.PreRegister(engine);
SQAIStation.AddConstructor<void (AIStation::*)(), 1>(engine, "x");
- SQAIStation.DefSQConst(engine, AIStation::ERR_STATION_BASE, "ERR_STATION_BASE");
- SQAIStation.DefSQConst(engine, AIStation::ERR_STATION_TOO_LARGE, "ERR_STATION_TOO_LARGE");
- SQAIStation.DefSQConst(engine, AIStation::ERR_STATION_TOO_CLOSE_TO_OTHER_STATION, "ERR_STATION_TOO_CLOSE_TO_OTHER_STATION");
- SQAIStation.DefSQConst(engine, AIStation::STATION_ANY, "STATION_ANY");
- SQAIStation.DefSQConst(engine, AIStation::STATION_TRAIN, "STATION_TRAIN");
- SQAIStation.DefSQConst(engine, AIStation::STATION_TRUCK_STOP, "STATION_TRUCK_STOP");
- SQAIStation.DefSQConst(engine, AIStation::STATION_BUS_STOP, "STATION_BUS_STOP");
- SQAIStation.DefSQConst(engine, AIStation::STATION_AIRPORT, "STATION_AIRPORT");
- SQAIStation.DefSQConst(engine, AIStation::STATION_DOCK, "STATION_DOCK");
+ SQAIStation.DefSQConst(engine, AIStation::ERR_STATION_BASE, "ERR_STATION_BASE");
+ SQAIStation.DefSQConst(engine, AIStation::ERR_STATION_TOO_LARGE, "ERR_STATION_TOO_LARGE");
+ SQAIStation.DefSQConst(engine, AIStation::ERR_STATION_TOO_CLOSE_TO_ANOTHER_STATION, "ERR_STATION_TOO_CLOSE_TO_ANOTHER_STATION");
+ SQAIStation.DefSQConst(engine, AIStation::ERR_STATION_TOO_MANY_STATIONS, "ERR_STATION_TOO_MANY_STATIONS");
+ SQAIStation.DefSQConst(engine, AIStation::ERR_STATION_TOO_MANY_STATIONS_IN_TOWN, "ERR_STATION_TOO_MANY_STATIONS_IN_TOWN");
+ SQAIStation.DefSQConst(engine, AIStation::STATION_ANY, "STATION_ANY");
+ SQAIStation.DefSQConst(engine, AIStation::STATION_TRAIN, "STATION_TRAIN");
+ SQAIStation.DefSQConst(engine, AIStation::STATION_TRUCK_STOP, "STATION_TRUCK_STOP");
+ SQAIStation.DefSQConst(engine, AIStation::STATION_BUS_STOP, "STATION_BUS_STOP");
+ SQAIStation.DefSQConst(engine, AIStation::STATION_AIRPORT, "STATION_AIRPORT");
+ SQAIStation.DefSQConst(engine, AIStation::STATION_DOCK, "STATION_DOCK");
AIError::RegisterErrorMap(STR_306C_STATION_TOO_SPREAD_OUT, AIStation::ERR_STATION_TOO_LARGE);
- AIError::RegisterErrorMap(STR_300D_TOO_CLOSE_TO_ANOTHER_AIRPORT, AIStation::ERR_STATION_TOO_CLOSE_TO_OTHER_STATION);
- AIError::RegisterErrorMap(STR_3009_TOO_CLOSE_TO_ANOTHER_STATION, AIStation::ERR_STATION_TOO_CLOSE_TO_OTHER_STATION);
+ AIError::RegisterErrorMap(STR_300D_TOO_CLOSE_TO_ANOTHER_AIRPORT, AIStation::ERR_STATION_TOO_CLOSE_TO_ANOTHER_STATION);
+ AIError::RegisterErrorMap(STR_3009_TOO_CLOSE_TO_ANOTHER_STATION, AIStation::ERR_STATION_TOO_CLOSE_TO_ANOTHER_STATION);
+ AIError::RegisterErrorMap(STR_304C_TOO_CLOSE_TO_ANOTHER_DOCK, AIStation::ERR_STATION_TOO_CLOSE_TO_ANOTHER_STATION);
+ AIError::RegisterErrorMap(STR_3008_TOO_MANY_STATIONS_LOADING, AIStation::ERR_STATION_TOO_MANY_STATIONS);
+ AIError::RegisterErrorMap(STR_TOO_MANY_TRUCK_STOPS, AIStation::ERR_STATION_TOO_MANY_STATIONS);
+ AIError::RegisterErrorMap(STR_TOO_MANY_BUS_STOPS, AIStation::ERR_STATION_TOO_MANY_STATIONS);
+ AIError::RegisterErrorMap(STR_3007_TOO_MANY_STATIONS_LOADING, AIStation::ERR_STATION_TOO_MANY_STATIONS_IN_TOWN);
- AIError::RegisterErrorMapString(AIStation::ERR_STATION_TOO_LARGE, "ERR_STATION_TOO_LARGE");
- AIError::RegisterErrorMapString(AIStation::ERR_STATION_TOO_CLOSE_TO_OTHER_STATION, "ERR_STATION_TOO_CLOSE_TO_OTHER_STATION");
+ AIError::RegisterErrorMapString(AIStation::ERR_STATION_TOO_LARGE, "ERR_STATION_TOO_LARGE");
+ AIError::RegisterErrorMapString(AIStation::ERR_STATION_TOO_CLOSE_TO_ANOTHER_STATION, "ERR_STATION_TOO_CLOSE_TO_ANOTHER_STATION");
+ AIError::RegisterErrorMapString(AIStation::ERR_STATION_TOO_MANY_STATIONS, "ERR_STATION_TOO_MANY_STATIONS");
+ AIError::RegisterErrorMapString(AIStation::ERR_STATION_TOO_MANY_STATIONS_IN_TOWN, "ERR_STATION_TOO_MANY_STATIONS_IN_TOWN");
SQAIStation.DefSQStaticMethod(engine, &AIStation::GetClassName, "GetClassName", 1, "x");
SQAIStation.DefSQStaticMethod(engine, &AIStation::IsValidStation, "IsValidStation", 2, "xi");
--- a/src/ai/api/ai_tile.hpp Tue Apr 08 07:19:02 2008 +0000
+++ b/src/ai/api/ai_tile.hpp Tue Apr 08 07:24:23 2008 +0000
@@ -24,13 +24,10 @@
ERR_TILE_BASE = AIError::ERR_CAT_TILE << AIError::ERR_CAT_BIT_SIZE,
/** Tile can't be raised any higher */
- ERR_TILE_TOO_HIGH, //< [STR_1003_ALREADY_AT_SEA_LEVEL]
+ ERR_TILE_TOO_HIGH, // [STR_1003_ALREADY_AT_SEA_LEVEL]
/** Tile can't be lowered any lower */
- ERR_TILE_TOO_LOW, //< [STR_1003_ALREADY_AT_SEA_LEVEL]
-
- /** Tile can't be raised or lowered because it is to close to the map */
- ERR_TILE_TOO_CLOSE_TO_EDGE, //< [STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP]
+ ERR_TILE_TOO_LOW, // [STR_1003_ALREADY_AT_SEA_LEVEL]
};
/**
@@ -161,9 +158,9 @@
* @param tile The tile to raise.
* @param slope Corners to raise (SLOPE_xxx).
* @pre AIMap::IsValidTile(tile).
- * @exception AIERROR::ERR_AREA_NOT_CLEAR
- * @exception AITILE::ERR_TILE_TOO_HIGH
- * @exception AITILE::ERR_TILE_CLOSE_TO_EDGE
+ * @exception AIError::ERR_AREA_NOT_CLEAR
+ * @exception AIError::ERR_TOO_CLOSE_TO_EDGE
+ * @exception AITile::ERR_TILE_TOO_HIGH
* @return 0 means failed, 1 means success.
*/
static bool RaiseTile(TileIndex tile, int32 slope);
@@ -174,9 +171,9 @@
* @param tile The tile to lower.
* @param slope Corners to lower (SLOPE_xxx).
* @pre AIMap::IsValidTile(tile).
- * @exception AIERROR::ERR_AREA_NOT_CLEAR
- * @exception AITILE::ERR_TILE_TOO_LOW
- * @exception AITILE::ERR_TILE_CLOSE_TO_EDGE
+ * @exception AIError::ERR_AREA_NOT_CLEAR
+ * @exception AIError::ERR_TOO_CLOSE_TO_EDGE
+ * @exception AITile::ERR_TILE_TOO_LOW
* @return 0 means failed, 1 means success.
*/
static bool LowerTile(TileIndex tile, int32 slope);
@@ -185,7 +182,7 @@
* Destroy everything on the given tile.
* @param tile The tile to demolish.
* @pre AIMap::IsValidTile(tile).
- * @exception AIERROR::ERR_AREA_NOT_CLEAR
+ * @exception AIError::ERR_AREA_NOT_CLEAR
* @return True if and only if the tile was demolished.
*/
static bool DemolishTile(TileIndex tile);
--- a/src/ai/api/ai_tile.hpp.sq Tue Apr 08 07:19:02 2008 +0000
+++ b/src/ai/api/ai_tile.hpp.sq Tue Apr 08 07:24:23 2008 +0000
@@ -20,39 +20,36 @@
SQAITile.PreRegister(engine);
SQAITile.AddConstructor<void (AITile::*)(), 1>(engine, "x");
- SQAITile.DefSQConst(engine, AITile::ERR_TILE_BASE, "ERR_TILE_BASE");
- SQAITile.DefSQConst(engine, AITile::ERR_TILE_TOO_HIGH, "ERR_TILE_TOO_HIGH");
- SQAITile.DefSQConst(engine, AITile::ERR_TILE_TOO_LOW, "ERR_TILE_TOO_LOW");
- SQAITile.DefSQConst(engine, AITile::ERR_TILE_TOO_CLOSE_TO_EDGE, "ERR_TILE_TOO_CLOSE_TO_EDGE");
- SQAITile.DefSQConst(engine, AITile::SLOPE_FLAT, "SLOPE_FLAT");
- SQAITile.DefSQConst(engine, AITile::SLOPE_W, "SLOPE_W");
- SQAITile.DefSQConst(engine, AITile::SLOPE_S, "SLOPE_S");
- SQAITile.DefSQConst(engine, AITile::SLOPE_E, "SLOPE_E");
- SQAITile.DefSQConst(engine, AITile::SLOPE_N, "SLOPE_N");
- SQAITile.DefSQConst(engine, AITile::SLOPE_STEEP, "SLOPE_STEEP");
- SQAITile.DefSQConst(engine, AITile::SLOPE_NW, "SLOPE_NW");
- SQAITile.DefSQConst(engine, AITile::SLOPE_SW, "SLOPE_SW");
- SQAITile.DefSQConst(engine, AITile::SLOPE_SE, "SLOPE_SE");
- SQAITile.DefSQConst(engine, AITile::SLOPE_NE, "SLOPE_NE");
- SQAITile.DefSQConst(engine, AITile::SLOPE_EW, "SLOPE_EW");
- SQAITile.DefSQConst(engine, AITile::SLOPE_NS, "SLOPE_NS");
- SQAITile.DefSQConst(engine, AITile::SLOPE_ELEVATED, "SLOPE_ELEVATED");
- SQAITile.DefSQConst(engine, AITile::SLOPE_NWS, "SLOPE_NWS");
- SQAITile.DefSQConst(engine, AITile::SLOPE_WSE, "SLOPE_WSE");
- SQAITile.DefSQConst(engine, AITile::SLOPE_SEN, "SLOPE_SEN");
- SQAITile.DefSQConst(engine, AITile::SLOPE_ENW, "SLOPE_ENW");
- SQAITile.DefSQConst(engine, AITile::SLOPE_STEEP_W, "SLOPE_STEEP_W");
- SQAITile.DefSQConst(engine, AITile::SLOPE_STEEP_S, "SLOPE_STEEP_S");
- SQAITile.DefSQConst(engine, AITile::SLOPE_STEEP_E, "SLOPE_STEEP_E");
- SQAITile.DefSQConst(engine, AITile::SLOPE_STEEP_N, "SLOPE_STEEP_N");
+ SQAITile.DefSQConst(engine, AITile::ERR_TILE_BASE, "ERR_TILE_BASE");
+ SQAITile.DefSQConst(engine, AITile::ERR_TILE_TOO_HIGH, "ERR_TILE_TOO_HIGH");
+ SQAITile.DefSQConst(engine, AITile::ERR_TILE_TOO_LOW, "ERR_TILE_TOO_LOW");
+ SQAITile.DefSQConst(engine, AITile::SLOPE_FLAT, "SLOPE_FLAT");
+ SQAITile.DefSQConst(engine, AITile::SLOPE_W, "SLOPE_W");
+ SQAITile.DefSQConst(engine, AITile::SLOPE_S, "SLOPE_S");
+ SQAITile.DefSQConst(engine, AITile::SLOPE_E, "SLOPE_E");
+ SQAITile.DefSQConst(engine, AITile::SLOPE_N, "SLOPE_N");
+ SQAITile.DefSQConst(engine, AITile::SLOPE_STEEP, "SLOPE_STEEP");
+ SQAITile.DefSQConst(engine, AITile::SLOPE_NW, "SLOPE_NW");
+ SQAITile.DefSQConst(engine, AITile::SLOPE_SW, "SLOPE_SW");
+ SQAITile.DefSQConst(engine, AITile::SLOPE_SE, "SLOPE_SE");
+ SQAITile.DefSQConst(engine, AITile::SLOPE_NE, "SLOPE_NE");
+ SQAITile.DefSQConst(engine, AITile::SLOPE_EW, "SLOPE_EW");
+ SQAITile.DefSQConst(engine, AITile::SLOPE_NS, "SLOPE_NS");
+ SQAITile.DefSQConst(engine, AITile::SLOPE_ELEVATED, "SLOPE_ELEVATED");
+ SQAITile.DefSQConst(engine, AITile::SLOPE_NWS, "SLOPE_NWS");
+ SQAITile.DefSQConst(engine, AITile::SLOPE_WSE, "SLOPE_WSE");
+ SQAITile.DefSQConst(engine, AITile::SLOPE_SEN, "SLOPE_SEN");
+ SQAITile.DefSQConst(engine, AITile::SLOPE_ENW, "SLOPE_ENW");
+ SQAITile.DefSQConst(engine, AITile::SLOPE_STEEP_W, "SLOPE_STEEP_W");
+ SQAITile.DefSQConst(engine, AITile::SLOPE_STEEP_S, "SLOPE_STEEP_S");
+ SQAITile.DefSQConst(engine, AITile::SLOPE_STEEP_E, "SLOPE_STEEP_E");
+ SQAITile.DefSQConst(engine, AITile::SLOPE_STEEP_N, "SLOPE_STEEP_N");
- AIError::RegisterErrorMap(STR_1003_ALREADY_AT_SEA_LEVEL, AITile::ERR_TILE_TOO_HIGH);
- AIError::RegisterErrorMap(STR_1003_ALREADY_AT_SEA_LEVEL, AITile::ERR_TILE_TOO_LOW);
- AIError::RegisterErrorMap(STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP, AITile::ERR_TILE_TOO_CLOSE_TO_EDGE);
+ AIError::RegisterErrorMap(STR_1003_ALREADY_AT_SEA_LEVEL, AITile::ERR_TILE_TOO_HIGH);
+ AIError::RegisterErrorMap(STR_1003_ALREADY_AT_SEA_LEVEL, AITile::ERR_TILE_TOO_LOW);
- AIError::RegisterErrorMapString(AITile::ERR_TILE_TOO_HIGH, "ERR_TILE_TOO_HIGH");
- AIError::RegisterErrorMapString(AITile::ERR_TILE_TOO_LOW, "ERR_TILE_TOO_LOW");
- AIError::RegisterErrorMapString(AITile::ERR_TILE_TOO_CLOSE_TO_EDGE, "ERR_TILE_TOO_CLOSE_TO_EDGE");
+ AIError::RegisterErrorMapString(AITile::ERR_TILE_TOO_HIGH, "ERR_TILE_TOO_HIGH");
+ AIError::RegisterErrorMapString(AITile::ERR_TILE_TOO_LOW, "ERR_TILE_TOO_LOW");
SQAITile.DefSQStaticMethod(engine, &AITile::GetClassName, "GetClassName", 1, "x");
SQAITile.DefSQStaticMethod(engine, &AITile::IsBuildable, "IsBuildable", 2, "xi");