Conditional orders: Add slot acquire modes to train in slot conditional

This commit is contained in:
Jonathan G Rennison
2020-05-10 21:06:09 +01:00
parent 0dd9562ead
commit 0202211514
6 changed files with 69 additions and 18 deletions

View File

@@ -663,8 +663,8 @@ static const StringID _order_conditional_condition_is_fully_occupied[] = {
};
static const StringID _order_conditional_condition_is_in_slot[] = {
STR_NULL,
STR_NULL,
STR_ORDER_CONDITIONAL_COMPARATOR_TRAIN_IN_ACQUIRE_SLOT,
STR_ORDER_CONDITIONAL_COMPARATOR_TRAIN_NOT_IN_ACQUIRE_SLOT,
STR_NULL,
STR_NULL,
STR_NULL,
@@ -878,7 +878,22 @@ void DrawOrderString(const Vehicle *v, const Order *order, int order_index, int
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);
switch (order->GetConditionComparator()) {
case OCC_IS_TRUE:
SetDParam(2, STR_ORDER_CONDITIONAL_COMPARATOR_TRAIN_IN_SLOT);
break;
case OCC_IS_FALSE:
SetDParam(2, STR_ORDER_CONDITIONAL_COMPARATOR_TRAIN_NOT_IN_SLOT);
break;
case OCC_EQUALS:
SetDParam(2, STR_ORDER_CONDITIONAL_COMPARATOR_TRAIN_IN_ACQUIRE_SLOT);
break;
case OCC_NOT_EQUALS:
SetDParam(2, STR_ORDER_CONDITIONAL_COMPARATOR_TRAIN_NOT_IN_ACQUIRE_SLOT);
break;
default:
NOT_REACHED();
}
} else if (ocv == OCV_CARGO_LOAD_PERCENTAGE) {
SetDParam(0, STR_ORDER_CONDITIONAL_LOAD_PERCENTAGE_DISPLAY);
SetDParam(2, CargoSpec::Get(order->GetConditionValue())->name);
@@ -2218,13 +2233,24 @@ public:
case WID_O_COND_COMPARATOR: {
const Order *o = this->vehicle->GetOrder(this->OrderGetSel());
OrderConditionVariable cond_var = o->GetConditionVariable();
ShowDropDownMenu(this, GetComparatorStrings(o), o->GetConditionComparator(), WID_O_COND_COMPARATOR, 0,
(cond_var == OCV_REQUIRES_SERVICE ||
cond_var == OCV_CARGO_ACCEPTANCE ||
cond_var == OCV_CARGO_WAITING ||
cond_var == OCV_SLOT_OCCUPANCY ||
cond_var == OCV_TRAIN_IN_SLOT) ? 0x3F : 0xC0, 0, DDSF_LOST_FOCUS);
uint mask;
switch (o->GetConditionVariable()) {
case OCV_REQUIRES_SERVICE:
case OCV_CARGO_ACCEPTANCE:
case OCV_CARGO_WAITING:
case OCV_SLOT_OCCUPANCY:
mask = 0x3F;
break;
case OCV_TRAIN_IN_SLOT:
mask = 0x3C;
break;
default:
mask = 0xC0;
break;
}
ShowDropDownMenu(this, GetComparatorStrings(o), o->GetConditionComparator(), WID_O_COND_COMPARATOR, 0, mask, 0, DDSF_LOST_FOCUS);
break;
}