Tracerestrict: Add load percentage conditional

pull/104/head
Jonathan G Rennison 5 years ago
parent 34a6f3c72a
commit 7332c0b673

@ -2666,6 +2666,7 @@ STR_TRACE_RESTRICT_VARIABLE_CURRENT_ORDER :current order
STR_TRACE_RESTRICT_VARIABLE_NEXT_ORDER :next order
STR_TRACE_RESTRICT_VARIABLE_LAST_VISITED_STATION :last visited station
STR_TRACE_RESTRICT_VARIABLE_CARGO :cargo
STR_TRACE_RESTRICT_VARIABLE_LOAD_PERCENT :load percentage
STR_TRACE_RESTRICT_VARIABLE_ENTRY_DIRECTION :entry direction
STR_TRACE_RESTRICT_VARIABLE_PBS_ENTRY_SIGNAL :PBS entry signal
STR_TRACE_RESTRICT_VARIABLE_PBS_ENTRY_SIGNAL_LONG :entered signal of PBS block

@ -22,6 +22,7 @@
#include "string_func.h"
#include "pathfinder/yapf/yapf_cache.h"
#include "scope_info.h"
#include "vehicle_func.h"
#include <vector>
#include <algorithm>
@ -493,6 +494,11 @@ void TraceRestrictProgram::Execute(const Train* v, const TraceRestrictProgramInp
break;
}
case TRIT_COND_LOAD_PERCENT: {
result = TestCondition(CalcPercentVehicleFilled(v, nullptr), condop, condvalue);
break;
}
default:
NOT_REACHED();
}
@ -722,6 +728,7 @@ CommandCost TraceRestrictProgram::Validate(const std::vector<TraceRestrictItem>
case TRIT_COND_PHYS_RATIO:
case TRIT_COND_TRAIN_OWNER:
case TRIT_COND_TRAIN_STATUS:
case TRIT_COND_LOAD_PERCENT:
break;
default:
@ -858,6 +865,7 @@ void SetTraceRestrictValueDefault(TraceRestrictItem &item, TraceRestrictValueTyp
case TRVT_WAIT_AT_PBS:
case TRVT_TRAIN_STATUS:
case TRVT_REVERSE:
case TRVT_PERCENT:
SetTraceRestrictValue(item, 0);
if (!IsTraceRestrictTypeAuxSubtype(GetTraceRestrictType(item))) {
SetTraceRestrictAuxField(item, 0);

@ -138,6 +138,7 @@ enum TraceRestrictItemType {
TRIT_COND_SLOT_OCCUPANCY = 22, ///< Test train slot occupancy state
TRIT_COND_TRAIN_OWNER = 24, ///< Test train owner
TRIT_COND_TRAIN_STATUS = 25, ///< Test train status
TRIT_COND_LOAD_PERCENT = 26, ///< Test train load percentage
TRIT_COND_END = 48, ///< End (exclusive) of conditional item types, note that this has the same value as TRIT_REVERSE
TRIT_REVERSE = 48, ///< Reverse behind signal
@ -553,6 +554,7 @@ enum TraceRestrictValueType {
TRVT_WAIT_AT_PBS = 18,///< takes a TraceRestrictWaitAtPbsValueField value
TRVT_SLOT_INDEX = 19,///< takes a TraceRestrictSlotID
TRVT_SLOT_INDEX_INT = 20,///< takes a TraceRestrictSlotID, and an integer in the next item slot
TRVT_PERCENT = 21,///> takes a unsigned integer percentage value between 0 and 100
TRVT_OWNER = 40,///< takes a CompanyID
TRVT_TRAIN_STATUS = 41,///< takes a TraceRestrictTrainStatusValueField
TRVT_REVERSE = 42,///< takes a TraceRestrictReverseValueField
@ -677,6 +679,10 @@ static inline TraceRestrictTypePropertySet GetTraceRestrictTypeProperties(TraceR
out.cond_type = TRCOT_BINARY;
break;
case TRIT_COND_LOAD_PERCENT:
out.value_type = TRVT_PERCENT;
break;
default:
NOT_REACHED();
break;

@ -394,6 +394,7 @@ static const TraceRestrictDropDownListSet *GetTypeDropDownListSet(TraceRestrictG
STR_TRACE_RESTRICT_VARIABLE_NEXT_ORDER,
STR_TRACE_RESTRICT_VARIABLE_LAST_VISITED_STATION,
STR_TRACE_RESTRICT_VARIABLE_CARGO,
STR_TRACE_RESTRICT_VARIABLE_LOAD_PERCENT,
STR_TRACE_RESTRICT_VARIABLE_ENTRY_DIRECTION,
STR_TRACE_RESTRICT_VARIABLE_PBS_ENTRY_SIGNAL,
STR_TRACE_RESTRICT_VARIABLE_TRAIN_GROUP,
@ -417,6 +418,7 @@ static const TraceRestrictDropDownListSet *GetTypeDropDownListSet(TraceRestrictG
TRIT_COND_NEXT_ORDER,
TRIT_COND_LAST_STATION,
TRIT_COND_CARGO,
TRIT_COND_LOAD_PERCENT,
TRIT_COND_ENTRY_DIRECTION,
TRIT_COND_PBS_ENTRY_SIGNAL,
TRIT_COND_TRAIN_GROUP,
@ -441,7 +443,7 @@ static const TraceRestrictDropDownListSet *GetTypeDropDownListSet(TraceRestrictG
if (_settings_client.gui.show_adv_tracerestrict_features) {
*hide_mask = 0;
} else {
*hide_mask = is_conditional ? 0x70000 : 0x70;
*hide_mask = is_conditional ? 0xE0000 : 0x70;
}
}
return is_conditional ? &set_cond : &set_action;
@ -683,6 +685,7 @@ static bool IsIntegerValueType(TraceRestrictValueType type)
case TRVT_WEIGHT:
case TRVT_POWER:
case TRVT_FORCE:
case TRVT_PERCENT:
return true;
default:
@ -740,6 +743,10 @@ static uint ConvertIntegerValue(TraceRestrictValueType type, uint in, bool to_di
case TRVT_PF_PENALTY:
return in;
case TRVT_PERCENT:
if (!to_display && in > 100) return 100;
return in;
default:
NOT_REACHED();
return 0;
@ -908,6 +915,7 @@ static void DrawInstructionString(const TraceRestrictProgram *prog, TraceRestric
} else {
switch (properties.value_type) {
case TRVT_INT:
case TRVT_PERCENT:
instruction_string = STR_TRACE_RESTRICT_CONDITIONAL_COMPARE_INTEGER;
DrawInstructionStringConditionalIntegerCommon(item, properties);
break;

Loading…
Cancel
Save