From fb889a01c80a91755ea2dd99b3d4e086f8352c5d Mon Sep 17 00:00:00 2001 From: codetypes Date: Wed, 12 Mar 2025 15:23:18 +0800 Subject: [PATCH] customize first id --- .vscode/settings.json | 12 ++++---- behavior3editor.code-workspace | 14 --------- pre-commit.ts | 2 +- public/locales/en.json | 1 + public/locales/zh.json | 1 + src/components/editor.tsx | 50 ++++++++++++++++++++----------- src/components/inspector.tsx | 5 ++++ src/contexts/workspace-context.ts | 6 +++- src/misc/b3type.ts | 1 + src/misc/b3util.ts | 5 ++-- 10 files changed, 56 insertions(+), 41 deletions(-) delete mode 100644 behavior3editor.code-workspace diff --git a/.vscode/settings.json b/.vscode/settings.json index 1e3e2cd..36b8be7 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -3,11 +3,13 @@ "typescript.tsc.autoDetect": "off", "json.schemas": [ { - "fileMatch": [ - "/*electron-builder.json5", - "/*electron-builder.json" - ], + "fileMatch": ["/*electron-builder.json5", "/*electron-builder.json"], "url": "https://json.schemastore.org/electron-builder" } - ] + ], + "editor.formatOnSave": true, + "editor.codeActionsOnSave": { + "source.organizeImports": "explicit" + }, + "editor.defaultFormatter": "esbenp.prettier-vscode" } diff --git a/behavior3editor.code-workspace b/behavior3editor.code-workspace deleted file mode 100644 index d103805..0000000 --- a/behavior3editor.code-workspace +++ /dev/null @@ -1,14 +0,0 @@ -{ - "folders": [ - { - "path": "." - } - ], - "settings": { - "editor.formatOnSave": true, - "editor.codeActionsOnSave": { - "source.organizeImports": "explicit" - }, - "editor.defaultFormatter": "esbenp.prettier-vscode" - } -} diff --git a/pre-commit.ts b/pre-commit.ts index d68be85..5eab657 100644 --- a/pre-commit.ts +++ b/pre-commit.ts @@ -20,5 +20,5 @@ else exit 1 fi `; -fs.writeFileSync(".git/hooks/pre-commit", hooks); +fs.writeFileSync(".git/hooks/pre-commit", hooks.replace(/^[\n\r]+/, "")); fs.chmodSync(".git/hooks/pre-commit", 0o755); diff --git a/public/locales/en.json b/public/locales/en.json index da3855e..fef1539 100644 --- a/public/locales/en.json +++ b/public/locales/en.json @@ -76,6 +76,7 @@ "tree.name": "Tree name", "tree.desc": "Tree desc", "tree.export": "Export", + "tree.firstid": "First id", "regnode.input": "Input: ", "regnode.output": "Output: ", diff --git a/public/locales/zh.json b/public/locales/zh.json index 2da0f6a..4a6de34 100644 --- a/public/locales/zh.json +++ b/public/locales/zh.json @@ -76,6 +76,7 @@ "tree.name": "行为树", "tree.desc": "说明", "tree.export": "导出", + "tree.firstid": "起始标识", "regnode.input": "输入:", "regnode.output": "输出:", diff --git a/src/components/editor.tsx b/src/components/editor.tsx index e707a05..c8e912a 100644 --- a/src/components/editor.tsx +++ b/src/components/editor.tsx @@ -192,7 +192,7 @@ export const Editor: FC = ({ onUpdate: updateState, data: editor, . const onSearchChange = (option: FilterOption) => { option.results.length = 0; - filterNodes(option, findDataById("1")); + filterNodes(option, editor.data); setFilterOption({ ...option, }); @@ -210,7 +210,7 @@ export const Editor: FC = ({ onUpdate: updateState, data: editor, . const updateSearchState = () => { const option = { ...filterOption }; option.results.length = 0; - filterNodes(option, findDataById("1")); + filterNodes(option, editor.data); setFilterOption({ ...option, }); @@ -268,7 +268,20 @@ export const Editor: FC = ({ onUpdate: updateState, data: editor, . }; const findDataById = (id: string) => { - return editor.graph.findDataById(id) as TreeGraphData; + const traverse = (node: TreeGraphData): TreeGraphData | undefined => { + if (node.id === id) { + return node; + } + if (node.children) { + for (const child of node.children) { + const result = traverse(child); + if (result) { + return result; + } + } + } + }; + return traverse(editor.data) as TreeGraphData; }; const includeString = (content: string | undefined, option: FilterOption) => { @@ -363,11 +376,10 @@ export const Editor: FC = ({ onUpdate: updateState, data: editor, . }; const refresh = () => { - const rootData = findDataById("1"); - const rootNode = b3util.createNode(rootData); + const rootNode = b3util.createNode(editor.data); editor.modifiedTime = fs.statSync(editor.path).mtimeMs; editor.data = createTreeData(rootNode); - editor.autoId = b3util.refreshTreeDataId(editor.data); + editor.autoId = b3util.refreshTreeDataId(editor.data, editor.firstid); editor.graph.changeData(editor.data); editor.graph.layout(); restoreViewport(); @@ -376,7 +388,7 @@ export const Editor: FC = ({ onUpdate: updateState, data: editor, . const reload = () => { const file = readJson(editor.path) as TreeModel; editor.data = createTreeData(file.root); - editor.autoId = b3util.refreshTreeDataId(editor.data); + editor.autoId = b3util.refreshTreeDataId(editor.data, editor.firstid); editor.unsave = false; updateState(); if (editor.graph) { @@ -388,8 +400,7 @@ export const Editor: FC = ({ onUpdate: updateState, data: editor, . const checkSubtree = () => { if (editor.graph) { - const data = findDataById("1"); - if (isSubtreeUpdated(data)) { + if (isSubtreeUpdated(editor.data)) { refresh(); pushHistory(); onChange(); @@ -430,6 +441,7 @@ export const Editor: FC = ({ onUpdate: updateState, data: editor, . return; } b3util.copyFromNode(data, newNode); + data.def = b3util.getNodeDefs().get(data.name)!; data.size = calcTreeDataSize(data); if (oldNode.path !== newNode.path) { refresh(); @@ -447,6 +459,10 @@ export const Editor: FC = ({ onUpdate: updateState, data: editor, . if (editor.desc !== editTree.data.desc || editor.export !== editTree.data.export) { editor.desc = editTree.data.desc || ""; editor.export = editTree.data.export !== false; + if (editor.data.firstid !== editTree.data.firstid) { + editor.firstid = editTree.data.firstid ?? 1; + refresh(); + } onChange(); } }; @@ -480,7 +496,7 @@ export const Editor: FC = ({ onUpdate: updateState, data: editor, . const pushHistory = () => { editor.historyStack.length = ++editor.historyIndex; - editor.historyStack.push(b3util.createNode(findDataById("1"))); + editor.historyStack.push(b3util.createNode(editor.data)); }; const copyNode = () => { @@ -552,7 +568,7 @@ export const Editor: FC = ({ onUpdate: updateState, data: editor, . updateGrahp(); } else { editor.data = createTreeData(JSON.parse(str), editor.selectedId); - editor.autoId = b3util.refreshTreeDataId(editor.data); + editor.autoId = b3util.refreshTreeDataId(editor.data, editor.firstid); editor.graph.changeData(editor.data); editor.graph.render(); editor.graph.layout(); @@ -626,7 +642,7 @@ export const Editor: FC = ({ onUpdate: updateState, data: editor, . const useStackData = (data: NodeModel) => { editor.data = createTreeData(data); - editor.autoId = b3util.refreshTreeDataId(editor.data); + editor.autoId = b3util.refreshTreeDataId(editor.data, editor.firstid); editor.graph.changeData(editor.data); editor.graph.layout(); restoreViewport(); @@ -663,12 +679,12 @@ export const Editor: FC = ({ onUpdate: updateState, data: editor, . const save = () => { if (editor.unsave || !fs.existsSync(editor.path)) { const path = editor.path; - const data = findDataById("1"); - editor.autoId = b3util.refreshTreeDataId(data); - const root = b3util.createFileData(data); + editor.autoId = b3util.refreshTreeDataId(editor.data, editor.firstid); + const root = b3util.createFileData(editor.data); const treeModel = { name: Path.basenameWithoutExt(path), root, + firstid: editor.firstid ?? 1, export: editor.export, desc: editor.desc, } as TreeModel; @@ -676,8 +692,6 @@ export const Editor: FC = ({ onUpdate: updateState, data: editor, . fs.writeFileSync(path, JSON.stringify(treeModel, null, 2)); workspace.updateFileMeta(editor); editor.unsave = false; - editor.data = createTreeData(root); - editor.autoId = b3util.refreshTreeDataId(editor.data); editor.graph.changeData(editor.data); editor.graph.layout(); restoreViewport(); @@ -823,7 +837,7 @@ export const Editor: FC = ({ onUpdate: updateState, data: editor, . const data = findDataById(e.item.getID()); data.output?.forEach((v) => v && highlight.push(v)); } - const changed = findHightlight(findDataById("1"), highlight); + const changed = findHightlight(editor.data, highlight); changed.forEach((v) => { const item = editor.graph.findById(v.id); item.draw(); diff --git a/src/components/inspector.tsx b/src/components/inspector.tsx index 1d4201d..5882c5f 100644 --- a/src/components/inspector.tsx +++ b/src/components/inspector.tsx @@ -58,6 +58,7 @@ const TreeInspector: FC = () => { form.setFieldValue("name", data.name); form.setFieldValue("desc", data.desc); form.setFieldValue("export", data.export !== false); + form.setFieldValue("firstid", data.firstid); }, [workspace.editingTree]); const finish = (values: any) => { @@ -66,6 +67,7 @@ const TreeInspector: FC = () => { name: values.name, desc: values.desc || undefined, export: values.export, + firstid: Number(values.firstid), }, } as EditTree); }; @@ -86,6 +88,9 @@ const TreeInspector: FC = () => {