Add tracerestrict feature reverse behind signal

This commit is contained in:
Jonathan G Rennison
2018-12-05 20:01:09 +00:00
parent a315d39067
commit cd41683b9b
12 changed files with 162 additions and 6 deletions

View File

@@ -152,6 +152,7 @@ static const StringID _program_insert_str[] = {
STR_TRACE_RESTRICT_LONG_RESERVE,
STR_TRACE_RESTRICT_WAIT_AT_PBS,
STR_TRACE_RESTRICT_SLOT_OP,
STR_TRACE_RESTRICT_REVERSE,
INVALID_STRING_ID
};
static const uint32 _program_insert_else_hide_mask = 8; ///< disable bitmask for else
@@ -170,6 +171,7 @@ static const uint _program_insert_val[] = {
TRIT_LONG_RESERVE, // long reserve
TRIT_WAIT_AT_PBS, // wait at PBS signal
TRIT_SLOT, // slot operation
TRIT_REVERSE, // reverse
};
/** insert drop down list strings and values */
@@ -297,6 +299,21 @@ static const TraceRestrictDropDownListSet _train_status_value = {
_train_status_value_str, _train_status_value_val,
};
static const StringID _reverse_value_str[] = {
STR_TRACE_RESTRICT_REVERSE_SIG,
STR_TRACE_RESTRICT_REVERSE_SIG_CANCEL,
INVALID_STRING_ID
};
static const uint _reverse_value_val[] = {
TRRVF_REVERSE,
TRRVF_CANCEL_REVERSE,
};
/** value drop down list for wait at PBS types strings and values */
static const TraceRestrictDropDownListSet _reverse_value = {
_reverse_value_str, _reverse_value_val,
};
/**
* Get index of @p value in @p list_set
* if @p value is not present, assert if @p missing_ok is false, otherwise return -1
@@ -353,6 +370,7 @@ static const TraceRestrictDropDownListSet *GetTypeDropDownListSet(TraceRestrictG
STR_TRACE_RESTRICT_LONG_RESERVE,
STR_TRACE_RESTRICT_WAIT_AT_PBS,
STR_TRACE_RESTRICT_SLOT_OP,
STR_TRACE_RESTRICT_REVERSE,
INVALID_STRING_ID,
};
static const uint val_action[] = {
@@ -362,6 +380,7 @@ static const TraceRestrictDropDownListSet *GetTypeDropDownListSet(TraceRestrictG
TRIT_LONG_RESERVE,
TRIT_WAIT_AT_PBS,
TRIT_SLOT,
TRIT_REVERSE,
};
static const TraceRestrictDropDownListSet set_action = {
str_action, val_action,
@@ -1188,6 +1207,22 @@ static void DrawInstructionString(const TraceRestrictProgram *prog, TraceRestric
SetDParam(2, selected ? STR_TRACE_RESTRICT_WHITE : STR_EMPTY);
break;
case TRIT_REVERSE:
switch (static_cast<TraceRestrictReverseValueField>(GetTraceRestrictValue(item))) {
case TRRVF_REVERSE:
instruction_string = STR_TRACE_RESTRICT_REVERSE_SIG;
break;
case TRRVF_CANCEL_REVERSE:
instruction_string = STR_TRACE_RESTRICT_REVERSE_SIG_CANCEL;
break;
default:
NOT_REACHED();
break;
}
break;
default:
NOT_REACHED();
break;
@@ -1482,6 +1517,10 @@ public:
this->ShowDropDownListWithValue(&_train_status_value, GetTraceRestrictValue(item), false, TR_WIDGET_VALUE_DROPDOWN, 0, 0, 0);
break;
case TRVT_REVERSE:
this->ShowDropDownListWithValue(&_reverse_value, GetTraceRestrictValue(item), false, TR_WIDGET_VALUE_DROPDOWN, 0, 0, 0);
break;
default:
break;
}
@@ -2465,6 +2504,13 @@ private:
GetDropDownStringByValue(&_train_status_value, GetTraceRestrictValue(item));
break;
case TRVT_REVERSE:
right_sel->SetDisplayedPlane(DPR_VALUE_DROPDOWN);
this->EnableWidget(TR_WIDGET_VALUE_DROPDOWN);
this->GetWidget<NWidgetCore>(TR_WIDGET_VALUE_DROPDOWN)->widget_data =
GetDropDownStringByValue(&_reverse_value, GetTraceRestrictValue(item));
break;
default:
break;
}