ProductionApi.getQueueData(queueType)
Copyright Notice: This article is an original work licensed under the CC 4.0 BY-NC-ND license.
If you wish to repost this article, please include the original source link and this copyright notice.
Source link: https://v2know.com/article/1237
以下程式碼節錄自 @chronodivide/game-api
套件的型別宣告檔案,可看到 ProductionApi
及 QueueData
等相關介面:
export declare class ProductionApi {
#private;
isAvailableForProduction(objRules: TechnoRules): boolean;
getAvailableObjects(queueType?: QueueType): TechnoRules[];
getQueueTypeForObject(objRules: TechnoRules): QueueType;
getQueueData(queueType: QueueType): QueueData;
}
export declare interface QueueData {
size: number;
maxSize: number;
status: QueueStatus;
type: QueueType;
items: QueueItemData[];
}
export declare interface QueueItemData {
rules: TechnoRules;
quantity: number;
}
export declare enum QueueStatus {
Idle = 0,
Active = 1,
/** Production is paused */
OnHold = 2,
/** First item is ready and is waiting to be removed before starting the next */
Ready = 3
}
export declare enum QueueType {
Structures = 0,
Armory = 1,
Infantry = 2,
Vehicles = 3,
Aircrafts = 4,
Ships = 5
}
getQueueData(queueType)
方法會依據 QueueType
回傳指定生產佇列(queue)的狀態。QueueData
內容包括:
-
size:佇列中當前的項目數量。
-
maxSize:佇列最大可容納的項目數量。
-
status:佇列目前狀態(Idle, Active, OnHold 或 Ready)。
-
type:此佇列的
QueueType
。 -
items:佇列內各項目的詳細資訊,每個
QueueItemData
包含rules
(對應單位或建築的TechnoRules
)以及quantity
。
使用範例
下列程式碼示範如何取得生產佇列資訊,並根據狀態執行相應處理:
import { cdapi, GameApi, ProductionApi, QueueType, QueueStatus } from "@chronodivide/game-api";
async function checkProduction() {
await cdapi.init(process.env.MIX_DIR || "./");
const game = await cdapi.createGame({ /* 遊戲設定略 */ });
const productionApi: ProductionApi = game.getProductionApi();
// 以 Vehicles 佇列為例
const queueData = productionApi.getQueueData(QueueType.Vehicles);
console.log(`目前佇列大小: ${queueData.size}/${queueData.maxSize}`);
console.log(`佇列狀態: ${QueueStatus[queueData.status]}`);
queueData.items.forEach((item, index) => {
console.log(
`第 ${index + 1} 項: ${item.rules.name} (${item.quantity} 個)`
);
});
// 如果佇列已經滿載,可視情況暫停或取消生產
if (queueData.status === QueueStatus.Active && queueData.size >= queueData.maxSize) {
console.log("生產佇列已滿,可考慮暫停或取消部分項目");
}
game.dispose();
}
此例中,我們先從 GameApi
取得 ProductionApi
,接著對特定的 QueueType
調用 getQueueData()
,即可讀取目前生產佇列的狀態與內容。根據佇列中項目數量或佇列狀態,可決定是否暫停或取消生產,或是佇列是否仍有空間加入更多單位。透過此方法,開發者能依自身的 AI 策略動態調整生產順序,或在資源不足、佇列已滿時做出相應反應。
→返回《@chronodivide/game-api 使用教學與完整 API 對照表》
This article was last edited at