# HG changeset patch # User rubidium # Date 2008-04-12 13:07:25 # Node ID 9c0d5a75fa24d1fd9dc1d2aac7329770822f6614 # Parent ec9b5ae2baa13912e9c0ef48d57e8eac3fc64175 (svn r12670) -Add: unconditional/always order 'jump/skip' variable. diff --git a/src/lang/english.txt b/src/lang/english.txt --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -2709,6 +2709,7 @@ STR_ORDER_CONDITIONAL_RELIABILITY 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_MORE_EQ 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} diff --git a/src/order_cmd.cpp b/src/order_cmd.cpp --- a/src/order_cmd.cpp +++ b/src/order_cmd.cpp @@ -896,6 +896,8 @@ CommandCost CmdModifyOrder(TileIndex til 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 @@ CommandCost CmdModifyOrder(TileIndex til 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 @@ CommandCost CmdModifyOrder(TileIndex til 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 @@ bool ProcessOrders(Vehicle *v) 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); diff --git a/src/order_gui.cpp b/src/order_gui.cpp --- a/src/order_gui.cpp +++ b/src/order_gui.cpp @@ -191,6 +191,7 @@ static const StringID _order_conditional 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 @@ static void DrawOrdersWindow(Window *w) 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 @@ static void DrawOrdersWindow(Window *w) 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(); } diff --git a/src/order_type.h b/src/order_type.h --- a/src/order_type.h +++ b/src/order_type.h @@ -95,6 +95,7 @@ enum OrderConditionVariable { 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 }; diff --git a/src/timetable_gui.cpp b/src/timetable_gui.cpp --- a/src/timetable_gui.cpp +++ b/src/timetable_gui.cpp @@ -179,18 +179,22 @@ static void DrawTimetableWindow(Window * 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; }