From fb181ef48ad50448564be49d21c6a5ae41ced07b Mon Sep 17 00:00:00 2001 From: Bonchellon <64547270+bonchellon@users.noreply.github.com> Date: Thu, 9 Jul 2026 15:31:33 +0300 Subject: [PATCH] =?UTF-8?q?unreal=201.2.0=20=E2=80=94=20native=20folder-co?= =?UTF-8?q?ntext=20actions=20+=20bottom-dock=20Unreal=20tab=20(icons,=20no?= =?UTF-8?q?=20emoji)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.8 --- plugins/unreal/index.js | 47 +++++++++++++++++++------------------- plugins/unreal/plugin.json | 6 ++--- registry.json | 4 ++-- 3 files changed, 28 insertions(+), 29 deletions(-) diff --git a/plugins/unreal/index.js b/plugins/unreal/index.js index a5c6eba..e40b1d7 100644 --- a/plugins/unreal/index.js +++ b/plugins/unreal/index.js @@ -1,34 +1,32 @@ // Unreal Engine Tools — official plugin. // The core app keeps the build engine (UnrealBuildTool / MSBuild), the build -// overlay and the log reader; this plugin is just the Unreal-facing surface: -// a "Build Solution" action and a live Unreal-log view. Reached through the -// permission-gated `host.ue` bridge. +// overlay and the log reader; this plugin is just the Unreal-facing surface. +// It renders natively: the actions sit in the working-folder right-click menu +// with the host's Unreal + hammer icons, and the log is a bottom-dock tab — +// exactly where these lived before, just delivered as a plugin. Reached through +// the permission-gated `host.ue` bridge. export function activate(host) { const ue = host.ue; if (!ue) { host.log("no ue bridge — plugin.json needs the \"ue\" permission"); return; } - // Build the game target (UnrealBuildTool for the game module, MSBuild for plain C++). - host.ui.addMenuItem("🔨 Build Solution (Unreal)", () => { - if (!ue.hasProject()) { host.flash("No Unreal project in the current working folder.", true); return; } - ue.build(); // triggers the core build flow + overlay - }); + // Right-click the working folder → Launch / Build, shown only on a UE project. + // Prefer the native folder-context slot (host ≥ 0.3.7); fall back to the top + // menu on older hosts so the actions are always reachable. + const addAction = (label, run, icon) => { + if (host.ui.addFolderContextItem) host.ui.addFolderContextItem(label, run, { icon, visible: () => ue.hasProject() }); + else host.ui.addMenuItem(label, () => { if (!ue.hasProject()) { host.flash("No Unreal project in the current working folder.", true); return; } run(); }, { icon }); + }; + addAction("Launch Unreal Engine", () => ue.launch(), "ue"); + addAction("Build Solution (.sln)", () => ue.build(), "hammer"); - // Launch the Unreal editor by opening the detected .uproject. - host.ui.addMenuItem("🚀 Launch Unreal Engine", () => { - if (!ue.hasProject()) { host.flash("No Unreal project in the current working folder.", true); return; } - ue.launch(); - }); - - // Live Unreal editor log (tails Saved/Logs). Opens from the Actions menu. - host.ui.addView({ - id: "unreal-log", - title: "Unreal Log", - render: (el) => { - el.style.cssText = "display:flex;flex-direction:column;height:100%;min-height:340px"; + // Bottom-dock "Unreal" tab — tails the editor log (Saved/Logs), refreshing live. + // Native dock panel on host ≥ 0.3.7; a modal view as a fallback on older hosts. + const mountLog = (el) => { + el.style.cssText = "display:flex;flex-direction:column;height:100%"; const pre = document.createElement("pre"); pre.style.cssText = - "flex:1;margin:0;overflow:auto;white-space:pre-wrap;word-break:break-word;" + + "flex:1;margin:0;padding:10px 14px;overflow:auto;white-space:pre-wrap;word-break:break-word;" + "font:11.5px/1.6 var(--mono,ui-monospace,monospace);color:var(--muted,#9a9aa8)"; el.appendChild(pre); let alive = true; @@ -38,15 +36,16 @@ export function activate(host) { if (!ue.hasProject()) { pre.textContent = "No Unreal project in the current working folder."; return; } const atBottom = pre.scrollTop + pre.clientHeight >= pre.scrollHeight - 30; const txt = await ue.readLog(200000); - pre.textContent = txt || "No Unreal log yet. It appears when the editor writes to Saved/Logs (i.e. while Unreal is running)."; + pre.textContent = txt || "No Unreal log yet. It shows here when the editor writes to Saved/Logs — i.e. while Unreal is running."; if (atBottom) pre.scrollTop = pre.scrollHeight; } catch (e) { pre.textContent = String(e); } } tick(); const id = setInterval(tick, 1500); return () => { alive = false; clearInterval(id); }; - }, - }); + }; + if (host.ui.addDockPanel) host.ui.addDockPanel({ id: "unreal", title: "Unreal", icon: "ue", render: mountLog }); + else host.ui.addView({ id: "unreal-log", title: "Unreal Log", render: mountLog }); host.log("Unreal Engine Tools activated"); } diff --git a/plugins/unreal/plugin.json b/plugins/unreal/plugin.json index eece37c..58ad172 100644 --- a/plugins/unreal/plugin.json +++ b/plugins/unreal/plugin.json @@ -1,12 +1,12 @@ { "id": "unreal", "name": "Unreal Engine Tools", - "version": "1.1.0", + "version": "1.2.0", "author": "Exbyte Studios", - "description": "Build the game (.sln / UnrealBuildTool), launch the editor, and tail the Unreal log. Enable this on Unreal Engine projects.", + "description": "Build the game (.sln / UnrealBuildTool), launch the editor, and tail the Unreal log. Actions live in the working-folder right-click menu; the log is a bottom-dock tab. Enable on Unreal Engine projects.", "entry": "index.js", "minAppVersion": "0.3.6", "permissions": ["ue"], "defaultEnabled": true, - "contributes": { "menu": true, "views": ["unreal-log"] } + "contributes": { "folderContext": true, "dock": ["unreal"] } } diff --git a/registry.json b/registry.json index 72ed961..7a257dd 100644 --- a/registry.json +++ b/registry.json @@ -5,9 +5,9 @@ { "id": "unreal", "name": "Unreal Engine Tools", - "version": "1.1.0", + "version": "1.2.0", "author": "Exbyte Studios", - "description": "Build the game (.sln / UnrealBuildTool), launch the editor, and tail the Unreal log. For Unreal Engine projects.", + "description": "Build (.sln), launch the editor, tail the log. Native right-click actions + bottom-dock tab. For Unreal Engine projects.", "permissions": ["ue"], "minAppVersion": "0.3.6", "official": true,