Add train is in slot conditional order

This commit is contained in:
Jonathan G Rennison
2018-11-05 04:21:08 +00:00
parent c632539bb7
commit 83a063f51c
6 changed files with 51 additions and 6 deletions

View File

@@ -606,6 +606,7 @@ static const OrderConditionVariable _order_conditional_variable[] = {
OCV_CARGO_ACCEPTANCE,
OCV_FREE_PLATFORMS,
OCV_SLOT_OCCUPANCY,
OCV_TRAIN_IN_SLOT,
OCV_PERCENT,
OCV_UNCONDITIONALLY,
};
@@ -658,6 +659,18 @@ static const StringID _order_conditional_condition_is_fully_occupied[] = {
INVALID_STRING_ID,
};
static const StringID _order_conditional_condition_is_in_slot[] = {
STR_NULL,
STR_NULL,
STR_NULL,
STR_NULL,
STR_NULL,
STR_NULL,
STR_ORDER_CONDITIONAL_COMPARATOR_TRAIN_IN_SLOT,
STR_ORDER_CONDITIONAL_COMPARATOR_TRAIN_NOT_IN_SLOT,
INVALID_STRING_ID,
};
extern uint ConvertSpeedToDisplaySpeed(uint speed);
extern uint ConvertDisplaySpeedToSpeed(uint speed);
@@ -854,6 +867,15 @@ void DrawOrderString(const Vehicle *v, const Order *order, int order_index, int
SetDParam(2, STR_TRACE_RESTRICT_VARIABLE_UNDEFINED);
}
SetDParam(3, order->GetConditionComparator() == OCC_IS_TRUE ? STR_ORDER_CONDITIONAL_COMPARATOR_FULLY_OCCUPIED : STR_ORDER_CONDITIONAL_COMPARATOR_NOT_YET_FULLY_OCCUPIED);
} else if (ocv == OCV_TRAIN_IN_SLOT) {
if (TraceRestrictSlot::IsValidID(order->GetXData())) {
SetDParam(0, STR_ORDER_CONDITIONAL_IN_SLOT);
SetDParam(3, order->GetXData());
} else {
SetDParam(0, STR_ORDER_CONDITIONAL_IN_INVALID_SLOT);
SetDParam(3, STR_TRACE_RESTRICT_VARIABLE_UNDEFINED);
}
SetDParam(2, order->GetConditionComparator() == OCC_IS_TRUE ? STR_ORDER_CONDITIONAL_COMPARATOR_TRAIN_IN_SLOT : STR_ORDER_CONDITIONAL_COMPARATOR_TRAIN_NOT_IN_SLOT);
} else {
OrderConditionComparator occ = order->GetConditionComparator();
bool is_cargo = ocv == OCV_CARGO_ACCEPTANCE || ocv == OCV_CARGO_WAITING;
@@ -1147,6 +1169,9 @@ private:
case OCV_SLOT_OCCUPANCY:
return _order_conditional_condition_is_fully_occupied;
case OCV_TRAIN_IN_SLOT:
return _order_conditional_condition_is_in_slot;
default:
return _order_conditional_condition;
}
@@ -1685,7 +1710,7 @@ public:
OrderConditionVariable ocv = (order == nullptr) ? OCV_LOAD_PERCENTAGE : order->GetConditionVariable();
bool is_cargo = (ocv == OCV_CARGO_ACCEPTANCE || ocv == OCV_CARGO_WAITING);
bool is_slot_occupancy = (ocv == OCV_SLOT_OCCUPANCY);
bool is_slot_occupancy = (ocv == OCV_SLOT_OCCUPANCY || ocv == OCV_TRAIN_IN_SLOT);
if (is_cargo) {
if (order == NULL || !CargoSpec::Get(order->GetConditionValue())->IsValid()) {
@@ -2083,7 +2108,8 @@ public:
(cond_var == OCV_REQUIRES_SERVICE ||
cond_var == OCV_CARGO_ACCEPTANCE ||
cond_var == OCV_CARGO_WAITING ||
cond_var == OCV_SLOT_OCCUPANCY) ? 0x3F : 0xC0, 0, DDSF_LOST_FOCUS);
cond_var == OCV_SLOT_OCCUPANCY ||
cond_var == OCV_TRAIN_IN_SLOT) ? 0x3F : 0xC0, 0, DDSF_LOST_FOCUS);
break;
}