Changeset - r9641:a78fbf5c85cc
[Not reviewed]
master
0 5 0
rubidium - 16 years ago 2008-07-14 21:01:49
rubidium@openttd.org
(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.
5 files changed with 32 insertions and 16 deletions:
0 comments (0 inline, 0 general)
src/lang/english.txt
Show inline comments
 
@@ -2738,9 +2738,11 @@ STR_CONDITIONAL_UNCONDITIONAL           
 
STR_CONDITIONAL_NUM                                             :Jump to order {COMMA} when {STRING} {STRING} {COMMA}
 
STR_CONDITIONAL_TRUE_FALSE                                      :Jump to order {COMMA} when {STRING} {STRING}
 

	
 
STR_TIMETABLE_NO_TRAVEL                                         :{SETX 30}No travel
 
STR_TIMETABLE_TRAVEL_NOT_TIMETABLED                             :{SETX 30}Travel (not timetabled)
 
STR_TIMETABLE_TRAVEL_FOR                                        :{SETX 30}Travel for {STRING1}
 
STR_TIMETABLE_STAY_FOR                                          :and stay for {STRING1}
 
STR_TIMETABLE_AND_TRAVEL_FOR                                    :and travel for {STRING1}
 
STR_TIMETABLE_DAYS                                              :{COMMA} day{P "" s}
 
STR_TIMETABLE_TICKS                                             :{COMMA} tick{P "" s}
 

	
src/order_cmd.cpp
Show inline comments
 
@@ -1694,10 +1694,12 @@ static bool UpdateOrderDest(Vehicle *v, 
 

	
 
		case OT_CONDITIONAL: {
 
			VehicleOrderID next_order = ProcessConditionalOrder(order, v);
 
			UpdateVehicleTimetable(v, true);
 
			if (next_order != INVALID_VEH_ORDER_ID) {
 
				UpdateVehicleTimetable(v, false);
 
				v->cur_order_index = next_order;
 
				v->current_order_time += GetVehicleOrder(v, next_order)->travel_time;
 
			} else {
 
				UpdateVehicleTimetable(v, true);
 
				v->cur_order_index++;
 
			}
 

	
src/order_gui.cpp
Show inline comments
 
@@ -251,6 +251,13 @@ void DrawOrderString(const Vehicle *v, c
 
				if (order->GetConditionVariable() == OCV_MAX_SPEED) value = ConvertSpeedToDisplaySpeed(value);
 
				SetDParam(5, value);
 
			}
 

	
 
			if (timetable && order->wait_time > 0) {
 
				SetDParam(6, STR_TIMETABLE_AND_TRAVEL_FOR);
 
				SetTimetableParams(7, 8, order->wait_time);
 
			} else {
 
				SetDParam(6, STR_EMPTY);
 
			}
 
			break;
 

	
 
		default: NOT_REACHED();
src/timetable_cmd.cpp
Show inline comments
 
@@ -69,8 +69,10 @@ CommandCost CmdChangeTimetable(TileIndex
 
	bool packed_time = HasBit(p1, 25);
 
	bool is_journey = HasBit(p1, 24) || packed_time;
 
	if (!is_journey) {
 
		if (!order->IsType(OT_GOTO_STATION)) return_cmd_error(STR_TIMETABLE_ONLY_WAIT_AT_STATIONS);
 
		if (!order->IsType(OT_GOTO_STATION) && !order->IsType(OT_CONDITIONAL)) return_cmd_error(STR_TIMETABLE_ONLY_WAIT_AT_STATIONS);
 
		if (order->GetNonStopType() & ONSF_NO_STOP_AT_DESTINATION_STATION) return_cmd_error(STR_TIMETABLE_NOT_STOPPING_HERE);
 
	} else {
 
		if (order->IsType(OT_CONDITIONAL)) return CMD_ERROR;
 
	}
 

	
 
	if (flags & DC_EXEC) {
 
@@ -175,7 +177,9 @@ void UpdateVehicleTimetable(Vehicle *v, 
 
			 * adjusted later by people who aren't. */
 
			time_taken = (((time_taken - 1) / DAY_TICKS) + 1) * DAY_TICKS;
 

	
 
			ChangeTimetable(v, v->cur_order_index, time_taken, travelling);
 
			if (!v->current_order.IsType(OT_CONDITIONAL)) {
 
				ChangeTimetable(v, v->cur_order_index, time_taken, travelling);
 
			}
 
			return;
 
		} else if (v->cur_order_index == 0) {
 
			/* Otherwise if we're at the beginning and it already has a value,
src/timetable_gui.cpp
Show inline comments
 
@@ -84,19 +84,18 @@ 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);
 
				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->SetWidgetDisabledState(TTV_CHANGE_TIME, disable);
 
			this->SetWidgetDisabledState(TTV_CLEAR_TIME, disable);
 

	
 
			this->EnableWidget(TTV_RESET_LATENESS);
 
			this->EnableWidget(TTV_AUTOFILL);
 
@@ -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;
 
			}
 

	
0 comments (0 inline, 0 general)