diff --git a/src/oldloader.cpp b/src/oldloader.cpp --- a/src/oldloader.cpp +++ b/src/oldloader.cpp @@ -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) { diff --git a/src/order_base.h b/src/order_base.h --- a/src/order_base.h +++ b/src/order_base.h @@ -53,6 +53,19 @@ struct Order : PoolItemtype == 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);