Changeset - r15396:928b1cf244bb
[Not reviewed]
master
0 7 0
michi_cc - 14 years ago 2010-07-02 16:34:11
michi_cc@openttd.org
(svn r20049) -Feature: [NewGRF] Add a railtype flag to disallow level crossings per railtype.
7 files changed with 29 insertions and 3 deletions:
0 comments (0 inline, 0 general)
src/ai/api/ai_changelog.hpp
Show inline comments
 
@@ -22,6 +22,7 @@
 
 * \li IsEnd for all lists.
 
 * \li AIIndustry::GetIndustryID
 
 * \li AIRail::GetMaxSpeed
 
 * \li AIRail::ERR_RAILTYPE_DISALLOWS_CROSSING
 
 *
 
 * API removals:
 
 * \li HasNext for all lists.
src/ai/api/ai_rail.hpp
Show inline comments
 
@@ -38,6 +38,9 @@ public:
 

	
 
		/** Non-uniform stations is diabled */
 
		ERR_NONUNIFORM_STATIONS_DISABLED,  // [STR_ERROR_NONUNIFORM_STATIONS_DISALLOWED]
 

	
 
		/** This railtype cannot have crossings */
 
		ERR_RAILTYPE_DISALLOWS_CROSSING,   // [STR_ERROR_CROSSING_DISALLOWED]
 
	};
 

	
 
	/**
src/ai/api/ai_rail.hpp.sq
Show inline comments
 
@@ -42,6 +42,7 @@ void SQAIRail_Register(Squirrel *engine)
 
	SQAIRail.DefSQConst(engine, AIRail::ERR_CROSSING_ON_ONEWAY_ROAD,      "ERR_CROSSING_ON_ONEWAY_ROAD");
 
	SQAIRail.DefSQConst(engine, AIRail::ERR_UNSUITABLE_TRACK,             "ERR_UNSUITABLE_TRACK");
 
	SQAIRail.DefSQConst(engine, AIRail::ERR_NONUNIFORM_STATIONS_DISABLED, "ERR_NONUNIFORM_STATIONS_DISABLED");
 
	SQAIRail.DefSQConst(engine, AIRail::ERR_RAILTYPE_DISALLOWS_CROSSING,  "ERR_RAILTYPE_DISALLOWS_CROSSING");
 
	SQAIRail.DefSQConst(engine, AIRail::RAILTYPE_INVALID,                 "RAILTYPE_INVALID");
 
	SQAIRail.DefSQConst(engine, AIRail::RAILTRACK_NE_SW,                  "RAILTRACK_NE_SW");
 
	SQAIRail.DefSQConst(engine, AIRail::RAILTRACK_NW_SE,                  "RAILTRACK_NW_SE");
 
@@ -71,10 +72,12 @@ void SQAIRail_Register(Squirrel *engine)
 
	AIError::RegisterErrorMap(STR_ERROR_CROSSING_ON_ONEWAY_ROAD,        AIRail::ERR_CROSSING_ON_ONEWAY_ROAD);
 
	AIError::RegisterErrorMap(STR_ERROR_NO_SUITABLE_RAILROAD_TRACK,     AIRail::ERR_UNSUITABLE_TRACK);
 
	AIError::RegisterErrorMap(STR_ERROR_NONUNIFORM_STATIONS_DISALLOWED, AIRail::ERR_NONUNIFORM_STATIONS_DISABLED);
 
	AIError::RegisterErrorMap(STR_ERROR_CROSSING_DISALLOWED,            AIRail::ERR_RAILTYPE_DISALLOWS_CROSSING);
 

	
 
	AIError::RegisterErrorMapString(AIRail::ERR_CROSSING_ON_ONEWAY_ROAD,      "ERR_CROSSING_ON_ONEWAY_ROAD");
 
	AIError::RegisterErrorMapString(AIRail::ERR_UNSUITABLE_TRACK,             "ERR_UNSUITABLE_TRACK");
 
	AIError::RegisterErrorMapString(AIRail::ERR_NONUNIFORM_STATIONS_DISABLED, "ERR_NONUNIFORM_STATIONS_DISABLED");
 
	AIError::RegisterErrorMapString(AIRail::ERR_RAILTYPE_DISALLOWS_CROSSING,  "ERR_RAILTYPE_DISALLOWS_CROSSING");
 

	
 
	SQAIRail.DefSQStaticMethod(engine, &AIRail::IsRailTile,                      "IsRailTile",                      2, ".i");
 
	SQAIRail.DefSQStaticMethod(engine, &AIRail::IsLevelCrossingTile,             "IsLevelCrossingTile",             2, ".i");
src/lang/english.txt
Show inline comments
 
@@ -3543,6 +3543,7 @@ STR_ERROR_MUST_REMOVE_SIGNALS_FIRST     
 
STR_ERROR_NO_SUITABLE_RAILROAD_TRACK                            :{WHITE}No suitable railway track
 
STR_ERROR_MUST_REMOVE_RAILROAD_TRACK                            :{WHITE}Must remove railway track first
 
STR_ERROR_CROSSING_ON_ONEWAY_ROAD                               :{WHITE}Road is one way or blocked
 
STR_ERROR_CROSSING_DISALLOWED                                   :{WHITE}Level crossings not allowed for this rail type
 
STR_ERROR_CAN_T_BUILD_SIGNALS_HERE                              :{WHITE}Can't build signals here...
 
STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK                            :{WHITE}Can't build railway track here...
 
STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK                           :{WHITE}Can't remove railway track from here...
src/rail.h
Show inline comments
 
@@ -22,10 +22,12 @@
 

	
 
/** Railtype flags. */
 
enum RailTypeFlags {
 
	RTF_CATENARY = 0,                  ///< Bit number for drawing a catenary.
 
	RTF_CATENARY          = 0,                           ///< Bit number for drawing a catenary.
 
	RTF_NO_LEVEL_CROSSING = 1,                           ///< Bit number for disallowing level crossings.
 

	
 
	RTFB_NONE     = 0,                 ///< All flags cleared.
 
	RTFB_CATENARY = 1 << RTF_CATENARY, ///< Value for drawing a catenary.
 
	RTFB_NONE              = 0,                          ///< All flags cleared.
 
	RTFB_CATENARY          = 1 << RTF_CATENARY,          ///< Value for drawing a catenary.
 
	RTFB_NO_LEVEL_CROSSING = 1 << RTF_NO_LEVEL_CROSSING, ///< Value for disallowing level crossings.
 
};
 
DECLARE_ENUM_AS_BIT_SET(RailTypeFlags)
 

	
 
@@ -259,6 +261,16 @@ static inline bool HasPowerOnRail(RailTy
 
}
 

	
 
/**
 
 * Test if a RailType disallows build of level crossings.
 
 * @param rt The RailType to check.
 
 * @return Whether level crossings are not allowed.
 
 */
 
static inline bool RailNoLevelCrossings(RailType rt)
 
{
 
	return HasBit(GetRailTypeInfo(rt)->flags, RTF_NO_LEVEL_CROSSING);
 
}
 

	
 
/**
 
 * Returns the cost of building the specified railtype.
 
 * @param railtype The railtype being built.
 
 * @return The cost multiplier.
src/rail_cmd.cpp
Show inline comments
 
@@ -423,6 +423,8 @@ CommandCost CmdBuildSingleRail(TileIndex
 

	
 
				if (GetDisallowedRoadDirections(tile) != DRD_NONE) return_cmd_error(STR_ERROR_CROSSING_ON_ONEWAY_ROAD);
 

	
 
				if (RailNoLevelCrossings(railtype)) return_cmd_error(STR_ERROR_CROSSING_DISALLOWED);
 

	
 
				RoadTypes roadtypes = GetRoadTypes(tile);
 
				RoadBits road = GetRoadBits(tile, ROADTYPE_ROAD);
 
				RoadBits tram = GetRoadBits(tile, ROADTYPE_TRAM);
src/road_cmd.cpp
Show inline comments
 
@@ -546,6 +546,10 @@ CommandCost CmdBuildRoad(TileIndex tile,
 

	
 
			if (GetRailTileType(tile) != RAIL_TILE_NORMAL) goto do_clear;
 

	
 
			if (RailNoLevelCrossings(GetRailType(tile))) {
 
				return_cmd_error(STR_ERROR_CROSSING_DISALLOWED);
 
			}
 

	
 
			Axis roaddir;
 
			switch (GetTrackBits(tile)) {
 
				case TRACK_BIT_X:
0 comments (0 inline, 0 general)