ProductionApi.getAvailableObjects(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/1235
ProductionApi.getAvailableObjects
會列出目前可投入生產佇列的單位或建築。
其型別與參數定義於 @chronodivide/game-api
中:
export declare class ProductionApi {
#private;
isAvailableForProduction(objRules: TechnoRules): boolean;
getAvailableObjects(queueType?: QueueType): TechnoRules[];
getQueueTypeForObject(objRules: TechnoRules): QueueType;
getQueueData(queueType: QueueType): QueueData;
}
QueueType
的列舉值如下,代表不同的生產佇列種類:
export declare enum QueueType {
Structures = 0,
Armory = 1,
Infantry = 2,
Vehicles = 3,
Aircrafts = 4,
Ships = 5
}
在壓縮後的實作中,方法會先取得可生產的所有物件,再依需要按佇列類型進一步篩選:
getAvailableObjects(t){
let e = Kp(this, Hp, "f").getAvailableObjects();
return void 0 !== t && (e = e.filter(e => this.getQueueTypeForObject(e) === t)), e
}
【F:node_modules/@chronodivide/game-api/dist/index.js†byte799820-800031】
使用範例
queueController.ts
便利用此方法依佇列取得可生產物件並計算其優先度:
this.queueStates = QUEUES.map((queueType) => {
const options = productionApi.getAvailableObjects(queueType);
const items = this.getPrioritiesForBuildingOptions(
game,
options,
threatCache,
playerData,
unitTypeRequests,
logger,
);
const topItem = items.length > 0 ? items[items.length - 1] : undefined;
return {
queue: queueType,
items,
// only if the top item has a priority above zero
topItem: topItem && topItem.priority > 0 ? topItem : undefined,
};
});
簡易示例
以下範例會在開局時列出每個佇列目前可建造的物件名稱:
import { cdapi, Bot, GameApi, QueueType } from "@chronodivide/game-api";
class BuildListBot extends Bot {
onGameStart(game: GameApi) {
const prod = game.productionApi;
for (const q of [
QueueType.Structures,
QueueType.Infantry,
QueueType.Vehicles,
QueueType.Aircrafts,
QueueType.Ships,
]) {
const options = prod.getAvailableObjects(q);
const names = options.map(r => r.name).join(", ");
console.log(`Queue ${QueueType[q]}: ${names}`);
}
}
}
async function main() {
await cdapi.init(process.env.MIX_DIR!);
await cdapi.createGame({
agents: [new BuildListBot("Inspector", "Americans")],
mapName: "mp03t4.map",
shortGame: true,
online: false,
});
}
main().catch(console.error);
在此程式中,getAvailableObjects(queueType)
會根據指定的佇列類型(建築、步兵、載具等)回傳目前符合建造條件的物件。
若省略參數則會取得所有佇列的可生產項目,再由外部自行分類。
利用這些資訊可建立自動建造邏輯或呈現可建造清單。
→返回《@chronodivide/game-api 使用教學與完整 API 對照表》
This article was last edited at