int IssueRequeueProductionOrder(int old_queue_index, int new_queue_index) { if (old_queue_index == new_queue_index) { Logger().errorStream() << "AIInterface::IssueRequeueProductionOrder : passed same old and new indexes... nothing to do."; return 0; } int empire_id = AIClientApp::GetApp()->EmpireID(); Empire* empire = AIClientApp::GetApp()->Empires().Lookup(empire_id); const ProductionQueue& queue = empire->GetProductionQueue(); if (old_queue_index < 0 || static_cast<int>(queue.size()) <= old_queue_index) { Logger().errorStream() << "AIInterface::IssueRequeueProductionOrder : passed old_queue_index outside range of items on queue."; return 0; } // After removing an earlier entry in queue, all later entries are shifted down one queue index, so // inserting before the specified item index should now insert before the previous item index. This // also allows moving to the end of the queue, rather than only before the last item on the queue. int actual_new_index = new_queue_index; if (old_queue_index < new_queue_index) actual_new_index = new_queue_index - 1; if (new_queue_index < 0 || static_cast<int>(queue.size()) <= actual_new_index) { Logger().errorStream() << "AIInterface::IssueRequeueProductionOrder : passed new_queue_index outside range of items on queue."; return 0; } AIClientApp::GetApp()->Orders().IssueOrder(OrderPtr( new ProductionQueueOrder(empire_id, old_queue_index, new_queue_index))); return 1; }
int IssueDequeueProductionOrder(int queue_index) { int empire_id = AIClientApp::GetApp()->EmpireID(); Empire* empire = AIClientApp::GetApp()->Empires().Lookup(empire_id); const ProductionQueue& queue = empire->GetProductionQueue(); if (queue_index < 0 || static_cast<int>(queue.size()) <= queue_index) { Logger().errorStream() << "AIInterface::IssueDequeueProductionOrder : passed queue_index outside range of items on queue."; return 0; } AIClientApp::GetApp()->Orders().IssueOrder(OrderPtr( new ProductionQueueOrder(empire_id, queue_index))); return 1; }
int IssueChangeProductionQuantityOrder(int queue_index, int new_quantity, int new_blocksize) { int empire_id = AIClientApp::GetApp()->EmpireID(); Empire* empire = AIClientApp::GetApp()->Empires().Lookup(empire_id); const ProductionQueue& queue = empire->GetProductionQueue(); if (queue_index < 0 || static_cast<int>(queue.size()) <= queue_index) { Logger().errorStream() << "AIInterface::IssueChangeProductionQuantityOrder : passed queue_index outside range of items on queue."; return 0; } if (queue[queue_index].item.build_type != BT_SHIP) { Logger().errorStream() << "AIInterface::IssueChangeProductionQuantityOrder : passed queue_index for a non-ship item."; return 0; } AIClientApp::GetApp()->Orders().IssueOrder(OrderPtr( new ProductionQueueOrder(empire_id, queue_index, new_quantity, new_blocksize))); return 1; }