(svn r12586) -Codechange: do not access an order's refit variables directly.
authorrubidium
Sun, 06 Apr 2008 07:07:21 +0000
changeset 9334 db2f5161fcba
parent 9333 2bb0fdf0f3fc
child 9335 18d3658adc60
(svn r12586) -Codechange: do not access an order's refit variables directly.
src/autoreplace_cmd.cpp
src/openttd.cpp
src/order_base.h
src/order_cmd.cpp
src/order_gui.cpp
src/vehicle.cpp
--- a/src/autoreplace_cmd.cpp	Sat Apr 05 23:46:01 2008 +0000
+++ b/src/autoreplace_cmd.cpp	Sun Apr 06 07:07:21 2008 +0000
@@ -71,9 +71,9 @@
 	}
 
 	FOR_VEHICLE_ORDERS(u, o) {
-		if (!(o->refit_cargo < NUM_CARGO)) continue;
-		if (!CanRefitTo(v->engine_type, o->refit_cargo)) continue;
-		if (!CanRefitTo(engine_type, o->refit_cargo)) return false;
+		if (!o->IsRefit()) continue;
+		if (!CanRefitTo(v->engine_type, o->GetRefitCargo())) continue;
+		if (!CanRefitTo(engine_type, o->GetRefitCargo())) return false;
 	}
 
 	return true;
--- a/src/openttd.cpp	Sat Apr 05 23:46:01 2008 +0000
+++ b/src/openttd.cpp	Sun Apr 06 07:07:21 2008 +0000
@@ -1987,13 +1987,11 @@
 		Vehicle *v;
 
 		FOR_ALL_ORDERS(order) {
-			order->refit_cargo   = CT_NO_REFIT;
-			order->refit_subtype = CT_NO_REFIT;
+			order->SetRefit(CT_NO_REFIT);
 		}
 
 		FOR_ALL_VEHICLES(v) {
-			v->current_order.refit_cargo   = CT_NO_REFIT;
-			v->current_order.refit_subtype = CT_NO_REFIT;
+			v->current_order.SetRefit(CT_NO_REFIT);
 		}
 	}
 
--- a/src/order_base.h	Sat Apr 05 23:46:01 2008 +0000
+++ b/src/order_base.h	Sun Apr 06 07:07:21 2008 +0000
@@ -31,7 +31,10 @@
 	friend Order UnpackOldOrder(uint16 packed);                          ///< 'Uncompressing' a loaded old order.
 	friend Order UnpackVersion4Order(uint16 packed);                     ///< 'Uncompressing' a loaded ancient order.
 
-	OrderTypeByte type;
+	OrderTypeByte type;   ///< The type of order
+
+	CargoID refit_cargo;  ///< Refit CargoID
+	byte refit_subtype;   ///< Refit subtype
 
 public:
 	Order *next;          ///< Pointer to next order. If NULL, end of list
@@ -39,9 +42,6 @@
 	uint8  flags;
 	DestinationID dest;   ///< The destionation of the order.
 
-	CargoID refit_cargo; // Refit CargoID
-	byte refit_subtype; // Refit subtype
-
 	uint16 wait_time;    ///< How long in ticks to wait at the destination.
 	uint16 travel_time;  ///< How long in ticks the journey to this destination should take.
 
@@ -83,8 +83,10 @@
 	 * Makes this order a Go To Depot order.
 	 * @param destination the depot to go to.
 	 * @param order       is this order a 'default' order, or an overriden vehicle order?
+	 * @param cargo       the cargo type to change to.
+	 * @param subtype     the subtype to change to.
 	 */
-	void MakeGoToDepot(DepotID destination, bool order);
+	void MakeGoToDepot(DepotID destination, bool order, CargoID cargo = CT_NO_REFIT, byte subtype = 0);
 
 	/**
 	 * Makes this order a Go To Waypoint order.
@@ -113,6 +115,35 @@
 	 */
 	void FreeChain();
 
+	/**
+	 * Is this order a refit order.
+	 * @pre IsType(OT_GOTO_DEPOT)
+	 * @return true if a refit should happen.
+	 */
+	inline bool IsRefit() const { return this->refit_cargo < NUM_CARGO; }
+
+	/**
+	 * Get the cargo to to refit to.
+	 * @pre IsType(OT_GOTO_DEPOT)
+	 * @return the cargo type.
+	 */
+	inline CargoID GetRefitCargo() const { return this->refit_cargo; }
+
+	/**
+	 * Get the cargo subtype to to refit to.
+	 * @pre IsType(OT_GOTO_DEPOT)
+	 * @return the cargo subtype.
+	 */
+	inline byte GetRefitSubtype() const { return this->refit_subtype; }
+
+	/**
+	 * Make this depot order also a refit order.
+	 * @param cargo   the cargo type to change to.
+	 * @param subtype the subtype to change to.
+	 * @pre IsType(OT_GOTO_DEPOT).
+	 */
+	void SetRefit(CargoID cargo, byte subtype = 0);
+
 	bool ShouldStopAtStation(const Vehicle *v, StationID station) const;
 
 	/**
--- a/src/order_cmd.cpp	Sat Apr 05 23:46:01 2008 +0000
+++ b/src/order_cmd.cpp	Sun Apr 06 07:07:21 2008 +0000
@@ -55,13 +55,12 @@
 	this->dest = destination;
 }
 
-void Order::MakeGoToDepot(DepotID destination, bool order)
+void Order::MakeGoToDepot(DepotID destination, bool order, CargoID cargo, byte subtype)
 {
 	this->type = OT_GOTO_DEPOT;
 	this->flags = order ? OFB_PART_OF_ORDERS : OFB_NON_STOP;
 	this->dest = destination;
-	this->refit_cargo = CT_NO_REFIT;
-	this->refit_subtype = 0;
+	this->SetRefit(cargo, subtype);
 }
 
 void Order::MakeGoToWaypoint(WaypointID destination)
@@ -88,6 +87,12 @@
 	this->flags = 0;
 }
 
+void Order::SetRefit(CargoID cargo, byte subtype)
+{
+	this->refit_cargo = cargo;
+	this->refit_subtype = subtype;
+}
+
 void Order::FreeChain()
 {
 	if (next != NULL) next->FreeChain();
@@ -1002,8 +1007,7 @@
 	if (flags & DC_EXEC) {
 		Vehicle *u;
 
-		order->refit_cargo = cargo;
-		order->refit_subtype = subtype;
+		order->SetRefit(cargo, subtype);
 
 		u = GetFirstVehicleFromSharedList(v);
 		for (; u != NULL; u = u->next_shared) {
@@ -1012,8 +1016,7 @@
 
 			/* If the vehicle already got the current depot set as current order, then update current order as well */
 			if (u->cur_order_index == order_number && HasBit(u->current_order.flags, OF_PART_OF_ORDERS)) {
-				u->current_order.refit_cargo = cargo;
-				u->current_order.refit_subtype = subtype;
+				u->current_order.SetRefit(cargo, subtype);
 			}
 		}
 	}
--- a/src/order_gui.cpp	Sat Apr 05 23:46:01 2008 +0000
+++ b/src/order_gui.cpp	Sun Apr 06 07:07:21 2008 +0000
@@ -225,9 +225,9 @@
 					if (order->flags & OFB_FULL_LOAD) 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);
 					}
@@ -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) {
--- a/src/vehicle.cpp	Sat Apr 05 23:46:01 2008 +0000
+++ b/src/vehicle.cpp	Sun Apr 06 07:07:21 2008 +0000
@@ -2243,11 +2243,11 @@
 		t = v->current_order;
 		v->current_order.MakeDummy();
 
-		if (t.refit_cargo < NUM_CARGO) {
+		if (t.IsRefit()) {
 			CommandCost cost;
 
 			_current_player = v->owner;
-			cost = DoCommand(v->tile, v->index, t.refit_cargo | t.refit_subtype << 8, DC_EXEC, GetCmdRefitVeh(v));
+			cost = DoCommand(v->tile, v->index, t.GetRefitCargo() | t.GetRefitSubtype() << 8, DC_EXEC, GetCmdRefitVeh(v));
 
 			if (CmdFailed(cost)) {
 				v->leave_depot_instantly = false; // We ensure that the vehicle stays in the depot