(svn r13704) -Fix: make timetables work more sensible when used in conjunction with conditional orders, i.e. make it possibly to tell how long to travel to the next destination if you jump.
This commit is contained in:
@@ -84,20 +84,19 @@ struct TimetableWindow : Window {
|
||||
SetVScrollCount(this, v->num_orders * 2);
|
||||
|
||||
if (v->owner == _local_player) {
|
||||
if (selected == -1) {
|
||||
this->DisableWidget(TTV_CHANGE_TIME);
|
||||
this->DisableWidget(TTV_CLEAR_TIME);
|
||||
} else if (selected % 2 == 1) {
|
||||
this->EnableWidget(TTV_CHANGE_TIME);
|
||||
this->EnableWidget(TTV_CLEAR_TIME);
|
||||
} else {
|
||||
bool disable = true;
|
||||
if (selected != -1) {
|
||||
const Order *order = GetVehicleOrder(v, (selected + 1) / 2);
|
||||
bool disable = order == NULL || !order->IsType(OT_GOTO_STATION) || (order->GetNonStopType() & ONSF_NO_STOP_AT_DESTINATION_STATION);
|
||||
|
||||
this->SetWidgetDisabledState(TTV_CHANGE_TIME, disable);
|
||||
this->SetWidgetDisabledState(TTV_CLEAR_TIME, disable);
|
||||
if (selected % 2 == 1) {
|
||||
disable = order != NULL && order->IsType(OT_CONDITIONAL);
|
||||
} else {
|
||||
disable = order == NULL || ((!order->IsType(OT_GOTO_STATION) || (order->GetNonStopType() & ONSF_NO_STOP_AT_DESTINATION_STATION)) && !order->IsType(OT_CONDITIONAL));
|
||||
}
|
||||
}
|
||||
|
||||
this->SetWidgetDisabledState(TTV_CHANGE_TIME, disable);
|
||||
this->SetWidgetDisabledState(TTV_CLEAR_TIME, disable);
|
||||
|
||||
this->EnableWidget(TTV_RESET_LATENESS);
|
||||
this->EnableWidget(TTV_AUTOFILL);
|
||||
} else {
|
||||
@@ -137,7 +136,9 @@ struct TimetableWindow : Window {
|
||||
} else {
|
||||
StringID string;
|
||||
|
||||
if (order->travel_time == 0) {
|
||||
if (order->IsType(OT_CONDITIONAL)) {
|
||||
string = STR_TIMETABLE_NO_TRAVEL;
|
||||
} else if (order->travel_time == 0) {
|
||||
string = STR_TIMETABLE_TRAVEL_NOT_TIMETABLED;
|
||||
} else {
|
||||
SetTimetableParams(0, 1, order->travel_time);
|
||||
@@ -161,7 +162,7 @@ struct TimetableWindow : Window {
|
||||
|
||||
for (const Order *order = GetVehicleOrder(v, 0); order != NULL; order = order->next) {
|
||||
total_time += order->travel_time + order->wait_time;
|
||||
if (order->travel_time == 0) complete = false;
|
||||
if (order->travel_time == 0 && !order->IsType(OT_CONDITIONAL)) complete = false;
|
||||
if (order->wait_time == 0 && order->IsType(OT_GOTO_STATION) && !(order->GetNonStopType() & ONSF_NO_STOP_AT_DESTINATION_STATION)) complete = false;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user