Refactor project structure and enhance functionality

Added `InternalsVisibleTo` attribute for "Ghost.Editor" in `AssemblyInfo.cs`.
Added a binary file `Empty.zip` to the project.
Added a new `ProjectMetadata` class in `ProjectMetadata.cs`.
Added new states and interfaces for managing application states in `EditorState.cs`, `LandingState.cs`, and `IAppState.cs`.
Added a notification service in `INotificationService.cs` and `StackedNotificationService.cs`.
Added new XAML files for UI components, including `InspectorView.xaml` and `InternalControls.xaml`.

Changed the `ProjectInfo` class in `ProjectInfo.cs` to include a `MetadataPath` property instead of `Path` and `EngineVersion`.
Changed the `TemplateInfo` class in `TemplateInfo.cs` to use a struct instead of a class for `TemplateData`.
Changed the `ProjectService` class to use the new `ProjectRepository` for managing project data.

Removed several using directives and the entire `ProjectRepository` class from `ProjectRepository.cs`, replacing it with a new implementation.
Removed old methods and properties in `EntityManager` and `World` classes to improve entity management and component handling.

Updated the `Ghost.Data.csproj` file to include the new `Empty.zip` file as a content item.
Updated the `ProjectRepository` class to manage project data using SQLite.
Updated various XAML files to include new styles and controls, improving the overall UI design.
Updated the `CreateProjectViewModel` to include a notification service and handle project creation logic.
Updated the test project to include references to the new `Ghost.Graphics` project and modified test cases to align with the new structure.
This commit is contained in:
2025-05-31 01:45:34 +09:00
parent 67b6040b5e
commit 61bbb1bc68
66 changed files with 1923 additions and 733 deletions

View File

@@ -10,43 +10,43 @@ internal static class PlayerLoopService
public static void Start()
{
if (_isRunning)
{
return;
}
//if (_isRunning)
//{
// return;
//}
foreach (var gameObject in SceneManager.QueryRootGameObjects())
{
gameObject.Start();
}
//foreach (var gameObject in SceneManager.QueryRootGameObjects())
//{
// gameObject.Start();
//}
_timer ??= new Timer(FixedUpdate, null, 0, (int)(fixedDeltaTime * 1000));
//_timer ??= new Timer(FixedUpdate, null, 0, (int)(fixedDeltaTime * 1000));
while (_isRunning)
{
Update();
}
//while (_isRunning)
//{
// Update();
//}
}
private static void Update()
{
foreach (var gameObject in SceneManager.QueryRootGameObjects())
{
gameObject.Update();
}
//foreach (var gameObject in SceneManager.QueryRootGameObjects())
//{
// gameObject.Update();
//}
foreach (var gameObject in SceneManager.QueryRootGameObjects())
{
gameObject.LateUpdate();
}
//foreach (var gameObject in SceneManager.QueryRootGameObjects())
//{
// gameObject.LateUpdate();
//}
}
private static void FixedUpdate(object? state)
{
foreach (var gameObject in SceneManager.QueryRootGameObjects())
{
gameObject.FixedUpdate();
}
//foreach (var gameObject in SceneManager.QueryRootGameObjects())
//{
// gameObject.FixedUpdate();
//}
}
public static void Stop()

View File

@@ -1,6 +1,4 @@
using Ghost.Engine.Models;
namespace Ghost.Engine.Services;
namespace Ghost.Engine.Services;
public enum SceneLoadMode
{
@@ -10,41 +8,41 @@ public enum SceneLoadMode
public static class SceneManager
{
private readonly static HashSet<Scene> _activeScenes = new();
//private readonly static HashSet<Scene> _activeScenes = new();
internal static IEnumerable<GameObject> QueryRootGameObjects()
{
foreach (var scene in _activeScenes)
{
foreach (var gameObject in scene.RootObjects)
{
if (!gameObject.IsActive)
{
continue;
}
//internal static IEnumerable<GameObject> QueryRootGameObjects()
//{
// foreach (var scene in _activeScenes)
// {
// foreach (var gameObject in scene.RootObjects)
// {
// if (!gameObject.IsActive)
// {
// continue;
// }
yield return gameObject;
}
}
}
// yield return gameObject;
// }
// }
//}
public static void LoadScene(Scene scene, SceneLoadMode loadMode)
{
if (loadMode == SceneLoadMode.Single)
{
foreach (var activeScene in _activeScenes)
{
activeScene.Unload();
}
_activeScenes.Clear();
}
//public static void LoadScene(Scene scene, SceneLoadMode loadMode)
//{
// if (loadMode == SceneLoadMode.Single)
// {
// foreach (var activeScene in _activeScenes)
// {
// activeScene.Unload();
// }
// _activeScenes.Clear();
// }
_activeScenes.Add(scene);
scene.Load();
}
// _activeScenes.Add(scene);
// scene.Load();
//}
public static Task LoadSceneAsync(Scene scene, SceneLoadMode loadMode)
{
return Task.Run(() => LoadScene(scene, loadMode));
}
//public static Task LoadSceneAsync(Scene scene, SceneLoadMode loadMode)
//{
// return Task.Run(() => LoadScene(scene, loadMode));
//}
}