Changeset - r8835:86b7d0c27ddf
[Not reviewed]
master
0 3 0
rubidium - 16 years ago 2008-04-05 21:45:05
rubidium@openttd.org
(svn r12583) -Codechange: make AssignOrder a class function of order.
3 files changed with 39 insertions and 23 deletions:
0 comments (0 inline, 0 general)
src/oldloader.cpp
Show inline comments
 
@@ -504,7 +504,7 @@ static bool LoadOldOrder(LoadgameState *
 
{
 
	if (!LoadChunk(ls, NULL, order_chunk)) return false;
 

	
 
	AssignOrder(new (num) Order(), UnpackOldOrder(_old_order));
 
	(new (num) Order())->AssignOrder(UnpackOldOrder(_old_order));
 

	
 
	/* Relink the orders to eachother (in TTD(Patch) the orders for one
 
	vehicle are behind eachother, with an invalid order (OT_NOTHING) as indication that
 
@@ -1248,7 +1248,7 @@ bool LoadOldVehicle(LoadgameState *ls, i
 
			 */
 
			if (old_id < 5000) v->orders = GetOrder(old_id);
 
		}
 
		AssignOrder(&v->current_order, UnpackOldOrder(_old_order));
 
		v->current_order.AssignOrder(UnpackOldOrder(_old_order));
 

	
 
		/* For some reason we need to correct for this */
 
		switch (v->spritenum) {
src/order_base.h
Show inline comments
 
@@ -53,6 +53,19 @@ struct Order : PoolItem<Order, OrderID, 
 
	void FreeChain();
 

	
 
	bool ShouldStopAtStation(const Vehicle *v, StationID station) const;
 

	
 
	/**
 
	 * Assign the given order to this one.
 
	 * @param other the data to copy (except next pointer).
 
	 */
 
	void AssignOrder(const Order &other);
 

	
 
	/**
 
	 * Does this order have the same type, flags and destination?
 
	 * @param other the second order to compare to.
 
	 * @return true if the type, flags and destination match.
 
	 */
 
	bool Equals(const Order &other) const;
 
};
 

	
 
static inline VehicleOrderID GetMaxOrderIndex()
 
@@ -80,6 +93,5 @@ static inline VehicleOrderID GetNumOrder
 
uint32 PackOrder(const Order *order);
 
Order UnpackOrder(uint32 packed);
 
Order UnpackOldOrder(uint16 packed);
 
void AssignOrder(Order *order, Order data);
 

	
 
#endif /* ORDER_H */
src/order_cmd.cpp
Show inline comments
 
@@ -54,6 +54,14 @@ void Order::FreeChain()
 
	delete this;
 
}
 

	
 
bool Order::Equals(const Order &other) const
 
{
 
	return
 
			this->type  == other.type &&
 
			this->flags == other.flags &&
 
			this->dest  == other.dest;
 
}
 

	
 
static bool HasOrderPoolFree(uint amount)
 
{
 
	const Order *order;
 
@@ -157,9 +165,9 @@ static void SwapOrders(Order *order1, Or
 
	Order temp_order;
 

	
 
	temp_order = *order1;
 
	AssignOrder(order1, *order2);
 
	order1->AssignOrder(*order2);
 
	order1->next = order2->next;
 
	AssignOrder(order2, temp_order);
 
	order2->AssignOrder(temp_order);
 
	order2->next = temp_order.next;
 
}
 

	
 
@@ -169,17 +177,17 @@ static void SwapOrders(Order *order1, Or
 
 *   This function makes sure that the index is maintained correctly
 
 *
 
 */
 
void AssignOrder(Order *order, Order data)
 
void Order::AssignOrder(const Order &other)
 
{
 
	order->type  = data.type;
 
	order->flags = data.flags;
 
	order->dest  = data.dest;
 
	this->type  = other.type;
 
	this->flags = other.flags;
 
	this->dest  = other.dest;
 

	
 
	order->refit_cargo   = data.refit_cargo;
 
	order->refit_subtype = data.refit_subtype;
 
	this->refit_cargo   = other.refit_cargo;
 
	this->refit_subtype = other.refit_subtype;
 

	
 
	order->wait_time   = data.wait_time;
 
	order->travel_time = data.travel_time;
 
	this->wait_time   = other.wait_time;
 
	this->travel_time = other.travel_time;
 
}
 

	
 

	
 
@@ -410,7 +418,7 @@ CommandCost CmdInsertOrder(TileIndex til
 
	if (flags & DC_EXEC) {
 
		Vehicle *u;
 
		Order *new_o = new Order();
 
		AssignOrder(new_o, new_order);
 
		new_o->AssignOrder(new_order);
 

	
 
		/* Create new order and link in list */
 
		if (v->orders == NULL) {
 
@@ -905,7 +913,7 @@ CommandCost CmdCloneOrder(TileIndex tile
 
				order_dst = &dst->orders;
 
				FOR_VEHICLE_ORDERS(src, order) {
 
					*order_dst = new Order();
 
					AssignOrder(*order_dst, *order);
 
					(*order_dst)->AssignOrder(*order);
 
					order_dst = &(*order_dst)->next;
 
				}
 

	
 
@@ -1172,9 +1180,7 @@ void CheckOrders(const Vehicle* v)
 
		if (v->num_orders > 1) {
 
			const Order* last = GetLastVehicleOrder(v);
 

	
 
			if (v->orders->type  == last->type &&
 
					v->orders->flags == last->flags &&
 
					v->orders->dest  == last->dest) {
 
			if (v->orders->Equals(*last)) {
 
				problem_type = 2;
 
			}
 
		}
 
@@ -1415,9 +1421,7 @@ bool ProcessOrders(Vehicle *v)
 
	}
 

	
 
	/* If it is unchanged, keep it. */
 
	if (order->type  == v->current_order.type &&
 
			order->flags == v->current_order.flags &&
 
			order->dest  == v->current_order.dest &&
 
	if (order->Equals(v->current_order) &&
 
			(v->type != VEH_SHIP || order->type != OT_GOTO_STATION || GetStation(order->dest)->dock_tile != 0)) {
 
		return false;
 
	}
 
@@ -1530,7 +1534,7 @@ static void Load_ORDR()
 

	
 
			for (i = 0; i < len; ++i) {
 
				Order *order = new (i) Order();
 
				AssignOrder(order, UnpackVersion4Order(orders[i]));
 
				order->AssignOrder(UnpackVersion4Order(orders[i]));
 
			}
 

	
 
			free(orders);
 
@@ -1542,7 +1546,7 @@ static void Load_ORDR()
 

	
 
			for (i = 0; i < len; ++i) {
 
				Order *order = new (i) Order();
 
				AssignOrder(order, UnpackOrder(orders[i]));
 
				order->AssignOrder(UnpackOrder(orders[i]));
 
			}
 

	
 
			free(orders);
0 comments (0 inline, 0 general)