summaryrefslogtreecommitdiff
path: root/src/order_gui.cpp
diff options
context:
space:
mode:
authorrubidium <rubidium@openttd.org>2008-04-10 08:30:15 +0000
committerrubidium <rubidium@openttd.org>2008-04-10 08:30:15 +0000
commite61dcab79d9dc3eba0b24094ee108606c970eac2 (patch)
tree81b8383f4d20454c1546e1f654d36905a9980922 /src/order_gui.cpp
parent79cb5ec1c70e1661db721a9b5a1e21a375989a30 (diff)
downloadopenttd-e61dcab79d9dc3eba0b24094ee108606c970eac2.tar.xz
(svn r12648) -Feature: allow four different non-stop types in a single game instead of two. The "TTDP compatible order" setting now only sets the default behaviour of new trains.
-Feature: allow three different load type in a single game instead of two. One can choose full load all and full load any instead of full load being governed by the "full load any" patch setting.
Diffstat (limited to 'src/order_gui.cpp')
-rw-r--r--src/order_gui.cpp25
1 files changed, 16 insertions, 9 deletions
diff --git a/src/order_gui.cpp b/src/order_gui.cpp
index e3c1b7fcf..6b9fc3369 100644
--- a/src/order_gui.cpp
+++ b/src/order_gui.cpp
@@ -204,8 +204,7 @@ static void DrawOrdersWindow(Window *w)
SetDParam(1, STR_GO_TO_STATION);
SetDParam(2, STR_ORDER_GO_TO + (v->type == VEH_TRAIN ? order->GetNonStopType() : 0));
SetDParam(3, order->GetDestination());
- /* Yes, this is ugly, but... once the savegame bump is done, it'll look a lot better! */
- SetDParam(4, _station_load_types[unload & OUFB_TRANSFER][((load & 1) | (load >> 1)) + ((unload & ~(OUFB_NO_UNLOAD | OUFB_TRANSFER)) >> 1)]);
+ SetDParam(4, _station_load_types[unload >> 1][load | (unload & ~(OUFB_TRANSFER | OUFB_NO_UNLOAD))]);
} break;
case OT_GOTO_DEPOT: {
@@ -331,6 +330,7 @@ static Order GetOrderCmdFromTile(const Vehicle *v, TileIndex tile)
(facil = FACIL_TRUCK_STOP, 1);
if (st->facilities & facil) {
order.MakeGoToStation(st_index);
+ if (_patches.new_nonstop && v->type == VEH_TRAIN) order.SetNonStopType(ONSF_NO_STOP_AT_INTERMEDIATE_STATIONS);
return order;
}
}
@@ -408,9 +408,17 @@ static void OrderClick_FullLoad(Window *w, const Vehicle *v, int load_type)
VehicleOrderID sel_ord = OrderGetSel(w);
const Order *order = GetVehicleOrder(v, sel_ord);
- if (load_type > 0) load_type += 3;
- if (load_type >= 0 && (order->GetLoadType() & OLFB_FULL_LOAD) == (load_type & OLFB_FULL_LOAD)) return;
- DoCommandP(v->tile, v->index + (sel_ord << 16), MOF_LOAD | ((order->GetLoadType() & OLFB_FULL_LOAD) ^ OLFB_FULL_LOAD) << 2, NULL, CMD_MODIFY_ORDER | CMD_MSG(STR_8835_CAN_T_MODIFY_THIS_ORDER));
+ if (load_type >= 0 && order->GetLoadType() == load_type) return;
+
+ if (load_type < 0) {
+ switch (order->GetLoadType()) {
+ case OLF_LOAD_IF_POSSIBLE: load_type = OLFB_FULL_LOAD; break;
+ case OLFB_FULL_LOAD: load_type = OLF_FULL_LOAD_ANY; break;
+ case OLF_FULL_LOAD_ANY: load_type = OLF_LOAD_IF_POSSIBLE; break;
+ default: NOT_REACHED();
+ }
+ }
+ DoCommandP(v->tile, v->index + (sel_ord << 16), MOF_LOAD | (load_type << 2), NULL, CMD_MODIFY_ORDER | CMD_MSG(STR_8835_CAN_T_MODIFY_THIS_ORDER));
}
/**
@@ -451,7 +459,6 @@ static void OrderClick_Nonstop(Window *w, const Vehicle *v, int non_stop)
const Order *order = GetVehicleOrder(v, sel_ord);
if (order->GetNonStopType() == non_stop) return;
- if (_patches.new_nonstop && non_stop == ONSF_NO_STOP_AT_INTERMEDIATE_STATIONS) non_stop = ONSF_STOP_EVERYWHERE;
/* Keypress if negative, so 'toggle' to the next */
if (non_stop < 0) {
@@ -650,7 +657,7 @@ static void OrdersWndProc(Window *w, WindowEvent *e)
break;
case ORDER_WIDGET_NON_STOP:
- ShowDropDownMenu(w, _order_non_stop_drowdown, GetVehicleOrder(v, OrderGetSel(w))->GetNonStopType(), ORDER_WIDGET_NON_STOP, 0, _patches.new_nonstop ? 5 : 12, 124);
+ ShowDropDownMenu(w, _order_non_stop_drowdown, GetVehicleOrder(v, OrderGetSel(w))->GetNonStopType(), ORDER_WIDGET_NON_STOP, 0, 0, 124);
break;
case ORDER_WIDGET_GOTO:
@@ -658,7 +665,7 @@ static void OrdersWndProc(Window *w, WindowEvent *e)
break;
case ORDER_WIDGET_FULL_LOAD:
- ShowDropDownMenu(w, _order_full_load_drowdown, GetVehicleOrder(v, OrderGetSel(w))->GetLoadType() << 2, ORDER_WIDGET_FULL_LOAD, 0, _patches.full_load_any ? 2 : 4, 124);
+ ShowDropDownMenu(w, _order_full_load_drowdown, GetVehicleOrder(v, OrderGetSel(w))->GetLoadType() << 2, ORDER_WIDGET_FULL_LOAD, 0, 0, 124);
break;
case ORDER_WIDGET_UNLOAD:
@@ -694,7 +701,7 @@ static void OrdersWndProc(Window *w, WindowEvent *e)
break;
case ORDER_WIDGET_FULL_LOAD:
- OrderClick_FullLoad(w, v, e->we.dropdown.index);
+ OrderClick_FullLoad(w, v, e->we.dropdown.index == 0 ? 0 : e->we.dropdown.index + 1);
break;
}
break;