Dev settings for using ScriptCore as either dll or csproj

This commit is contained in:
Simon Lübeß
2025-08-09 23:40:31 +02:00
parent d002dfe25e
commit b94b2afc55
9 changed files with 88 additions and 22 deletions
+11 -2
View File
@@ -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<KeyPressedEvent>(scope (e) => OnKeyPressed(e));
dispatcher.Dispatch<MouseScrolledEvent>(scope (e) => OnMouseScrolled(e));
dispatcher.Dispatch<DragDropEvent>(scope (e) => OnDragDrop(e));
dispatcher.Dispatch<SettingsAppliedEvent>(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;
}
}
}
+22
View File
@@ -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
{
+21 -18
View File
@@ -72,6 +72,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<void> FixupScriptSolutionFile()
private Result<void> 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<void> FixupScriptProjectFile()
private Result<void> 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<void> FixupScriptCorePath()
/// Fixes the references to ScriptCore in the script-project and solution file.
public Result<void> 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;
}
+1 -1
View File
@@ -59,7 +59,7 @@ namespace GlitchyEditor
{
_open = false;
_settings = Application.Get().Settings;
_settings = Application.Instance.Settings;
Create();
}
+3
View File
@@ -84,6 +84,9 @@ namespace GlitchyEngine
#endif
GlitchyEngine.Settings.Load();
Settings.OnApplySettings.Add(new (s, e) => {
OnEvent(scope SettingsAppliedEvent());
});
Settings.Apply();
}
@@ -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");
}
}
}
+1 -1
View File
@@ -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
}
@@ -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)
{
@@ -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();