Fixed "Save component to edit mode" and also jankily save script data

This commit is contained in:
Simon Lübeß
2026-09-14 22:30:10 +02:00
parent d2c6c9a948
commit b927e2e709
3 changed files with 27 additions and 6 deletions
@@ -205,17 +205,29 @@ namespace GlitchyEditor.EditWindows
positionX -= buttonSize.X + ImGui.GetStyle().FramePadding.x; positionX -= buttonSize.X + ImGui.GetStyle().FramePadding.x;
ImGui.SameLine(positionX); ImGui.SameLine(positionX);
if (ImGui.ImageButton("save", EditorIcons.Instance.Icon_Save, (.)buttonSize)) if (ImGui.ImageButton("save_to_editor", EditorIcons.Instance.Icon_Save, (.)buttonSize))
{ {
if (Entity editorEntity = Editor.Instance.EditorScene.GetEntityByID(entity.UUID)) if (Entity editorEntity = Editor.Instance.EditorScene.GetEntityByID(entity.UUID))
{ {
Scene.CopyComponent<TComponent>(entity, editorEntity); Scene.CopyComponent<TComponent>(entity, editorEntity);
if (typeof(TComponent) == typeof(ScriptComponent)) if (typeof(TComponent) == typeof(ScriptComponent))
{ {
// TODO: Copy script data into editor // Dirty hack to get to the serialized script instances of the editor scene.
// TODO: Somehow get the scriptserializer used to serialize the editor scene var serializer = EditorApp.Instance.EditorLayer.[Friend]_scriptSerializer;
//scriptSerializer.SerializeScriptInstance(((ScriptComponent*)component).Instance);
// Dirty hack to remove the old data
if (serializer.SerializedObjects.GetAndRemove(entity.UUID) case .Ok(let kvPair))
{
delete kvPair.value;
}
// Just save the new data into the context (what could possibly go wrong?!)
// this could probably serialize too much data into our context (because we can serialize reference types)
// and leave a bunch of dangling data in it (because we can serialize reference types)
serializer.SerializeScriptInstance(((ScriptComponent*)component).Instance);
// This is also a massive hack to make sure we don't keep references to types, but this also mean we might serialize too much?
serializer.FinishSerialization();
} }
} }
else else
+2
View File
@@ -34,6 +34,8 @@ namespace GlitchyEditor
private EditorLayer _editorLayer; private EditorLayer _editorLayer;
public Settings Settings { get; private set; } = new .() ~ delete _; public Settings Settings { get; private set; } = new .() ~ delete _;
public EditorLayer EditorLayer => _editorLayer;
public this(String[] args) public this(String[] args)
{ {
@@ -670,7 +670,7 @@ namespace GlitchyEngine.World
} }
} }
struct ScriptComponent : IDisposableComponent struct ScriptComponent : IDisposableComponent, ICopyComponent<ScriptComponent>
{ {
private String _scriptClassName = null; private String _scriptClassName = null;
@@ -705,5 +705,12 @@ namespace GlitchyEngine.World
delete _scriptClassName; delete _scriptClassName;
ReleaseRefAndNullify!(_instance); ReleaseRefAndNullify!(_instance);
} }
public static void Copy(ScriptComponent* source, ScriptComponent* target)
{
target.ScriptClassName = source.ScriptClassName;
// TODO: This is just half the work, because we actually have to somehow handle the script instance
}
} }
} }