From b94b2afc55416be6d829a39cec0e24b20176a197 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20L=C3=BCbe=C3=9F?= Date: Sat, 9 Aug 2025 23:40:31 +0200 Subject: [PATCH] Dev settings for using ScriptCore as either dll or csproj --- GlitchyEditor/src/EditorLayer.bf | 13 ++++++- GlitchyEditor/src/EditorSettings.bf | 22 +++++++++++ GlitchyEditor/src/Project.bf | 39 ++++++++++--------- GlitchyEditor/src/SettingsWindow.bf | 2 +- GlitchyEngine/src/Application.bf | 3 ++ GlitchyEngine/src/Events/ApplicationEvent.bf | 20 ++++++++++ GlitchyEngine/src/Events/Event.bf | 2 +- GlitchyEngine/src/Extension/System/IO/Path.bf | 7 ++++ GlitchyEngine/src/Scripting/ScriptEngine.bf | 2 + 9 files changed, 88 insertions(+), 22 deletions(-) diff --git a/GlitchyEditor/src/EditorLayer.bf b/GlitchyEditor/src/EditorLayer.bf index 4dbda7e..05d575e 100644 --- a/GlitchyEditor/src/EditorLayer.bf +++ b/GlitchyEditor/src/EditorLayer.bf @@ -63,8 +63,6 @@ namespace GlitchyEditor RenderTargetGroup _editorViewportTarget ~ _.ReleaseRef(); RenderTargetGroup _gameViewportTarget ~ _.ReleaseRef(); - ProjectUserSettings _projectUserSettings; - EditorCamera _camera ~ _.Dispose(); EditorIcons _editorIcons ~ _.ReleaseRef(); @@ -1549,6 +1547,7 @@ namespace GlitchyEditor dispatcher.Dispatch(scope (e) => OnKeyPressed(e)); dispatcher.Dispatch(scope (e) => OnMouseScrolled(e)); dispatcher.Dispatch(scope (e) => OnDragDrop(e)); + dispatcher.Dispatch(scope (e) => OnSettingsApplied(e)); } private bool OnWindowResize(WindowResizeEvent e) @@ -1726,5 +1725,15 @@ namespace GlitchyEditor } #endregion + + bool OnSettingsApplied(SettingsAppliedEvent settingsAppliedEvent) + { +#if DEBUG + // In DEBUG we can change whether we use ScriptCore as .dll or .csproj + _currentProject?.FixupScriptCorePath(); +#endif + + return false; + } } } diff --git a/GlitchyEditor/src/EditorSettings.bf b/GlitchyEditor/src/EditorSettings.bf index e76ec0f..73ba5e1 100644 --- a/GlitchyEditor/src/EditorSettings.bf +++ b/GlitchyEditor/src/EditorSettings.bf @@ -10,6 +10,11 @@ namespace GlitchyEngine { extension Settings { +#if DEBUG + [SettingContainer, BonInclude] + public readonly DevSettings DevSettings = new .() ~ delete _; +#endif + [SettingContainer, BonInclude] public readonly EditorSettings EditorSettings = new .() ~ delete _; @@ -18,6 +23,9 @@ namespace GlitchyEngine protected override void RegisterEventListeners() { +#if DEBUG + OnApplySettings.Add(new (s, e) => DevSettings.Apply()); +#endif OnApplySettings.Add(new (s, e) => EditorSettings.Apply()); OnApplySettings.Add(new (s, e) => ScriptSettings.Apply()); } @@ -26,6 +34,20 @@ namespace GlitchyEngine namespace GlitchyEditor; +#if DEBUG +[Reflect] +class DevSettings +{ + [Setting("Dev", "Use ScriptCore csproj", "If enabled the Editor will include the csproj of the ScriptCore instead of the compiled dll."), BonInclude] + public bool UseScriptCoreDll = true; + + public void Apply() + { + + } +} +#endif + [Reflect] enum ScriptIde { diff --git a/GlitchyEditor/src/Project.bf b/GlitchyEditor/src/Project.bf index 4445b9e..59e9267 100644 --- a/GlitchyEditor/src/Project.bf +++ b/GlitchyEditor/src/Project.bf @@ -71,6 +71,13 @@ class Project { PathInProject(outTarget, scope $"{Name}.csproj"); } + + private static void GetScriptCoreProjectFilePath(String outTarget) + { + Directory.GetCurrentDirectory(outTarget); + Path.Combine(outTarget, "../ScriptCore/ScriptCore.csproj"); + Path.ToActualPath(outTarget); + } /// Loads or creates the user specific settings for this project. private void InitUserSettings() @@ -266,21 +273,8 @@ class Project return project; } - -#if DEBUG - static bool referenceScriptCoreProject = true; -#else - static bool referenceScriptCoreProject = false; -#endif - - private static void GetScriptCoreProjectFilePath(String outTarget) - { - Directory.GetCurrentDirectory(outTarget); - Path.Combine(outTarget, "../ScriptCore/ScriptCore.csproj"); - } - /// If necessary adds or removes the reference to ScriptCore.csproj from the solution (.slnx) file. - private Result FixupScriptSolutionFile() + private Result FixupScriptSolutionFile(bool referenceScriptCoreProject) { String solutionPath = scope .(); GetPathToScriptSolutionFile(solutionPath); @@ -345,7 +339,7 @@ class Project } /// If necessary adds or removes the reference to ScriptCore.dll from the project (.csproj) file. - private Result FixupScriptProjectFile() + private Result FixupScriptProjectFile(bool referenceScriptCoreProject) { String csprojPath = scope .(); GetPathToScriptProjectFile(csprojPath); @@ -401,6 +395,7 @@ class Project String scriptCoreProjectPath = scope .(); Directory.GetCurrentDirectory(scriptCoreProjectPath); Path.Combine(scriptCoreProjectPath, "../ScriptCore/ScriptCore.csproj"); + Path.ToActualPath(scriptCoreProjectPath); scriptCoreProjectReference.SetAttribute("Include", scriptCoreProjectPath); scriptCoreProjectReference.SetAttribute("OutputItemType", "Analyzer"); @@ -437,6 +432,7 @@ class Project String pathToScriptCoreDll = scope .(); Directory.GetCurrentDirectory(pathToScriptCoreDll); Path.Combine(pathToScriptCoreDll, ScriptEngine.ScriptCorePath); + Path.ToActualPath(pathToScriptCoreDll); if (!File.Exists(pathToScriptCoreDll)) { @@ -459,11 +455,18 @@ class Project return .Ok; } - private Result FixupScriptCorePath() + /// Fixes the references to ScriptCore in the script-project and solution file. + public Result FixupScriptCorePath() { - Try!(FixupScriptSolutionFile()); + bool referenceScriptCoreProject = false; - Try!(FixupScriptProjectFile()); +#if DEBUG + Settings settings = Application.Instance.Settings; + referenceScriptCoreProject = settings.DevSettings.UseScriptCoreDll; +#endif + + Try!(FixupScriptSolutionFile(referenceScriptCoreProject)); + Try!(FixupScriptProjectFile(referenceScriptCoreProject)); return .Ok; } diff --git a/GlitchyEditor/src/SettingsWindow.bf b/GlitchyEditor/src/SettingsWindow.bf index fec1330..a6dbc1d 100644 --- a/GlitchyEditor/src/SettingsWindow.bf +++ b/GlitchyEditor/src/SettingsWindow.bf @@ -59,7 +59,7 @@ namespace GlitchyEditor { _open = false; - _settings = Application.Get().Settings; + _settings = Application.Instance.Settings; Create(); } diff --git a/GlitchyEngine/src/Application.bf b/GlitchyEngine/src/Application.bf index 143fbd7..e96103d 100644 --- a/GlitchyEngine/src/Application.bf +++ b/GlitchyEngine/src/Application.bf @@ -84,6 +84,9 @@ namespace GlitchyEngine #endif GlitchyEngine.Settings.Load(); + Settings.OnApplySettings.Add(new (s, e) => { + OnEvent(scope SettingsAppliedEvent()); + }); Settings.Apply(); } diff --git a/GlitchyEngine/src/Events/ApplicationEvent.bf b/GlitchyEngine/src/Events/ApplicationEvent.bf index 32040b6..99bd9c8 100644 --- a/GlitchyEngine/src/Events/ApplicationEvent.bf +++ b/GlitchyEngine/src/Events/ApplicationEvent.bf @@ -129,4 +129,24 @@ namespace GlitchyEngine.Events strBuffer.AppendF("WindowDeactivatedEvent"); } } + + public class SettingsAppliedEvent : Event, IEvent + { + public override EventType EventType => .SettingsApplied; + + public override StringView Name => "SettingsApplied"; + + public override EventCategory Category => .Application; + + public static EventType StaticType => .SettingsApplied; + + public this() + { + } + + public override void ToString(String strBuffer) + { + strBuffer.AppendF("SettingsAppliedEvent"); + } + } } diff --git a/GlitchyEngine/src/Events/Event.bf b/GlitchyEngine/src/Events/Event.bf index babb84e..4db9da5 100644 --- a/GlitchyEngine/src/Events/Event.bf +++ b/GlitchyEngine/src/Events/Event.bf @@ -5,7 +5,7 @@ namespace GlitchyEngine.Events { None = 0, WindowClose, WindowResize, WindowFocus, WindowLostFocus, WindowMoved, WindowActivated, WindowDeactivated, - AppTick, AppUpdate, AppRender, + AppTick, AppUpdate, AppRender, SettingsApplied, KeyPressed, KeyReleased, KeyTyped, MouseButtonPressed, MouseButtonReleased, MouseMoved, MouseScrolled } diff --git a/GlitchyEngine/src/Extension/System/IO/Path.bf b/GlitchyEngine/src/Extension/System/IO/Path.bf index 3057d14..12ee130 100644 --- a/GlitchyEngine/src/Extension/System/IO/Path.bf +++ b/GlitchyEngine/src/Extension/System/IO/Path.bf @@ -35,6 +35,13 @@ extension Path path.Remove(0, 1); } + public static void ToActualPath(String path) + { + String tmp = scope .(path); + path.Clear(); + Path.GetActualPathName(tmp, path); + } + // Compared to the original Combine, this one makes sure we don't add multiple seperators. Also makes sure, the path contains only the main Separator char. new public static void Combine(String target, params StringView[] components) { diff --git a/GlitchyEngine/src/Scripting/ScriptEngine.bf b/GlitchyEngine/src/Scripting/ScriptEngine.bf index e699a6d..501ac74 100644 --- a/GlitchyEngine/src/Scripting/ScriptEngine.bf +++ b/GlitchyEngine/src/Scripting/ScriptEngine.bf @@ -83,6 +83,8 @@ class EngineClasses static class ScriptEngine { + // TODO: Maybe make it possible to set the path to ScriptCore just like for the script project? + // This would probably require a separate small project that just handles the script-engine interface. public const String ScriptCorePath = "Resources/Scripts/ScriptCore.dll"; private static Scene s_Context ~ _?.ReleaseRef();