Add tunnel/bridge entrance/exit values to entry direction conditional

pull/336/head
Jonathan G Rennison 3 years ago
parent 74bfe4e6d2
commit b259d04339

@ -3177,6 +3177,7 @@ STR_TRACE_RESTRICT_CONDITIONAL_ORDER_DEPOT :{STRING} {STRIN
STR_TRACE_RESTRICT_CONDITIONAL_CARGO :{STRING} train {STRING} cargo: {STRING} then
STR_TRACE_RESTRICT_CONDITIONAL_ENTRY_DIRECTION :{STRING} train {STRING} entering from {STRING} tile edge then
STR_TRACE_RESTRICT_CONDITIONAL_ENTRY_SIGNAL_FACE :{STRING} train {STRING} entering from {STRING} of signal then
STR_TRACE_RESTRICT_CONDITIONAL_ENTRY_SIGNAL_TYPE :{STRING} train {STRING} {STRING} then
STR_TRACE_RESTRICT_CONDITIONAL_TILE_INDEX :{STRING} {STRING} {STRING} at {NUM} x {NUM} then
STR_TRACE_RESTRICT_CONDITIONAL_GROUP :{STRING} train {STRING} in group: {GROUP} then
STR_TRACE_RESTRICT_CONDITIONAL_GROUP_STR :{STRING} train {STRING} in group: {STRING} {BLACK}{STRING}then
@ -3220,6 +3221,8 @@ STR_TRACE_RESTRICT_DIRECTION_NE :north-east
STR_TRACE_RESTRICT_DIRECTION_SE :south-east
STR_TRACE_RESTRICT_DIRECTION_SW :south-west
STR_TRACE_RESTRICT_DIRECTION_NW :north-west
STR_TRACE_RESTRICT_DIRECTION_TUNBRIDGE_ENTRANCE :entering tunnel/bridge
STR_TRACE_RESTRICT_DIRECTION_TUNBRIDGE_EXIT :exiting tunnel/bridge
STR_TRACE_RESTRICT_COMPANY :Company
STR_TRACE_RESTRICT_UNDEFINED_COMPANY :Undefined company
STR_TRACE_RESTRICT_SLOT_OP :Slot operation

@ -328,13 +328,21 @@ void TraceRestrictProgram::Execute(const Train* v, const TraceRestrictProgramInp
break;
case TRDTSV_FRONT:
direction_match = IsTileType(input.tile, MP_RAILWAY) && HasSignalOnTrackdir(input.tile, input.trackdir);
direction_match = (IsTileType(input.tile, MP_RAILWAY) && HasSignalOnTrackdir(input.tile, input.trackdir)) || IsTileType(input.tile, MP_TUNNELBRIDGE);
break;
case TRDTSV_BACK:
direction_match = IsTileType(input.tile, MP_RAILWAY) && !HasSignalOnTrackdir(input.tile, input.trackdir);
break;
case TRDTSV_TUNBRIDGE_ENTER:
direction_match = IsTunnelBridgeSignalSimulationEntranceTile(input.tile) && TrackdirEntersTunnelBridge(input.tile, input.trackdir);
break;
case TRDTSV_TUNBRIDGE_EXIT:
direction_match = IsTunnelBridgeSignalSimulationExitTile(input.tile) && TrackdirExitsTunnelBridge(input.tile, input.trackdir);
break;
default:
NOT_REACHED();
break;

@ -194,6 +194,8 @@ enum TraceRestrictDirectionTypeSpecialValue {
TRNTSV_NW = 3, ///< DIAGDIR_NW: entering at NW tile edge
TRDTSV_FRONT = 4, ///< entering at front face of signal
TRDTSV_BACK = 5, ///< entering at rear face of signal
TRDTSV_TUNBRIDGE_ENTER = 32, ///< signal is a tunnel/bridge entrance
TRDTSV_TUNBRIDGE_EXIT = 33, ///< signal is a tunnel/bridge exit
};
/**

@ -263,6 +263,8 @@ static const StringID _direction_value_str[] = {
STR_TRACE_RESTRICT_DIRECTION_SE,
STR_TRACE_RESTRICT_DIRECTION_SW,
STR_TRACE_RESTRICT_DIRECTION_NW,
STR_TRACE_RESTRICT_DIRECTION_TUNBRIDGE_ENTRANCE,
STR_TRACE_RESTRICT_DIRECTION_TUNBRIDGE_EXIT,
INVALID_STRING_ID
};
static const uint _direction_value_val[] = {
@ -272,6 +274,8 @@ static const uint _direction_value_val[] = {
TRNTSV_SE,
TRNTSV_SW,
TRNTSV_NW,
TRDTSV_TUNBRIDGE_ENTER,
TRDTSV_TUNBRIDGE_EXIT,
};
/** value drop down list for direction type strings and values */
@ -1125,7 +1129,9 @@ static void DrawInstructionString(const TraceRestrictProgram *prog, TraceRestric
break;
case TRVT_DIRECTION:
if (GetTraceRestrictValue(item) >= TRDTSV_FRONT) {
if (GetTraceRestrictValue(item) >= TRDTSV_TUNBRIDGE_ENTER) {
instruction_string = STR_TRACE_RESTRICT_CONDITIONAL_ENTRY_SIGNAL_TYPE;
} else if (GetTraceRestrictValue(item) >= TRDTSV_FRONT) {
instruction_string = STR_TRACE_RESTRICT_CONDITIONAL_ENTRY_SIGNAL_FACE;
} else {
instruction_string = STR_TRACE_RESTRICT_CONDITIONAL_ENTRY_DIRECTION;

Loading…
Cancel
Save