changeset 8903:d15e125c0b6a draft

(svn r12670) -Add: unconditional/always order 'jump/skip' variable.
author rubidium <rubidium@openttd.org>
date Sat, 12 Apr 2008 13:07:25 +0000
parents 4b63a1a768fe
children 9ef342ceedb7
files src/lang/english.txt src/order_cmd.cpp src/order_gui.cpp src/order_type.h src/timetable_gui.cpp
diffstat 5 files changed, 43 insertions(+), 20 deletions(-) [+]
line wrap: on
line diff
--- a/src/lang/english.txt
+++ b/src/lang/english.txt
@@ -2709,6 +2709,7 @@
 STR_ORDER_CONDITIONAL_MAX_SPEED                                 :Maximum speed
 STR_ORDER_CONDITIONAL_AGE                                       :Vehicle age (years)
 STR_ORDER_CONDITIONAL_REQUIRES_SERVICE                          :Requires service
+STR_ORDER_CONDITIONAL_UNCONDITIONALLY                           :Always
 STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS                         :is equal to
 STR_ORDER_CONDITIONAL_COMPARATOR_NOT_EQUALS                     :is not equal to
 STR_ORDER_CONDITIONAL_COMPARATOR_LESS_THAN                      :is less than
@@ -2718,6 +2719,7 @@
 STR_ORDER_CONDITIONAL_COMPARATOR_IS_TRUE                        :is true
 STR_ORDER_CONDITIONAL_COMPARATOR_IS_FALSE                       :is false
 STR_CONDITIONAL_VALUE                                           :{SKIP}{BLACK}{COMMA}
+STR_CONDITIONAL_UNCONDITIONAL                                   :Jump to order {COMMA}
 STR_CONDITIONAL_NUM                                             :Jump to order {COMMA} when {STRING} {STRING} {COMMA}
 STR_CONDITIONAL_TRUE_FALSE                                      :Jump to order {COMMA} when {STRING} {STRING}
 
--- a/src/order_cmd.cpp
+++ b/src/order_cmd.cpp
@@ -896,6 +896,8 @@
 		case MOF_COND_COMPARATOR:
 			if (data >= OCC_END) return CMD_ERROR;
 			switch (order->GetConditionVariable()) {
+				case OCV_UNCONDITIONALLY: return CMD_ERROR;
+
 				case OCV_REQUIRES_SERVICE:
 					if (data != OCC_IS_TRUE && data != OCC_IS_FALSE) return CMD_ERROR;
 					break;
@@ -908,6 +910,8 @@
 
 		case MOF_COND_VALUE:
 			switch (order->GetConditionVariable()) {
+				case OCV_UNCONDITIONALLY: return CMD_ERROR;
+
 				case OCV_LOAD_PERCENTAGE:
 				case OCV_RELIABILITY:
 					if (data > 100) return CMD_ERROR;
@@ -950,6 +954,11 @@
 
 				OrderConditionComparator occ = order->GetConditionComparator();
 				switch (order->GetConditionVariable()) {
+					case OCV_UNCONDITIONALLY:
+						order->SetConditionComparator(OCC_EQUALS);
+						order->SetConditionValue(0);
+						break;
+
 					case OCV_REQUIRES_SERVICE:
 						if (occ != OCC_IS_TRUE && occ != OCC_IS_FALSE) order->SetConditionComparator(OCC_IS_TRUE);
 						break;
@@ -1706,6 +1715,7 @@
 				case OCV_MAX_SPEED:        skip_order = OrderConditionCompare(occ, v->GetDisplayMaxSpeed(),           value); break;
 				case OCV_AGE:              skip_order = OrderConditionCompare(occ, v->age / 366,                      value); break;
 				case OCV_REQUIRES_SERVICE: skip_order = OrderConditionCompare(occ, v->NeedsServicing(),               value); break;
+				case OCV_UNCONDITIONALLY:  skip_order = true; break;
 				default: NOT_REACHED();
 			}
 			UpdateVehicleTimetable(v, true);
--- a/src/order_gui.cpp
+++ b/src/order_gui.cpp
@@ -191,6 +191,7 @@
 	STR_ORDER_CONDITIONAL_MAX_SPEED,
 	STR_ORDER_CONDITIONAL_AGE,
 	STR_ORDER_CONDITIONAL_REQUIRES_SERVICE,
+	STR_ORDER_CONDITIONAL_UNCONDITIONALLY,
 	INVALID_STRING_ID,
 };
 
@@ -285,7 +286,8 @@
 				w->ShowWidget(ORDER_WIDGET_COND_VALUE);
 
 				OrderConditionVariable ocv = order->GetConditionVariable();
-				w->SetWidgetDisabledState(ORDER_WIDGET_COND_VALUE, ocv == OCV_REQUIRES_SERVICE);
+				w->SetWidgetDisabledState(ORDER_WIDGET_COND_COMPARATOR, ocv == OCV_UNCONDITIONALLY);
+				w->SetWidgetDisabledState(ORDER_WIDGET_COND_VALUE, ocv == OCV_REQUIRES_SERVICE || ocv == OCV_UNCONDITIONALLY);
 
 				uint value = order->GetConditionValue();
 				if (order->GetConditionVariable() == OCV_MAX_SPEED) value = ConvertSpeedToDisplaySpeed(value);
@@ -372,17 +374,21 @@
 					SetDParam(2, order->GetDestination());
 					break;
 
-				case OT_CONDITIONAL: {
-					OrderConditionComparator occ = order->GetConditionComparator();
-					SetDParam(1, (occ == OCC_IS_TRUE || occ == OCC_IS_FALSE) ? STR_CONDITIONAL_TRUE_FALSE : STR_CONDITIONAL_NUM);
+				case OT_CONDITIONAL:
 					SetDParam(2, order->GetConditionSkipToOrder() + 1);
-					SetDParam(3, STR_ORDER_CONDITIONAL_LOAD_PERCENTAGE + order->GetConditionVariable());
-					SetDParam(4, STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS + occ);
+					if (order->GetConditionVariable() == OCV_UNCONDITIONALLY) {
+						SetDParam(1, STR_CONDITIONAL_UNCONDITIONAL);
+					} else {
+						OrderConditionComparator occ = order->GetConditionComparator();
+						SetDParam(1, (occ == OCC_IS_TRUE || occ == OCC_IS_FALSE) ? STR_CONDITIONAL_TRUE_FALSE : STR_CONDITIONAL_NUM);
+						SetDParam(3, STR_ORDER_CONDITIONAL_LOAD_PERCENTAGE + order->GetConditionVariable());
+						SetDParam(4, STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS + occ);
 
-					uint value = order->GetConditionValue();
-					if (order->GetConditionVariable() == OCV_MAX_SPEED) value = ConvertSpeedToDisplaySpeed(value);
-					SetDParam(5, value);
-				} break;
+						uint value = order->GetConditionValue();
+						if (order->GetConditionVariable() == OCV_MAX_SPEED) value = ConvertSpeedToDisplaySpeed(value);
+						SetDParam(5, value);
+					}
+					break;
 
 				default: NOT_REACHED();
 			}
--- a/src/order_type.h
+++ b/src/order_type.h
@@ -95,6 +95,7 @@
 	OCV_MAX_SPEED,        ///< Skip based on the maximum speed
 	OCV_AGE,              ///< Skip based on the age
 	OCV_REQUIRES_SERVICE, ///< Skip when the vehicle requires service
+	OCV_UNCONDITIONALLY,  ///< Always skip
 	OCV_END
 };
 
--- a/src/timetable_gui.cpp
+++ b/src/timetable_gui.cpp
@@ -179,18 +179,22 @@
 					break;
 
 
-				case OT_CONDITIONAL: {
-					extern uint ConvertSpeedToDisplaySpeed(uint speed);
-					OrderConditionComparator occ = order->GetConditionComparator();
-					SetDParam(0, (occ == OCC_IS_TRUE || occ == OCC_IS_FALSE) ? STR_CONDITIONAL_TRUE_FALSE : STR_CONDITIONAL_NUM);
+				case OT_CONDITIONAL:
 					SetDParam(1, order->GetConditionSkipToOrder() + 1);
-					SetDParam(2, STR_ORDER_CONDITIONAL_LOAD_PERCENTAGE + order->GetConditionVariable());
-					SetDParam(3, STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS + occ);
+					if (order->GetConditionVariable() == OCV_UNCONDITIONALLY) {
+						SetDParam(0, STR_CONDITIONAL_UNCONDITIONAL);
+					} else {
+						extern uint ConvertSpeedToDisplaySpeed(uint speed);
+						OrderConditionComparator occ = order->GetConditionComparator();
+						SetDParam(0, (occ == OCC_IS_TRUE || occ == OCC_IS_FALSE) ? STR_CONDITIONAL_TRUE_FALSE : STR_CONDITIONAL_NUM);
+						SetDParam(2, STR_ORDER_CONDITIONAL_LOAD_PERCENTAGE + order->GetConditionVariable());
+						SetDParam(3, STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS + occ);
 
-					uint value = order->GetConditionValue();
-					if (order->GetConditionVariable() == OCV_MAX_SPEED) value = ConvertSpeedToDisplaySpeed(value);
-					SetDParam(4, value);
-				} break;
+						uint value = order->GetConditionValue();
+						if (order->GetConditionVariable() == OCV_MAX_SPEED) value = ConvertSpeedToDisplaySpeed(value);
+						SetDParam(4, value);
+					}
+					break;
 
 				default: break;
 			}