support multi group for node
This commit is contained in:
1 parent
9cdc4cee68
commit
7395935e6f
7 files changed
+85
-46
No files matched your search
@@ -357,7 +357,7 @@
|
||||
},
|
||||
{
|
||||
"name": "TestB3",
|
||||
"type": "Action",
|
||||
"type": "Action (Client|Server|Test)",
|
||||
"args": [
|
||||
{
|
||||
"name": "time",
|
||||
|
||||
@@ -3,8 +3,13 @@
|
||||
"desc": "",
|
||||
"firstid": 1,
|
||||
"export": true,
|
||||
"group": ["Client"],
|
||||
"import": ["vars/declare-core.json", "vars/declare-vars.json"],
|
||||
"group": [
|
||||
"Client"
|
||||
],
|
||||
"import": [
|
||||
"vars/declare-core.json",
|
||||
"vars/declare-vars.json"
|
||||
],
|
||||
"declvar": [
|
||||
{
|
||||
"name": "target",
|
||||
@@ -28,12 +33,16 @@
|
||||
"id": 4,
|
||||
"name": "FindEnemy",
|
||||
"args": {},
|
||||
"output": ["target1"]
|
||||
"output": [
|
||||
"target1"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"name": "Attack",
|
||||
"input": ["target1"]
|
||||
"input": [
|
||||
"target1"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
@@ -45,19 +54,46 @@
|
||||
{
|
||||
"id": 7,
|
||||
"name": "MoveToTarget",
|
||||
"input": ["target"]
|
||||
"input": [
|
||||
"target"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 8,
|
||||
"name": "Clear",
|
||||
"output": ["test"],
|
||||
"output": [
|
||||
"test"
|
||||
],
|
||||
"children": [
|
||||
{
|
||||
"id": 9,
|
||||
"name": "Idle"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 10,
|
||||
"name": "TestB3",
|
||||
"args": {
|
||||
"time": 1,
|
||||
"open": true,
|
||||
"check": "1",
|
||||
"name": "1",
|
||||
"status": "FAILURE"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 11,
|
||||
"name": "TestB3",
|
||||
"args": {
|
||||
"time": 1,
|
||||
"open": true,
|
||||
"check": "1",
|
||||
"name": "1",
|
||||
"status": "RUNNING"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"version": "1.8.0"
|
||||
}
|
||||
+34
-31
@@ -324,44 +324,47 @@ export const Explorer: FC = () => {
|
||||
},
|
||||
};
|
||||
workspace.nodeDefs.forEach((nodeDef) => {
|
||||
let catalog = data.children?.find((nt) => nt.title === nodeDef.type);
|
||||
if (!catalog) {
|
||||
const type = getNodeType(nodeDef);
|
||||
catalog = {
|
||||
title: nodeDef.type,
|
||||
path: `nodeTree.catalog.${nodeDef.type}`,
|
||||
children: [],
|
||||
icon: (
|
||||
(nodeDef.group || []).forEach((g, idx) => {
|
||||
const typeGroup = !g ? nodeDef.type : nodeDef.type.replace(/\(([\w|]+)\)/, `(${g})`);
|
||||
let catalog = data.children?.find((nt) => nt.title === typeGroup);
|
||||
if (!catalog) {
|
||||
const type = getNodeType(nodeDef);
|
||||
catalog = {
|
||||
title: typeGroup,
|
||||
path: `nodeTree.catalog.${typeGroup}`,
|
||||
children: [],
|
||||
icon: (
|
||||
<Flex justify="center" align="center" style={{ height: "100%" }}>
|
||||
<img
|
||||
className="b3-node-icon"
|
||||
style={{ width: "13px", height: "13px", color: "white" }}
|
||||
src={`./icons/${type}.svg`}
|
||||
/>
|
||||
</Flex>
|
||||
),
|
||||
};
|
||||
data.children?.push(catalog);
|
||||
}
|
||||
catalog.children?.push({
|
||||
title: `${nodeDef.name}(${nodeDef.desc})`,
|
||||
isLeaf: true,
|
||||
def: nodeDef,
|
||||
path: `${nodeDef.name} ${idx}`,
|
||||
icon: nodeDef.icon ? (
|
||||
<Flex justify="center" align="center" style={{ height: "100%" }}>
|
||||
<img
|
||||
className="b3-node-icon"
|
||||
key={catalog.title}
|
||||
style={{ width: "13px", height: "13px", color: "white" }}
|
||||
src={`./icons/${type}.svg`}
|
||||
src={`file:///${workspace.workdir}/${nodeDef.icon}`}
|
||||
/>
|
||||
</Flex>
|
||||
) : (
|
||||
<Flex justify="center" align="center" style={{ height: "100%" }}>
|
||||
<BsBoxFill style={{ width: "12px", height: "12px", color: "white" }} />{" "}
|
||||
</Flex>
|
||||
),
|
||||
};
|
||||
data.children?.push(catalog);
|
||||
}
|
||||
catalog.children?.push({
|
||||
title: `${nodeDef.name}(${nodeDef.desc})`,
|
||||
isLeaf: true,
|
||||
def: nodeDef,
|
||||
path: `${nodeDef.name}`,
|
||||
icon: nodeDef.icon ? (
|
||||
<Flex justify="center" align="center" style={{ height: "100%" }}>
|
||||
<img
|
||||
className="b3-node-icon"
|
||||
key={catalog.title}
|
||||
style={{ width: "13px", height: "13px", color: "white" }}
|
||||
src={`file:///${workspace.workdir}/${nodeDef.icon}`}
|
||||
/>
|
||||
</Flex>
|
||||
) : (
|
||||
<Flex justify="center" align="center" style={{ height: "100%" }}>
|
||||
<BsBoxFill style={{ width: "12px", height: "12px", color: "white" }} />{" "}
|
||||
</Flex>
|
||||
),
|
||||
});
|
||||
});
|
||||
});
|
||||
data.children?.sort((a, b) => a.title.localeCompare(b.title));
|
||||
|
||||
@@ -765,7 +765,7 @@ const NodeInspector: FC = () => {
|
||||
rules={[
|
||||
{
|
||||
validator() {
|
||||
if (def.group && !usingGroups[def.group]) {
|
||||
if (def.group && !def.group.some((g) => usingGroups[g])) {
|
||||
return Promise.reject(new Error(t("node.invalidGroup", { group: def.group })));
|
||||
}
|
||||
return Promise.resolve();
|
||||
|
||||
@@ -150,7 +150,7 @@ G6.registerNode(
|
||||
!nodeDefs.has(data.name) ||
|
||||
(data.path && !data.children?.length) ||
|
||||
!checkTreeData(data) ||
|
||||
(nodeDef.group && !usingGroups[nodeDef.group]) ||
|
||||
(nodeDef.group && !nodeDef.group.some((g) => usingGroups[g])) ||
|
||||
(usingVars &&
|
||||
(data.input?.some((v) => v && usingVars?.[v] === undefined) ||
|
||||
data.output?.some((v) => v && usingVars?.[v] === undefined) ||
|
||||
|
||||
+1
-1
@@ -3,7 +3,7 @@ import { NodeDef } from "../behavior3/src/behavior3";
|
||||
|
||||
declare module "../behavior3/src/behavior3" {
|
||||
interface NodeDef {
|
||||
group?: string;
|
||||
group?: string[];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+4
-4
@@ -52,10 +52,10 @@ export const initWorkdir = (path: string, handler: typeof alertError) => {
|
||||
for (const v of nodeDefData) {
|
||||
nodeDefs.set(v.name, v);
|
||||
|
||||
const group = v.type.match(/\((\w+)\)/)?.[1];
|
||||
const group = v.type.match(/\(([\w|]+)\)/)?.[1];
|
||||
if (group) {
|
||||
v.group = group;
|
||||
groups.add(group);
|
||||
v.group = group.split("|");
|
||||
v.group.forEach((g) => groups.add(g));
|
||||
}
|
||||
}
|
||||
groupDefs = Array.from(groups).sort();
|
||||
@@ -299,7 +299,7 @@ export const checkNodeData = (data: NodeModel | null | undefined) => {
|
||||
let hasError = false;
|
||||
|
||||
if (conf.group) {
|
||||
if (!usingGroups[conf.group]) {
|
||||
if (!conf.group.some((g) => usingGroups[g])) {
|
||||
error(data, `node group '${conf.group}' is not enabled`);
|
||||
hasError = true;
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user