// 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. 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 }); // 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"; const pre = document.createElement("pre"); pre.style.cssText = "flex:1;margin:0;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; async function tick() { if (!alive) return; try { 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)."; if (atBottom) pre.scrollTop = pre.scrollHeight; } catch (e) { pre.textContent = String(e); } } tick(); const id = setInterval(tick, 1500); return () => { alive = false; clearInterval(id); }; }, }); host.log("Unreal Engine Tools activated"); }