114 lines
2.9 KiB
TypeScript
114 lines
2.9 KiB
TypeScript
import { TreeGraphData } from "@antv/g6/lib/types"
|
|
import { BehaviorNodeModel, GraphNodeModel } from "./BehaviorTreeModel";
|
|
import Settings from "../main-process/Settings";
|
|
import { remote } from "electron";
|
|
|
|
export const cloneNodeData = (nodeData: GraphNodeModel) => {
|
|
const newData: GraphNodeModel = {
|
|
id: nodeData.id + "new",
|
|
name: nodeData.name,
|
|
conf: nodeData.conf,
|
|
}
|
|
return newData;
|
|
}
|
|
|
|
export const refreshNodeId = (nodeData: GraphNodeModel, id?: number) => {
|
|
if (!id) {
|
|
id = 1;
|
|
}
|
|
nodeData.id = (id++).toString();
|
|
if (nodeData.children) {
|
|
nodeData.children.forEach(child => {
|
|
id = refreshNodeId(child, id);
|
|
})
|
|
}
|
|
return id;
|
|
}
|
|
|
|
export const calcTreeNodeSize = (treeNode: GraphNodeModel) => {
|
|
var height = 40;
|
|
const updateHeight = (obj: any) => {
|
|
if (Array.isArray(obj) || (obj && Object.keys(obj).length > 0)) {
|
|
height += 25;
|
|
}
|
|
}
|
|
updateHeight(treeNode.conf.args);
|
|
updateHeight(treeNode.conf.input);
|
|
updateHeight(treeNode.conf.output);
|
|
return [200, height];
|
|
}
|
|
|
|
export const createTreeData = (bNode: BehaviorNodeModel, settings: Settings) => {
|
|
const treeData: GraphNodeModel = {
|
|
id: bNode.id.toString(),
|
|
name: bNode.name,
|
|
desc: bNode.desc,
|
|
args: bNode.args,
|
|
input: bNode.input,
|
|
output: bNode.output,
|
|
conf: settings.getNodeConf(bNode.name),
|
|
}
|
|
treeData.size = calcTreeNodeSize(treeData);
|
|
if (bNode.children) {
|
|
treeData.children = [];
|
|
bNode.children.forEach(child => {
|
|
treeData.children.push(createTreeData(child, settings));
|
|
})
|
|
}
|
|
calcTreeNodeSize(treeData);
|
|
return treeData;
|
|
}
|
|
|
|
export const createFileData = (gNode: GraphNodeModel) => {
|
|
const nodeData: BehaviorNodeModel = {
|
|
id: Number(gNode.id),
|
|
name: gNode.name,
|
|
desc: gNode.desc || undefined,
|
|
args: gNode.args || undefined,
|
|
input: gNode.input || undefined,
|
|
output: gNode.output || undefined,
|
|
}
|
|
if (gNode.children) {
|
|
nodeData.children = [];
|
|
gNode.children.forEach(child => {
|
|
nodeData.children.push(createFileData(child));
|
|
})
|
|
}
|
|
return nodeData;
|
|
}
|
|
|
|
export const findParent = (node: TreeGraphData, id: string): TreeGraphData | null => {
|
|
if (node.children) {
|
|
for (let child of node.children) {
|
|
if (child.id == id) {
|
|
return node;
|
|
} else {
|
|
let parent = findParent(child, id);
|
|
if (parent) {
|
|
return parent;
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
|
|
export const findFromAllChildren = (node: TreeGraphData, id: string): TreeGraphData | null => {
|
|
if (node.id == id) {
|
|
return node;
|
|
}
|
|
if (node.children) {
|
|
for (let child of node.children) {
|
|
let found = findFromAllChildren(child, id);
|
|
if (found) {
|
|
return found;
|
|
}
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
|
|
export const getRemoteSettings = () => {
|
|
return remote.getGlobal("settings") as Settings;
|
|
} |