化行为树加载

Co-authored-by: Copilot <copilot@github.com>
This commit is contained in:
2026-04-17 21:43:53 +08:00
parent 1de4f9db8d
commit c3a6661d2a
2 changed files with 39 additions and 47 deletions

View File

@@ -13,7 +13,7 @@
<TressCard
ref="treesCardRef"
:scenarioId="currentScenarioId"
:platformId="currentPlatformId"
:treeId="currentTreeId"
@create-tree="handleCreateTree"
@select-tree="handleSelectTree"
/>
@@ -128,6 +128,7 @@ export default defineComponent({
const nodeCommands = ref<NodeCommand[]>([])
const currentScenarioId = ref<number | undefined>();
const currentPlatformId = ref<number | null>(null);
const currentTreeId = ref<number | null>(null);
const fromScenarioPage = ref<boolean>(false);
const {
@@ -326,12 +327,35 @@ export default defineComponent({
selectedModelNode.value = null;
selectedNodeTaskElement.value = null;
loadSubPlatforms(currentPlatformId.value);
console.log('currentBehaviorTree.value: ', tree);
nextTick(() => {
initGraph();
console.log('initGraphTree: ', tree);
});
};
const loadTargetTree = (tree: BehaviorTree) => {
currentTreeId.value = tree.id;
resolveBehaviorTreeGraph(tree.id, tree.xmlContent).then(nodeGraph => {
applyBehaviorTree({
...tree,
graph: nodeGraph,
});
}).catch(error => {
console.error('resolve tree graph error:', error);
message.error('加载行为树图失败');
});
};
const handleCreateTree = () => {
destroyGraph();
selectedModelNode.value = null;
selectedNodeTaskElement.value = null;
subPlatforms.value = []; // 重置下属平台
initGraphConfig();
nextTick(() => {
initGraph();
});
};
@@ -339,15 +363,7 @@ export default defineComponent({
console.info('handleSelectTree', tree);
findOneTreeById(tree.id).then(r => {
if (r.data) {
resolveBehaviorTreeGraph(r.data.id, r.data.xmlContent).then(nodeGraph => {
applyBehaviorTree({
...r.data,
graph: nodeGraph,
});
}).catch(error => {
console.error('resolve tree graph error:', error);
message.error('加载行为树图失败');
});
loadTargetTree(r.data);
} else {
message.error(r.msg ?? '行为树不存在.');
}
@@ -381,18 +397,7 @@ export default defineComponent({
currentScenarioId.value = scenario.id;
};
const handleCreateTree = () => {
destroyGraph();
initGraphConfig();
selectedModelNode.value = null;
selectedNodeTaskElement.value = null;
subPlatforms.value = []; // 重置下属平台
nextTick(() => {
initGraph();
});
};
// 初始化X6画布
const initGraph = () => {
@@ -404,9 +409,7 @@ export default defineComponent({
try {
graph.value = createCanvas(canvas.value);
console.log('画布初始化成功');
if (!currentBehaviorTree.value) {
initGraphConfig();
}
createElements();
graph.value?.on('edge:click', (args: any) => {
@@ -457,22 +460,23 @@ export default defineComponent({
console.info('init');
nextTick(() => {
initGraphConfig();
initGraph();
window.addEventListener('resize', handleResize);
console.log('节点挂载完成');
window.addEventListener('resize', handleResize);
resolveQuery();
if (currentPlatformId.value) {
if (currentPlatformId.value) {
findOneTreeByPlatformId(currentPlatformId.value).then(r => {
if (r.data) {
handleSelectTree(r.data);
loadTargetTree(r.data);
} else {
handleCreateTree();
}
});
} else {
currentPlatformId.value = null;
handleCreateTree();
}
});
@@ -544,6 +548,7 @@ export default defineComponent({
nodeCommands,
currentScenarioId,
currentPlatformId,
currentTreeId,
platforms,
subPlatforms,
scenariosCardRef,

View File

@@ -18,7 +18,7 @@
</div>
<a-list :data-source="behaviorTrees || []" size="small" style="min-height: 25vh">
<template #renderItem="{ item }">
<a-list-item :class="{ 'ks-item-selected': platformId === item.id || selectedId === item.id }" @click="()=> handleSelect(item)">
<a-list-item :class="{ 'ks-item-selected': treeId === item.id }" @click="()=> handleSelect(item)">
<a-flex>
<a-tooltip placement="bottom">
<template #title>
@@ -67,7 +67,7 @@ import { substring } from '@/utils/strings';
export default defineComponent({
props: {
scenarioId: Number as PropType<number | undefined>,
platformId: Number as PropType<number | null>,
treeId: Number as PropType<number | null>,
},
emits: ['select-tree', 'create-tree'],
components: {
@@ -87,7 +87,6 @@ export default defineComponent({
});
const activeKey = ref<number>(1);
const totalTress = ref<number>(0);
const selectedId = ref<number | null>(null);
watch(
() => props.scenarioId,
@@ -99,17 +98,7 @@ export default defineComponent({
}
behaviorTreeQuery.value.pageNum = 1;
behaviorTreeQuery.value.scenarioId = props.scenarioId;
loadTress(() => {
if (props.platformId) {
return;
}
// 默认选中第一个行为树
const selectedTree = behaviorTrees.value[0];
if (selectedTree) {
selectedId.value = selectedTree.id;
emit('select-tree', selectedTree);
}
});
loadTress();
},
{ immediate: true }
);
@@ -152,7 +141,6 @@ export default defineComponent({
];
const handleSelect = (record: BehaviorTree) => {
selectedId.value = record.id;
emit('select-tree', record);
};
@@ -171,7 +159,6 @@ export default defineComponent({
totalTress,
substring,
activeKey,
selectedId,
behaviorTrees,
behaviorTreeQuery,
loadTress,