From 78577db3f9cfd2b9bcf6788ac4d4dd9614fd617b Mon Sep 17 00:00:00 2001 From: YHH <359807859@qq.com> Date: Wed, 25 Jun 2025 23:17:55 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=A4=BA=E4=BE=8B=E6=95=99?= =?UTF-8?q?=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cocos/cocos-ecs/assets/resources.meta | 2 +- .../assets/resources/miner-stamina-ai.bt.json | 2 +- .../resources/miner-stamina-ai.bt.json.meta | 2 +- extensions/cocos/cocos-ecs/assets/scenes.meta | 2 +- ...ne.scene => behaviour-example-scene.scene} | 6 +- ...eta => behaviour-example-scene.scene.meta} | 0 .../cocos/cocos-ecs/assets/scripts.meta | 2 +- .../cocos/cocos-ecs/assets/scripts/RTSDemo.ts | 2 +- .../cocos-ecs/assets/scripts/components.meta | 2 +- .../components/BehaviorTreeComponent.ts | 219 +++++------------- .../scripts/components/MinerStatusUI.ts | 31 +-- .../scripts/components/StatusUIManager.ts | 7 - .../cocos/cocos-ecs/extensions/behaviour-tree | 2 +- extensions/cocos/cocos-ecs/package-lock.json | 9 +- extensions/cocos/cocos-ecs/package.json | 2 +- thirdparty/BehaviourTree-ai | 2 +- 16 files changed, 91 insertions(+), 201 deletions(-) rename extensions/cocos/cocos-ecs/assets/scenes/{scene.scene => behaviour-example-scene.scene} (99%) rename extensions/cocos/cocos-ecs/assets/scenes/{scene.scene.meta => behaviour-example-scene.scene.meta} (100%) diff --git a/extensions/cocos/cocos-ecs/assets/resources.meta b/extensions/cocos/cocos-ecs/assets/resources.meta index 5970eca5..cf9b781c 100644 --- a/extensions/cocos/cocos-ecs/assets/resources.meta +++ b/extensions/cocos/cocos-ecs/assets/resources.meta @@ -2,7 +2,7 @@ "ver": "1.2.0", "importer": "directory", "imported": true, - "uuid": "da4522ce-bedb-42d5-8cba-63dcb4641265", + "uuid": "2a691dda-d56d-4a72-9fef-111a999415db", "files": [], "subMetas": {}, "userData": { diff --git a/extensions/cocos/cocos-ecs/assets/resources/miner-stamina-ai.bt.json b/extensions/cocos/cocos-ecs/assets/resources/miner-stamina-ai.bt.json index 12cc75ca..6cd4b934 100644 --- a/extensions/cocos/cocos-ecs/assets/resources/miner-stamina-ai.bt.json +++ b/extensions/cocos/cocos-ecs/assets/resources/miner-stamina-ai.bt.json @@ -310,7 +310,7 @@ ], "metadata": { "name": "behavior-tree", - "created": "2025-06-25T08:41:25.401Z", + "created": "2025-06-25T14:06:55.596Z", "version": "1.0", "exportType": "clean" } diff --git a/extensions/cocos/cocos-ecs/assets/resources/miner-stamina-ai.bt.json.meta b/extensions/cocos/cocos-ecs/assets/resources/miner-stamina-ai.bt.json.meta index b6cb3901..21521c62 100644 --- a/extensions/cocos/cocos-ecs/assets/resources/miner-stamina-ai.bt.json.meta +++ b/extensions/cocos/cocos-ecs/assets/resources/miner-stamina-ai.bt.json.meta @@ -2,7 +2,7 @@ "ver": "2.0.1", "importer": "json", "imported": true, - "uuid": "b328a163-97a8-4435-b87c-9369dd76862d", + "uuid": "598e1450-8c7a-46c7-9540-398f9809d627", "files": [ ".json" ], diff --git a/extensions/cocos/cocos-ecs/assets/scenes.meta b/extensions/cocos/cocos-ecs/assets/scenes.meta index 25614c04..38e9792b 100644 --- a/extensions/cocos/cocos-ecs/assets/scenes.meta +++ b/extensions/cocos/cocos-ecs/assets/scenes.meta @@ -2,7 +2,7 @@ "ver": "1.2.0", "importer": "directory", "imported": true, - "uuid": "e7a0c4c4-f555-4dc5-be34-83ae26b4eb35", + "uuid": "240e4a78-e55f-47a8-84de-39220bba1321", "files": [], "subMetas": {}, "userData": {} diff --git a/extensions/cocos/cocos-ecs/assets/scenes/scene.scene b/extensions/cocos/cocos-ecs/assets/scenes/behaviour-example-scene.scene similarity index 99% rename from extensions/cocos/cocos-ecs/assets/scenes/scene.scene rename to extensions/cocos/cocos-ecs/assets/scenes/behaviour-example-scene.scene index 5c5262a5..513315cf 100644 --- a/extensions/cocos/cocos-ecs/assets/scenes/scene.scene +++ b/extensions/cocos/cocos-ecs/assets/scenes/behaviour-example-scene.scene @@ -1,7 +1,7 @@ [ { "__type__": "cc.SceneAsset", - "_name": "scene", + "_name": "behaviour-example-scene", "_objFlags": 0, "__editorExtras__": {}, "_native": "", @@ -11,7 +11,7 @@ }, { "__type__": "cc.Scene", - "_name": "scene", + "_name": "behaviour-example-scene", "_objFlags": 0, "__editorExtras__": {}, "_parent": null, @@ -565,7 +565,7 @@ }, "_enabled": true, "__prefab": null, - "minerCount": 2, + "minerCount": 1, "goldMineCount": 3, "_id": "86AIY7iYlMNqJsDC/+LIMU" }, diff --git a/extensions/cocos/cocos-ecs/assets/scenes/scene.scene.meta b/extensions/cocos/cocos-ecs/assets/scenes/behaviour-example-scene.scene.meta similarity index 100% rename from extensions/cocos/cocos-ecs/assets/scenes/scene.scene.meta rename to extensions/cocos/cocos-ecs/assets/scenes/behaviour-example-scene.scene.meta diff --git a/extensions/cocos/cocos-ecs/assets/scripts.meta b/extensions/cocos/cocos-ecs/assets/scripts.meta index a388a128..3c3b51ab 100644 --- a/extensions/cocos/cocos-ecs/assets/scripts.meta +++ b/extensions/cocos/cocos-ecs/assets/scripts.meta @@ -2,7 +2,7 @@ "ver": "1.2.0", "importer": "directory", "imported": true, - "uuid": "1bf5f009-19d9-42b9-b6bb-b44efe349b09", + "uuid": "1556cd72-9618-4f9f-b9e7-28152a33bde9", "files": [], "subMetas": {}, "userData": {} diff --git a/extensions/cocos/cocos-ecs/assets/scripts/RTSDemo.ts b/extensions/cocos/cocos-ecs/assets/scripts/RTSDemo.ts index 8b867d4c..832f77a2 100644 --- a/extensions/cocos/cocos-ecs/assets/scripts/RTSDemo.ts +++ b/extensions/cocos/cocos-ecs/assets/scripts/RTSDemo.ts @@ -12,7 +12,7 @@ const { ccclass, property } = _decorator; export class SimpleMinerDemo extends Component { @property - minerCount: number = 2; + minerCount: number = 1; @property goldMineCount: number = 3; diff --git a/extensions/cocos/cocos-ecs/assets/scripts/components.meta b/extensions/cocos/cocos-ecs/assets/scripts/components.meta index a089ae9a..fff9e799 100644 --- a/extensions/cocos/cocos-ecs/assets/scripts/components.meta +++ b/extensions/cocos/cocos-ecs/assets/scripts/components.meta @@ -2,7 +2,7 @@ "ver": "1.2.0", "importer": "directory", "imported": true, - "uuid": "d946c8cb-cba5-46eb-8949-5a327bdd4367", + "uuid": "d07d95ad-f180-4b6e-9d0a-7248e75ec795", "files": [], "subMetas": {}, "userData": {} diff --git a/extensions/cocos/cocos-ecs/assets/scripts/components/BehaviorTreeComponent.ts b/extensions/cocos/cocos-ecs/assets/scripts/components/BehaviorTreeComponent.ts index 8b875fe0..01da04c6 100644 --- a/extensions/cocos/cocos-ecs/assets/scripts/components/BehaviorTreeComponent.ts +++ b/extensions/cocos/cocos-ecs/assets/scripts/components/BehaviorTreeComponent.ts @@ -5,9 +5,6 @@ import { StatusUIManager } from './StatusUIManager'; const { ccclass, property } = _decorator; -/** - * 行为树组件 - 纯Cocos Creator组件,管理单个节点的行为树 - */ @ccclass('BehaviorTreeComponent') export class BehaviorTreeComponent extends Component { @@ -50,12 +47,8 @@ export class BehaviorTreeComponent extends Component { } } - /** - * 初始化行为树 - */ async initialize() { if (!this.behaviorTreeFile) { - console.error(`[${this.node.name}] 行为树文件路径未设置`); return; } @@ -63,22 +56,16 @@ export class BehaviorTreeComponent extends Component { await this.loadBehaviorTree(); this.isLoaded = true; this.isRunning = true; - - } catch (error) { - console.error(`[${this.node.name}] 行为树组件初始化失败: ${this.behaviorTreeFile}`, error); + // 静默处理 } } - /** - * 加载行为树文件 - */ private async loadBehaviorTree(): Promise { return new Promise((resolve, reject) => { let jsonPath = this.behaviorTreeFile; resources.load(jsonPath, JsonAsset, (err, asset) => { if (err) { - console.error(`[${this.node.name}] 加载行为树文件失败: ${jsonPath}`, err); reject(err); return; } @@ -88,45 +75,33 @@ export class BehaviorTreeComponent extends Component { this.buildBehaviorTree(treeData); resolve(); } catch (buildError) { - console.error(`[${this.node.name}] 构建行为树失败: ${jsonPath}`, buildError); reject(buildError); } }); }); } - /** - * 构建行为树 - */ private buildBehaviorTree(treeData: BehaviorTreeJSONConfig) { - // 创建事件注册表并注册基础动作 this.eventRegistry = new EventRegistry(); this.setupEventHandlers(); - // 创建基础执行上下文 const baseContext = { node: this.node, component: this, eventRegistry: this.eventRegistry }; - // 使用@esengine/ai的BehaviorTreeBuilder构建行为树 const result = BehaviorTreeBuilder.fromBehaviorTreeConfig(treeData, baseContext); this.behaviorTree = result.tree; this.blackboard = result.blackboard; this.context = result.context; - // 初始化黑板变量 this.initializeBlackboard(); } - /** - * 设置事件处理器 - 根据行为树文件中实际使用的事件名称注册 - */ private setupEventHandlers() { if (!this.eventRegistry) return; - // 根据miner-stamina-ai.bt.json中的实际事件名称注册处理器 this.eventRegistry.registerAction('go-home-rest', (context, params) => { return this.handleGoHomeRest(context, params); }); @@ -148,13 +123,9 @@ export class BehaviorTreeComponent extends Component { }); } - /** - * 初始化黑板变量 - 简化版本 - */ private initializeBlackboard() { if (!this.blackboard) return; - // 简单初始化矿工状态 this.blackboard.setValue('stamina', 100); this.blackboard.setValue('staminaPercentage', 1.0); this.blackboard.setValue('isLowStamina', false); @@ -164,10 +135,6 @@ export class BehaviorTreeComponent extends Component { } - - /** - * 创建状态UI - */ private createStatusUI() { if (!this.statusUIPrefab) { this.createSimpleStatusUI(); @@ -186,16 +153,9 @@ export class BehaviorTreeComponent extends Component { } private createSimpleStatusUI() { - this.statusUI = StatusUIManager.createStatusUIForMiner(this.node); - if (!this.statusUI) { - console.warn(`[${this.node.name}] 状态UI创建失败`); - } } - /** - * 更新状态UI显示 - */ private updateStatusUI() { if (!this.statusUI || !this.blackboard) return; @@ -229,9 +189,6 @@ export class BehaviorTreeComponent extends Component { this.updateActionProgressUI(); } - /** - * 更新动作进度UI - */ private updateActionProgressUI() { if (!this.statusUI) return; @@ -278,99 +235,83 @@ export class BehaviorTreeComponent extends Component { } /** - * 回家休息 - 简化版本 + * 回家休息 - 包含体力恢复逻辑 */ private handleGoHomeRest(context: any, params: any): ActionResult { const blackboard = this.blackboard; if (!blackboard) return 'failure'; - // 清理其他动作状态 - this.clearActionState('mine-gold-ore'); - this.clearActionState('store-ore'); - - // 回到出生点休息 + // 检查是否已经在家了 const homePos = blackboard.getValue('homePosition') || this.node.worldPosition; - this.moveToPosition(homePos, 2.0); - blackboard.setValue('isResting', true); + const distance = Vec3.distance(this.node.worldPosition, homePos); + + if (distance > 1.0) { + // 还没到家,继续移动 + this.moveToPosition(homePos, 2.0); + return 'running'; + } else { + this.clearActionState('mine-gold-ore'); + this.clearActionState('store-ore'); + blackboard.setValue('isResting', true); + const actionKey = 'go-home-rest'; + const currentTime = Date.now(); + + // 初始化休息状态 + if (!this.actionStates.has(actionKey)) { + this.actionStates.set(actionKey, { + isExecuting: true, + startTime: currentTime, + duration: 2000 // 2秒恢复一次 + }); + return 'running'; + } + + const actionState = this.actionStates.get(actionKey)!; + const elapsed = currentTime - actionState.startTime; + + if (elapsed >= actionState.duration) { + const currentStamina = blackboard.getValue('stamina'); + const newStamina = Math.min(100, currentStamina + 10); + + blackboard.setValue('stamina', newStamina); + blackboard.setValue('staminaPercentage', newStamina / 100); + + if (newStamina >= 80) { + blackboard.setValue('isResting', false); + blackboard.setValue('isLowStamina', false); + this.actionStates.delete(actionKey); + return 'success'; + } + + actionState.startTime = currentTime; + } + + return 'running'; + } + } + + private handleRecoverStamina(context: any, params: any): ActionResult { return 'success'; } - /** - * 恢复体力 - 优化版本,缓慢恢复 - */ - private handleRecoverStamina(context: any, params: any): ActionResult { - const blackboard = this.blackboard; - if (!blackboard) return 'failure'; - - const actionKey = 'recover-stamina'; - const currentTime = Date.now(); - - // 初始化动作状态 - if (!this.actionStates.has(actionKey)) { - this.actionStates.set(actionKey, { - isExecuting: true, - startTime: currentTime, - duration: 2000 // 2秒恢复一次 - }); - // 设置休息状态,确保不会被其他任务中断 - blackboard.setValue('isResting', true); - - return 'running'; - } - - const actionState = this.actionStates.get(actionKey)!; - const elapsed = currentTime - actionState.startTime; - - // 检查是否到了恢复时间 - if (elapsed >= actionState.duration) { - // 恢复体力 - const currentStamina = blackboard.getValue('stamina'); - const newStamina = Math.min(100, currentStamina + 10); // 每次恢复10点 - - blackboard.setValue('stamina', newStamina); - blackboard.setValue('staminaPercentage', newStamina / 100); - blackboard.setValue('isLowStamina', newStamina < 20); - - - - // 体力满了就完成休息 - if (newStamina >= 100) { - blackboard.setValue('isResting', false); // 只有完全恢复后才结束休息状态 - this.actionStates.delete(actionKey); - - return 'success'; - } - - // 重置计时器继续恢复,保持休息状态 - actionState.startTime = currentTime; - } - - return 'running'; - } - - /** - * 挖掘金矿 - 优化版本,需要时间挖掘 - */ private handleMineGoldOre(context: any, params: any): ActionResult { const blackboard = this.blackboard; if (!blackboard) return 'failure'; - // 检查是否应该执行挖矿 const hasOre = blackboard.getValue('hasOre'); const isLowStamina = blackboard.getValue('isLowStamina'); + const isResting = blackboard.getValue('isResting'); - if (hasOre || isLowStamina) { + if (hasOre || isLowStamina || isResting) { return 'failure'; } - // 找到最近的金矿 const gameManager = this.node.parent?.getComponent('SimpleMinerDemo'); const goldMines = (gameManager as any)?.getAllGoldMines(); if (!goldMines?.length) return 'failure'; - // 简单找最近的矿 let nearestMine = goldMines[0]; let minDistance = Vec3.distance(this.node.worldPosition, nearestMine.worldPosition); @@ -383,29 +324,24 @@ export class BehaviorTreeComponent extends Component { } if (minDistance > 2.0) { - // 还没到金矿,继续移动 this.moveToPosition(nearestMine.worldPosition, 2.0); return 'running'; } else { - // 到了金矿,开始挖掘流程 const actionKey = 'mine-gold-ore'; const currentTime = Date.now(); - // 初始化挖掘状态 if (!this.actionStates.has(actionKey)) { this.actionStates.set(actionKey, { isExecuting: true, startTime: currentTime, - duration: 3000 // 3秒挖掘时间 + duration: 3000 }); - return 'running'; } const actionState = this.actionStates.get(actionKey)!; const elapsed = currentTime - actionState.startTime; - // 挖掘完成 if (elapsed >= actionState.duration) { const currentStamina = blackboard.getValue('stamina'); const newStamina = Math.max(0, currentStamina - 15); @@ -415,19 +351,14 @@ export class BehaviorTreeComponent extends Component { blackboard.setValue('hasOre', true); blackboard.setValue('isLowStamina', newStamina < 20); - - this.actionStates.delete(actionKey); - return 'failure'; // 让选择器重新评估条件 + return 'failure'; } return 'running'; } } - /** - * 存储矿石 - 优化版本,需要时间存储 - */ private handleStoreOre(context: any, params: any): ActionResult { const blackboard = this.blackboard; if (!blackboard) return 'failure'; @@ -437,11 +368,12 @@ export class BehaviorTreeComponent extends Component { return 'failure'; } - // 清理其他动作状态 - this.clearActionState('mine-gold-ore'); - this.clearActionState('recover-stamina'); + const isLowStamina = blackboard.getValue('isLowStamina'); + if (isLowStamina) { + return 'failure'; + } - // 找到仓库并移动过去 + this.clearActionState('mine-gold-ore'); const gameManager = this.node.parent?.getComponent('SimpleMinerDemo'); const warehouse = (gameManager as any)?.getWarehouse(); if (!warehouse) return 'failure'; @@ -449,35 +381,27 @@ export class BehaviorTreeComponent extends Component { const distance = Vec3.distance(this.node.worldPosition, warehouse.worldPosition); if (distance > 2.0) { - // 还没到仓库,继续移动 this.moveToPosition(warehouse.worldPosition, 2.0); return 'running'; } else { - // 到了仓库,开始存储流程 const actionKey = 'store-ore'; const currentTime = Date.now(); - // 初始化存储状态 if (!this.actionStates.has(actionKey)) { this.actionStates.set(actionKey, { isExecuting: true, startTime: currentTime, - duration: 1500 // 1.5秒存储时间 + duration: 1500 }); - return 'running'; } const actionState = this.actionStates.get(actionKey)!; const elapsed = currentTime - actionState.startTime; - // 存储完成 if (elapsed >= actionState.duration) { blackboard.setValue('hasOre', false); (gameManager as any).mineGoldOre(this.node); - - - this.actionStates.delete(actionKey); return 'success'; } @@ -486,44 +410,25 @@ export class BehaviorTreeComponent extends Component { } } - /** - * 默认待机行为 - */ private handleIdleBehavior(context: any, params: any): ActionResult { - return 'success'; } - // ==================== 辅助方法 ==================== - private moveToPosition(targetPos: Vec3, duration: number) { - tween(this.node).stop(); // 停止之前的移动 + tween(this.node).stop(); tween(this.node).to(duration, { worldPosition: targetPos }).start(); } - /** - * 更新行为树 - 简化版本 - */ update(deltaTime: number) { - // 简单执行行为树 if (this.behaviorTree && this.isRunning) { this.behaviorTree.tick(deltaTime); } - // 更新UI显示 if (this.showStatusUI) { this.updateStatusUI(); } } - /** - * 设置更新频率 - 已废弃,现在每帧执行 - */ - setTickInterval(interval: number) { - // 方法保留以保持兼容性,但不再有实际作用 - console.warn(`[${this.node.name}] setTickInterval已废弃,行为树现在每帧执行`); - } - /** * 获取黑板 */ diff --git a/extensions/cocos/cocos-ecs/assets/scripts/components/MinerStatusUI.ts b/extensions/cocos/cocos-ecs/assets/scripts/components/MinerStatusUI.ts index 91db877a..769517ff 100644 --- a/extensions/cocos/cocos-ecs/assets/scripts/components/MinerStatusUI.ts +++ b/extensions/cocos/cocos-ecs/assets/scripts/components/MinerStatusUI.ts @@ -31,13 +31,7 @@ export class MinerStatusUI extends Component { this.camera = find('Main Camera')?.getComponent(Camera) || director.getScene()?.getComponentInChildren(Camera); this.canvas = find('Canvas')?.getComponent(Canvas) || director.getScene()?.getComponentInChildren(Canvas); - if (!this.camera) { - console.warn('[MinerStatusUI] 未找到主摄像机'); - } - - if (!this.canvas) { - console.warn('[MinerStatusUI] 未找到Canvas'); - } + if (this.nameLabel && this.followTarget) { this.nameLabel.string = this.followTarget.name; @@ -58,20 +52,17 @@ export class MinerStatusUI extends Component { if (!this.followTarget || !this.camera || !this.canvas) return; const targetWorldPos = this.followTarget.worldPosition.clone(); - targetWorldPos.y += this.yOffset / 100; - - const screenPos = this.camera.worldToScreen(targetWorldPos); - - const canvasTransform = this.canvas.node.getComponent(UITransform); - if (canvasTransform) { - const canvasPos = new Vec3( - screenPos.x - canvasTransform.width / 2, - screenPos.y - canvasTransform.height / 2, - 0 - ); - - this.node.setPosition(canvasPos); + // 根据目标类型设置不同的Y偏移 + if (this.followTarget.name.includes('Warehouse')) { + targetWorldPos.y += 3.0; // 仓库偏移更高 + } else { + targetWorldPos.y += 2.0; // 矿工偏移 } + + // 将世界坐标直接转换为UI坐标 + const uiPos = new Vec3(); + this.camera.convertToUINode(targetWorldPos, this.canvas.node, uiPos); + this.node.setPosition(uiPos); } setFollowTarget(target: Node) { diff --git a/extensions/cocos/cocos-ecs/assets/scripts/components/StatusUIManager.ts b/extensions/cocos/cocos-ecs/assets/scripts/components/StatusUIManager.ts index e9d69b81..eed2eb28 100644 --- a/extensions/cocos/cocos-ecs/assets/scripts/components/StatusUIManager.ts +++ b/extensions/cocos/cocos-ecs/assets/scripts/components/StatusUIManager.ts @@ -16,13 +16,9 @@ export class StatusUIManager extends Component { static createStatusUIForMiner(miner: Node): MinerStatusUI | null { const canvas = find('Canvas') || director.getScene()?.getChildByName('Canvas'); if (!canvas) { - console.error('[StatusUIManager] 未找到Canvas'); return null; } - const minerIndex = this.extractMinerIndex(miner.name); - const yOffset = minerIndex * 20; - const uiRoot = new Node(`${miner.name}_StatusUI`); canvas.addChild(uiRoot); @@ -60,7 +56,6 @@ export class StatusUIManager extends Component { const statusUI = uiRoot.addComponent(MinerStatusUI); statusUI.setFollowTarget(miner); - statusUI.yOffset = 100 + yOffset; const nameNode = new Node('NameLabel'); uiRoot.addChild(nameNode); @@ -238,7 +233,6 @@ export class StatusUIManager extends Component { static createWarehouseUI(warehouse: Node): MinerStatusUI | null { const canvas = find('Canvas') || director.getScene()?.getChildByName('Canvas'); if (!canvas) { - console.error('[StatusUIManager] 未找到Canvas'); return null; } @@ -273,7 +267,6 @@ export class StatusUIManager extends Component { const statusUI = uiRoot.addComponent(MinerStatusUI); statusUI.setFollowTarget(warehouse); - statusUI.yOffset = 150; statusUI.nameLabel = null; statusUI.statusLabel = null; diff --git a/extensions/cocos/cocos-ecs/extensions/behaviour-tree b/extensions/cocos/cocos-ecs/extensions/behaviour-tree index 07270b77..16d1a02d 160000 --- a/extensions/cocos/cocos-ecs/extensions/behaviour-tree +++ b/extensions/cocos/cocos-ecs/extensions/behaviour-tree @@ -1 +1 @@ -Subproject commit 07270b77ffc6c4dc44ce78b7a05cabf26bad702d +Subproject commit 16d1a02d8af40697e9e0bd1c232c8479fd26839f diff --git a/extensions/cocos/cocos-ecs/package-lock.json b/extensions/cocos/cocos-ecs/package-lock.json index 68b5d762..8ef1979d 100644 --- a/extensions/cocos/cocos-ecs/package-lock.json +++ b/extensions/cocos/cocos-ecs/package-lock.json @@ -6,14 +6,15 @@ "": { "name": "cocos-ecs", "dependencies": { - "@esengine/ai": "^2.0.13", + "@esengine/ai": "^2.0.14", "@esengine/ecs-framework": "^2.1.22" } }, "node_modules/@esengine/ai": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/@esengine/ai/-/ai-2.0.13.tgz", - "integrity": "sha512-Iwbdw7UPVEARph/zvq6XL5XIkku3TmdFk/XHxT5aU2Y3RvPNnpd4OwDaranIpjuBL4WkquZx4C/Mw7jh4FNwFg==", + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/@esengine/ai/-/ai-2.0.14.tgz", + "integrity": "sha512-pRv2pAq79l+VcPPHNE7RaYJ9kYvYfZR2beuCyMH6ZgjgDolKYftCd/3KQAJ1LN9fOKvXAQSsa5PHi21ekXuEWg==", + "license": "MIT", "dependencies": { "@esengine/ecs-framework": "^2.1.20" }, diff --git a/extensions/cocos/cocos-ecs/package.json b/extensions/cocos/cocos-ecs/package.json index 0dd710c1..1c1f9cd0 100644 --- a/extensions/cocos/cocos-ecs/package.json +++ b/extensions/cocos/cocos-ecs/package.json @@ -6,6 +6,6 @@ }, "dependencies": { "@esengine/ecs-framework": "^2.1.22", - "@esengine/ai": "^2.0.13" + "@esengine/ai": "^2.0.14" } } \ No newline at end of file diff --git a/thirdparty/BehaviourTree-ai b/thirdparty/BehaviourTree-ai index f3e91b9f..7df0745b 160000 --- a/thirdparty/BehaviourTree-ai +++ b/thirdparty/BehaviourTree-ai @@ -1 +1 @@ -Subproject commit f3e91b9f34eaa41d38a5a284be01597e0376c3b3 +Subproject commit 7df0745b80d52b6b4b3e8befdca7f6193f80f1c2