Changeset - r8838:ab02a7e7aabf
[Not reviewed]
master
0 6 0
rubidium - 16 years ago 2008-04-06 07:07:21
rubidium@openttd.org
(svn r12586) -Codechange: do not access an order's refit variables directly.
6 files changed with 55 insertions and 25 deletions:
0 comments (0 inline, 0 general)
src/autoreplace_cmd.cpp
Show inline comments
 
@@ -71,9 +71,9 @@ static bool VerifyAutoreplaceRefitForOrd
 
	}
 

	
 
	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;
src/openttd.cpp
Show inline comments
 
@@ -1987,13 +1987,11 @@ bool AfterLoadGame()
 
		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);
 
		}
 
	}
 

	
src/order_base.h
Show inline comments
 
@@ -31,7 +31,10 @@ private:
 
	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 @@ public:
 
	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 @@ public:
 
	 * 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 @@ public:
 
	 */
 
	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;
 

	
 
	/**
src/order_cmd.cpp
Show inline comments
 
@@ -55,13 +55,12 @@ void Order::MakeGoToStation(StationID de
 
	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 @@ void Order::MakeDummy()
 
	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 @@ CommandCost CmdOrderRefit(TileIndex tile
 
	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 @@ CommandCost CmdOrderRefit(TileIndex tile
 

	
 
			/* 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);
 
			}
 
		}
 
	}
src/order_gui.cpp
Show inline comments
 
@@ -225,9 +225,9 @@ static void DrawOrdersWindow(Window *w)
 
					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 @@ static Order GetOrderCmdFromTile(const V
 
	Order order;
 
	order.next  = NULL;
 
	order.index = 0;
 
	order.refit_cargo   = CT_INVALID;
 
	order.refit_subtype = 0;
 

	
 
	// check depot first
 
	if (_patches.gotodepot) {
src/vehicle.cpp
Show inline comments
 
@@ -2243,11 +2243,11 @@ void VehicleEnterDepot(Vehicle *v)
 
		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
0 comments (0 inline, 0 general)