Files
GhostEngine/Ghost.Editor/Core/AppState/EditorState.cs
Misaki 00b4e82ded ECS refactor: new ComponentSet, serialization, generators
Major ECS API overhaul: added ComponentSet, refactored ComponentRegistry, and updated all entity/component creation methods. Introduced robust custom serialization infrastructure and per-component source generators for registration and (de)serialization. Updated editor, engine, and test code to use new APIs. Improved code quality, naming, and performance throughout. Removed obsolete code and updated dependencies.
2025-12-20 20:41:40 +09:00

75 lines
1.8 KiB
C#

using Ghost.Data.Models;
using Ghost.Data.Services;
using Ghost.Editor.Core.AssetHandle;
using Ghost.Editor.View.Windows;
using Ghost.Engine;
using Ghost.Engine.Services;
using Microsoft.UI.Xaml.Media;
namespace Ghost.Editor.Core.AppState;
internal class EditorState : IAppState
{
private EngineEditorWindow? _window;
private EngineCore? _engineCore;
public Task OnExitingAsync()
{
if (App.Window == _window)
{
App.Window = null;
}
_engineCore?.ShutDown();
CompositionTarget.Rendering -= OnRendering;
return Task.CompletedTask;
}
public Task OnEnteringAsync(object? parameter)
{
if (parameter is not ProjectMetadataInfo metadataInfo)
{
throw new ArgumentException("Parameter must be of type ProjectMetadata.", nameof(parameter));
}
ProjectService.CurrentProject = metadataInfo;
_engineCore = App.GetService<EngineCore>();
_engineCore.Init(new Engine.Models.LaunchArgument());
CompositionTarget.Rendering += OnRendering;
_window = App.GetService<EngineEditorWindow>();
_window.Activate();
App.Window = _window;
return Task.CompletedTask;
}
public Task OnExitedAsync()
{
_window?.Close();
_window = null;
return Task.CompletedTask;
}
public Task OnEnteredAsync(object? parameter)
{
AssetDatabase.Initialize();
return Task.CompletedTask;
}
private void OnRendering(object? sender, object e)
{
if (GraphicsPipeline.WaitForGPUReady(0))
{
_window?.DispatcherQueue.TryEnqueue(Microsoft.UI.Dispatching.DispatcherQueuePriority.High, () =>
{
PlayerLoopService.Update();
GraphicsPipeline.SignalCPUReady();
});
}
}
}