(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:
rubidium
2008-07-14 21:01:49 +00:00
parent 797ccc8b49
commit 0f4d9a8e49
5 changed files with 32 additions and 16 deletions

View File

@@ -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;
}