Scheduled dispatch: Do not allow enabling if unbunching is present
Check for auto-separation/unbunching in enable command Show in enable button tooltip and summary text
This commit is contained in:
@@ -2056,7 +2056,7 @@ STR_TMPL_CANT_RENAME :{WHITE}Can't re
|
||||
# Scheduled Dispatch
|
||||
STR_SCHDISPATCH_CAPTION :{WHITE}{VEHICLE} (Scheduled Dispatch)
|
||||
STR_SCHDISPATCH_ENABLED :{BLACK}Enable
|
||||
STR_SCHDISPATCH_ENABLED_TOOLTIP :{BLACK}Enable scheduled dispatching for this order. Requires automatic separation to be off.
|
||||
STR_SCHDISPATCH_ENABLED_TOOLTIP :{BLACK}Enable scheduled dispatching for this order.
|
||||
STR_SCHDISPATCH_ADD :{BLACK}Add Slot
|
||||
STR_SCHDISPATCH_ADD_TOOLTIP :{BLACK}Add new departure slot for this schedule.
|
||||
STR_SCHDISPATCH_ADD_TOOLTIP_EXTRA :{BLACK}{STRING} Ctrl+Click to add multiple departure slots at once.
|
||||
@@ -2157,6 +2157,13 @@ STR_SCHDISPATCH_QUERY_REMOVE_SCHEDULE_TEXT :{WHITE}Are you
|
||||
STR_ERROR_SCHDISPATCH_TRIED_TO_ADD_TOO_MANY_SLOTS :{WHITE}Tried to add too many departure slots at once
|
||||
STR_ERROR_SCHDISPATCH_ADJUSTMENT_TOO_LARGE :{WHITE}Departure slot adjustment is too large
|
||||
|
||||
STR_TOOLTIP_SEPARATION_CANNOT_ENABLE :{STRING}{}{}{STRING}
|
||||
STR_ERROR_SEPARATION_MUTUALLY_EXCLUSIVE :{WHITE}Only one of scheduled dispatch, automatic separation and depot unbunching can be enabled at a time
|
||||
|
||||
STR_CANNOT_ENABLE_BECAUSE_UNBUNCHING :Cannot enable because a depot unbunching order is present
|
||||
STR_CANNOT_ENABLE_BECAUSE_SCHED_DISPATCH :Cannot enable because scheduled dispatch is enabled
|
||||
STR_CANNOT_ENABLE_BECAUSE_AUTO_SEPARATION :Cannot enable because automatic separation is enabled
|
||||
|
||||
# Modifier key toggle window
|
||||
STR_MODIFIER_KEY_TOGGLE_CAPTION :{WHITE}Modifier keys
|
||||
STR_SHIFT_KEY_NAME :{BLACK}Shift
|
||||
|
@@ -47,6 +47,8 @@ CommandCost CmdScheduledDispatch(TileIndex tile, DoCommandFlag flags, uint32_t p
|
||||
CommandCost ret = CheckOwnership(v->owner);
|
||||
if (ret.Failed()) return ret;
|
||||
|
||||
if (HasBit(p2, 0) && (HasBit(v->vehicle_flags, VF_TIMETABLE_SEPARATION) || v->HasUnbunchingOrder())) return CommandCost(STR_ERROR_SEPARATION_MUTUALLY_EXCLUSIVE);
|
||||
|
||||
if (flags & DC_EXEC) {
|
||||
for (Vehicle *v2 = v->FirstShared(); v2 != nullptr; v2 = v2->NextShared()) {
|
||||
if (HasBit(p2, 0)) {
|
||||
|
@@ -351,7 +351,7 @@ struct SchdispatchWindow : GeneralVehicleWindow {
|
||||
|
||||
bool unusable = (v->owner != _local_company) || (v->orders == nullptr);
|
||||
|
||||
this->SetWidgetDisabledState(WID_SCHDISPATCH_ENABLED, unusable || HasBit(v->vehicle_flags, VF_TIMETABLE_SEPARATION));
|
||||
this->SetWidgetDisabledState(WID_SCHDISPATCH_ENABLED, unusable || HasBit(v->vehicle_flags, VF_TIMETABLE_SEPARATION) || v->HasUnbunchingOrder());
|
||||
|
||||
this->SetWidgetDisabledState(WID_SCHDISPATCH_RENAME, unusable || v->orders->GetScheduledDispatchScheduleCount() == 0);
|
||||
this->SetWidgetDisabledState(WID_SCHDISPATCH_PREV, v->orders == nullptr || this->schedule_index <= 0);
|
||||
@@ -421,6 +421,21 @@ struct SchdispatchWindow : GeneralVehicleWindow {
|
||||
virtual bool OnTooltip(Point pt, WidgetID widget, TooltipCloseCondition close_cond) override
|
||||
{
|
||||
switch (widget) {
|
||||
case WID_SCHDISPATCH_ENABLED: {
|
||||
if (HasBit(this->vehicle->vehicle_flags, VF_TIMETABLE_SEPARATION)) {
|
||||
SetDParam(0, STR_SCHDISPATCH_ENABLED_TOOLTIP);
|
||||
SetDParam(1, STR_CANNOT_ENABLE_BECAUSE_AUTO_SEPARATION);
|
||||
GuiShowTooltips(this, STR_TOOLTIP_SEPARATION_CANNOT_ENABLE, close_cond, 2);
|
||||
} else if (this->vehicle->HasUnbunchingOrder()) {
|
||||
SetDParam(0, STR_SCHDISPATCH_ENABLED_TOOLTIP);
|
||||
SetDParam(1, STR_CANNOT_ENABLE_BECAUSE_UNBUNCHING);
|
||||
GuiShowTooltips(this, STR_TOOLTIP_SEPARATION_CANNOT_ENABLE, close_cond, 2);
|
||||
} else {
|
||||
GuiShowTooltips(this, STR_SCHDISPATCH_ENABLED_TOOLTIP, close_cond);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
case WID_SCHDISPATCH_ADD: {
|
||||
if (_settings_time.time_in_minutes) {
|
||||
SetDParam(0, STR_SCHDISPATCH_ADD_TOOLTIP);
|
||||
@@ -644,16 +659,7 @@ struct SchdispatchWindow : GeneralVehicleWindow {
|
||||
if (time < this->next_departure_update) const_cast<SchdispatchWindow*>(this)->next_departure_update = time;
|
||||
};
|
||||
|
||||
if (!HasBit(v->vehicle_flags, VF_SCHEDULED_DISPATCH) || !this->IsScheduleSelected()) {
|
||||
y += GetCharacterHeight(FS_NORMAL);
|
||||
DrawString(ir.left, ir.right, y, STR_SCHDISPATCH_SUMMARY_NOT_ENABLED);
|
||||
} else {
|
||||
const DispatchSchedule &ds = this->GetSelectedSchedule();
|
||||
|
||||
uint warnings = 0;
|
||||
uint extra_lines = 0;
|
||||
|
||||
auto draw_warning = [&](StringID text) {
|
||||
auto draw_warning_generic = [&](StringID text, TextColour colour) {
|
||||
const Dimension warning_dimensions = GetSpriteSize(SPR_WARNING_SIGN);
|
||||
int step_height = std::max<int>(warning_dimensions.height, GetCharacterHeight(FS_NORMAL));
|
||||
int left = ir.left;
|
||||
@@ -665,8 +671,28 @@ struct SchdispatchWindow : GeneralVehicleWindow {
|
||||
} else {
|
||||
left += (warning_dimensions.width + 10);
|
||||
}
|
||||
DrawString(left, right, y + (step_height - GetCharacterHeight(FS_NORMAL)) / 2, text);
|
||||
DrawString(left, right, y + (step_height - GetCharacterHeight(FS_NORMAL)) / 2, text, colour);
|
||||
y += step_height;
|
||||
};
|
||||
|
||||
if (!HasBit(v->vehicle_flags, VF_SCHEDULED_DISPATCH) || !this->IsScheduleSelected()) {
|
||||
y += GetCharacterHeight(FS_NORMAL);
|
||||
DrawString(ir.left, ir.right, y, STR_SCHDISPATCH_SUMMARY_NOT_ENABLED);
|
||||
y += GetCharacterHeight(FS_NORMAL) * 2;
|
||||
|
||||
if (HasBit(v->vehicle_flags, VF_TIMETABLE_SEPARATION)) {
|
||||
draw_warning_generic(STR_CANNOT_ENABLE_BECAUSE_AUTO_SEPARATION, TC_BLACK);
|
||||
} else if (v->HasUnbunchingOrder()) {
|
||||
draw_warning_generic(STR_CANNOT_ENABLE_BECAUSE_UNBUNCHING, TC_BLACK);
|
||||
}
|
||||
} else {
|
||||
const DispatchSchedule &ds = this->GetSelectedSchedule();
|
||||
|
||||
uint warnings = 0;
|
||||
uint extra_lines = 0;
|
||||
|
||||
auto draw_warning = [&](StringID text) {
|
||||
draw_warning_generic(text, TC_FROMSTRING);
|
||||
warnings++;
|
||||
};
|
||||
|
||||
@@ -1310,7 +1336,7 @@ static constexpr NWidgetPart _nested_schdispatch_widgets[] = {
|
||||
EndContainer(),
|
||||
NWidget(WWT_PANEL, COLOUR_GREY),
|
||||
NWidget(NWID_HORIZONTAL, NC_EQUALSIZE),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCHDISPATCH_ENABLED), SetDataTip(STR_SCHDISPATCH_ENABLED, STR_SCHDISPATCH_ENABLED_TOOLTIP), SetFill(1, 1), SetResize(1, 0),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCHDISPATCH_ENABLED), SetDataTip(STR_SCHDISPATCH_ENABLED, STR_NULL), SetFill(1, 1), SetResize(1, 0),
|
||||
NWidget(WWT_TEXT, COLOUR_GREY, WID_SCHDISPATCH_HEADER), SetAlignment(SA_CENTER), SetDataTip(STR_JUST_STRING3, STR_NULL), SetFill(1, 1), SetResize(1, 0),
|
||||
NWidget(NWID_HORIZONTAL, NC_EQUALSIZE),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCHDISPATCH_PREV), SetDataTip(STR_SCHDISPATCH_PREV_SCHEDULE, STR_SCHDISPATCH_PREV_SCHEDULE_TOOLTIP), SetFill(1, 1), SetResize(1, 0),
|
||||
|
Reference in New Issue
Block a user