--- a/src/ai/api/ai_order.cpp Fri Oct 12 22:04:41 2007 +0000
+++ b/src/ai/api/ai_order.cpp Tue Oct 16 16:07:01 2007 +0000
@@ -136,6 +136,14 @@
}
}
+bool AIOrder::MoveOrder(VehicleID vehicle_id, uint32 order_id_move, uint32 order_id_target)
+{
+ if (!IsValidVehicleOrder(vehicle_id, order_id_move) || !IsValidVehicleOrder(vehicle_id, order_id_target))
+ return false;
+
+ return this->DoCommand(0, vehicle_id, order_id_move | (order_id_target << 16), CMD_MOVE_ORDER);
+}
+
bool AIOrder::CopyOrders(VehicleID vehicle_id, VehicleID main_vehicle_id)
{
if (!AIVehicle::IsValidVehicle(vehicle_id) || !AIVehicle::IsValidVehicle(main_vehicle_id)) return false;
--- a/src/ai/api/ai_order.hpp Fri Oct 12 22:04:41 2007 +0000
+++ b/src/ai/api/ai_order.hpp Tue Oct 16 16:07:01 2007 +0000
@@ -129,6 +129,21 @@
bool ChangeOrder(VehicleID vehicle_id, uint32 order_id, AIOrderFlags order_flags);
/**
+ * Move an order inside the orderlist
+ * @param vehicle_id the vehicle to move the orders.
+ * @param order_id_move the order to move.
+ * @param order_id_target the target order
+ * @pre IsValidVehicleOrder(vehicle_id, order_id_move).
+ * @pre IsValidVehicleOrder(vehicle_id, order_id_target).
+ * @return true if and only if the order was moved.
+ * @note If the order is moved to a lower place (e.g. from 7 to 2)
+ * the target order is moved upwards (e.g. 3). If the order is moved
+ * to a higher place (e.g. from 7 to 9) the target will be moved
+ * downwards (e.g. 8).
+ */
+ bool MoveOrder(VehicleID vehicle_id, uint32 order_id_move, uint32 order_id_target);
+
+ /**
* Copies the orders from another vehicle. The orders of the main
* vehicle are going to be the orders of the changed vehicle.
* @param vehicle_id the vehicle to copy the orders to.
--- a/src/ai/api/ai_order.hpp.sq Fri Oct 12 22:04:41 2007 +0000
+++ b/src/ai/api/ai_order.hpp.sq Tue Oct 16 16:07:01 2007 +0000
@@ -37,6 +37,7 @@
SQAIOrder.DefSQMethod(engine, &AIOrder::InsertOrder, "InsertOrder", 5, "xiiii");
SQAIOrder.DefSQMethod(engine, &AIOrder::RemoveOrder, "RemoveOrder", 3, "xii");
SQAIOrder.DefSQMethod(engine, &AIOrder::ChangeOrder, "ChangeOrder", 4, "xiii");
+ SQAIOrder.DefSQMethod(engine, &AIOrder::MoveOrder, "MoveOrder", 4, "xiii");
SQAIOrder.DefSQMethod(engine, &AIOrder::CopyOrders, "CopyOrders", 3, "xii");
SQAIOrder.DefSQMethod(engine, &AIOrder::ShareOrders, "ShareOrders", 3, "xii");
SQAIOrder.DefSQMethod(engine, &AIOrder::UnshareOrders, "UnshareOrders", 2, "xi");