ProductionApi.getQueueData(queueType)

| Chrono Divide | 5 Reads

以下程式碼節錄自 @chronodivide/game-api 套件的型別宣告檔案,可看到 ProductionApiQueueData 等相關介面:

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