support multi group for node

This commit is contained in:
codetypes committed 2025-03-19 11:02:32 +08:00
1 parent 9cdc4cee68
commit 7395935e6f
7 files changed
+86 -47

No files matched your search

+1 -1
View File
@@ -357,7 +357,7 @@
},
{
"name": "TestB3",
"type": "Action",
"type": "Action (Client|Server|Test)",
"args": [
{
"name": "time",
+44 -8
View File
@@ -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
View File
@@ -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));
+1 -1
View File
@@ -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();
+1 -1
View File
@@ -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
View File
@@ -3,7 +3,7 @@ import { NodeDef } from "../behavior3/src/behavior3";
declare module "../behavior3/src/behavior3" {
interface NodeDef {
group?: string;
group?: string[];
}
}
+4 -4
View File
@@ -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;
}