src/order_gui.cpp
branchnoai
changeset 9869 6404afe43575
parent 9837 c9ec4f82e0d0
child 10142 56ee7da4ad56
--- a/src/order_gui.cpp	Sun Apr 06 14:12:19 2008 +0000
+++ b/src/order_gui.cpp	Sun Apr 06 23:07:42 2008 +0000
@@ -91,22 +91,22 @@
 	return (sel <= v->num_orders && sel >= 0) ? sel : INVALID_ORDER;
 }
 
-static StringID StationOrderStrings[] = {
-	STR_8806_GO_TO,
-	STR_GO_TO_TRANSFER,
-	STR_8807_GO_TO_UNLOAD,
-	STR_GO_TO_TRANSFER_UNLOAD,
-	STR_8808_GO_TO_LOAD,
-	STR_GO_TO_TRANSFER_LOAD,
-	STR_NULL,
-	STR_NULL,
-	STR_880A_GO_NON_STOP_TO,
-	STR_GO_TO_NON_STOP_TRANSFER,
-	STR_880B_GO_NON_STOP_TO_UNLOAD,
-	STR_GO_TO_NON_STOP_TRANSFER_UNLOAD,
-	STR_880C_GO_NON_STOP_TO_LOAD,
-	STR_GO_TO_NON_STOP_TRANSFER_LOAD,
-	STR_NULL
+static StringID _station_order_strings[][7] = {
+	{
+		STR_8806_GO_TO,
+		STR_GO_TO_TRANSFER,
+		STR_8807_GO_TO_UNLOAD,
+		STR_GO_TO_TRANSFER_UNLOAD,
+		STR_8808_GO_TO_LOAD,
+		STR_GO_TO_TRANSFER_LOAD
+	}, {
+		STR_880A_GO_NON_STOP_TO,
+		STR_GO_TO_NON_STOP_TRANSFER,
+		STR_880B_GO_NON_STOP_TO_UNLOAD,
+		STR_GO_TO_NON_STOP_TRANSFER_UNLOAD,
+		STR_880C_GO_NON_STOP_TO_LOAD,
+		STR_GO_TO_NON_STOP_TRANSFER_LOAD
+	}
 };
 
 static void DrawOrdersWindow(Window *w)
@@ -153,9 +153,9 @@
 	w->ShowWidget(ORDER_WIDGET_UNLOAD); // Unload
 
 	if (order != NULL) {
-		switch (order->type) {
+		switch (order->GetType()) {
 			case OT_GOTO_STATION:
-				if (!GetStation(order->dest)->IsBuoy()) break;
+				if (!GetStation(order->GetDestination())->IsBuoy()) break;
 				/* Fall-through */
 
 			case OT_GOTO_WAYPOINT:
@@ -194,15 +194,15 @@
 		if (i - w->vscroll.pos < w->vscroll.cap) {
 			SetDParam(1, 6);
 
-			switch (order->type) {
+			switch (order->GetType()) {
 				case OT_DUMMY:
 					SetDParam(1, STR_INVALID_ORDER);
-					SetDParam(2, order->dest);
+					SetDParam(2, order->GetDestination());
 					break;
 
 				case OT_GOTO_STATION:
-					SetDParam(1, StationOrderStrings[order->flags]);
-					SetDParam(2, order->dest);
+					SetDParam(1, _station_order_strings[!!order->GetNonStopType()][order->GetLoadType() | order->GetUnloadType()]);
+					SetDParam(2, order->GetDestination());
 					break;
 
 				case OT_GOTO_DEPOT: {
@@ -210,24 +210,24 @@
 
 					if (v->type == VEH_AIRCRAFT) {
 						s = STR_GO_TO_AIRPORT_HANGAR;
-						SetDParam(2, order->dest);
+						SetDParam(2, order->GetDestination());
 					} else {
-						SetDParam(2, GetDepot(order->dest)->town_index);
+						SetDParam(2, GetDepot(order->GetDestination())->town_index);
 
 						switch (v->type) {
-							case VEH_TRAIN: s = (order->flags & OFB_NON_STOP) ? STR_880F_GO_NON_STOP_TO_TRAIN_DEPOT : STR_GO_TO_TRAIN_DEPOT; break;
+							case VEH_TRAIN: s = (order->GetNonStopType() & OFB_NON_STOP) ? STR_880F_GO_NON_STOP_TO_TRAIN_DEPOT : STR_GO_TO_TRAIN_DEPOT; break;
 							case VEH_ROAD:  s = STR_GO_TO_ROADVEH_DEPOT; break;
 							case VEH_SHIP:  s = STR_GO_TO_SHIP_DEPOT; break;
 							default: break;
 						}
 					}
 
-					if (order->flags & OFB_FULL_LOAD) s++; /* service at */
+					if (order->GetDepotOrderType() & OFB_SERVICE_IF_NEEDED) s++; /* service at */
 
 					SetDParam(1, s);
-					if (order->refit_cargo < NUM_CARGO) {
+					if (order->IsRefit()) {
 						SetDParam(3, STR_REFIT_ORDER);
-						SetDParam(4, GetCargo(order->refit_cargo)->name);
+						SetDParam(4, GetCargo(order->GetRefitCargo())->name);
 					} else {
 						SetDParam(3, STR_EMPTY);
 					}
@@ -235,8 +235,8 @@
 				}
 
 				case OT_GOTO_WAYPOINT:
-					SetDParam(1, (order->flags & OFB_NON_STOP) ? STR_GO_NON_STOP_TO_WAYPOINT : STR_GO_TO_WAYPOINT);
-					SetDParam(2, order->dest);
+					SetDParam(1, (order->GetNonStopType() & OFB_NON_STOP) ? STR_GO_NON_STOP_TO_WAYPOINT : STR_GO_TO_WAYPOINT);
+					SetDParam(2, order->GetDestination());
 					break;
 
 				default: break;
@@ -263,8 +263,6 @@
 	Order order;
 	order.next  = NULL;
 	order.index = 0;
-	order.refit_cargo   = CT_INVALID;
-	order.refit_subtype = 0;
 
 	// check depot first
 	if (_patches.gotodepot) {
@@ -272,9 +270,7 @@
 		case MP_RAILWAY:
 			if (v->type == VEH_TRAIN && IsTileOwner(tile, _local_player)) {
 				if (IsRailDepot(tile)) {
-					order.type = OT_GOTO_DEPOT;
-					order.flags = OFB_PART_OF_ORDERS;
-					order.dest = GetDepotByTile(tile)->index;
+					order.MakeGoToDepot(GetDepotByTile(tile)->index, true);
 					return order;
 				}
 			}
@@ -282,9 +278,7 @@
 
 		case MP_ROAD:
 			if (IsRoadDepot(tile) && v->type == VEH_ROAD && IsTileOwner(tile, _local_player)) {
-				order.type = OT_GOTO_DEPOT;
-				order.flags = OFB_PART_OF_ORDERS;
-				order.dest = GetDepotByTile(tile)->index;
+				order.MakeGoToDepot(GetDepotByTile(tile)->index, true);
 				return order;
 			}
 			break;
@@ -292,9 +286,7 @@
 		case MP_STATION:
 			if (v->type != VEH_AIRCRAFT) break;
 			if (IsHangar(tile) && IsTileOwner(tile, _local_player)) {
-				order.type = OT_GOTO_DEPOT;
-				order.flags = OFB_PART_OF_ORDERS;
-				order.dest = GetStationIndex(tile);
+				order.MakeGoToDepot(GetStationIndex(tile), true);
 				return order;
 			}
 			break;
@@ -305,9 +297,7 @@
 					IsTileOwner(tile, _local_player)) {
 				TileIndex tile2 = GetOtherShipDepotTile(tile);
 
-				order.type = OT_GOTO_DEPOT;
-				order.flags = OFB_PART_OF_ORDERS;
-				order.dest = GetDepotByTile(tile < tile2 ? tile : tile2)->index;
+				order.MakeGoToDepot(GetDepotByTile(tile < tile2 ? tile : tile2)->index, true);
 				return order;
 			}
 
@@ -321,9 +311,7 @@
 			v->type == VEH_TRAIN &&
 			IsTileOwner(tile, _local_player) &&
 			IsRailWaypoint(tile)) {
-		order.type = OT_GOTO_WAYPOINT;
-		order.flags = 0;
-		order.dest = GetWaypointByTile(tile)->index;
+		order.MakeGoToWaypoint(GetWaypointByTile(tile)->index);
 		return order;
 	}
 
@@ -339,9 +327,7 @@
 			(facil=FACIL_BUS_STOP, v->type == VEH_ROAD && IsCargoInClass(v->cargo_type, CC_PASSENGERS)) ||
 			(facil=FACIL_TRUCK_STOP, 1);
 			if (st->facilities & facil) {
-				order.type = OT_GOTO_STATION;
-				order.flags = 0;
-				order.dest = st_index;
+				order.MakeGoToStation(st_index);
 				return order;
 			}
 		}
@@ -349,7 +335,6 @@
 
 	// not found
 	order.Free();
-	order.dest = INVALID_STATION;
 	return order;
 }
 
@@ -387,7 +372,7 @@
 	cmd = GetOrderCmdFromTile(v, tile);
 	if (!cmd.IsValid()) return;
 
-	if (DoCommandP(v->tile, v->index + (OrderGetSel(w) << 16), PackOrder(&cmd), NULL, CMD_INSERT_ORDER | CMD_MSG(STR_8833_CAN_T_INSERT_NEW_ORDER))) {
+	if (DoCommandP(v->tile, v->index + (OrderGetSel(w) << 16), cmd.Pack(), NULL, CMD_INSERT_ORDER | CMD_MSG(STR_8833_CAN_T_INSERT_NEW_ORDER))) {
 		if (WP(w, order_d).sel != -1) WP(w,order_d).sel++;
 		ResetObjectToPlace();
 	}
@@ -576,10 +561,10 @@
 				const Order *ord = GetVehicleOrder(v, sel);
 				TileIndex xy;
 
-				switch (ord->type) {
-					case OT_GOTO_STATION:  xy = GetStation(ord->dest)->xy ; break;
-					case OT_GOTO_DEPOT:    xy = (v->type == VEH_AIRCRAFT) ?  GetStation(ord->dest)->xy : GetDepot(ord->dest)->xy;    break;
-					case OT_GOTO_WAYPOINT: xy = GetWaypoint(ord->dest)->xy; break;
+				switch (ord->GetType()) {
+					case OT_GOTO_STATION:  xy = GetStation(ord->GetDestination())->xy ; break;
+					case OT_GOTO_DEPOT:    xy = (v->type == VEH_AIRCRAFT) ?  GetStation(ord->GetDestination())->xy : GetDepot(ord->GetDestination())->xy;    break;
+					case OT_GOTO_WAYPOINT: xy = GetWaypoint(ord->GetDestination())->xy; break;
 					default:               xy = 0; break;
 				}
 
@@ -691,7 +676,7 @@
 		int s = OrderGetSel(w);
 
 		if (e->we.click.widget != ORDER_WIDGET_FULL_LOAD) break;
-		if (s == v->num_orders || GetVehicleOrder(v, s)->type != OT_GOTO_DEPOT) {
+		if (s == v->num_orders || !GetVehicleOrder(v, s)->IsType(OT_GOTO_DEPOT)) {
 			GuiShowTooltips(STR_8857_MAKE_THE_HIGHLIGHTED_ORDER);
 		} else {
 			GuiShowTooltips(STR_SERVICE_HINT);