From 0a9d53ec7fa5f2c331714675b8821fc24388cad8 Mon Sep 17 00:00:00 2001 From: Software Antics Date: Thu, 18 Apr 2024 00:53:52 +1000 Subject: [PATCH] Just need to work on input now. --- .../FinalEngine.Editor.Common.csproj | 1 + .../Models/Scenes/Scene.cs | 6 +- FinalEngine.Editor.Desktop/App.xaml.cs | 24 +++++- .../Inspectors/EntityComponentViewModel.cs | 2 +- .../Inspectors/EntityInspectorViewModel.cs | 2 +- FinalEngine.Examples.Sponza/Camera.cs | 7 +- FinalEngine.Rendering/Core/Transform.cs | 77 ----------------- .../{Core => Geometry}/ICamera.cs | 5 +- FinalEngine.Rendering/Geometry/RenderModel.cs | 8 +- FinalEngine.Rendering/IRenderingEngine.cs | 5 +- .../Renderers/GeometryRenderer.cs | 4 +- .../Renderers/ISceneRenderer.cs | 2 +- .../Renderers/ISkyboxRenderer.cs | 2 +- .../Renderers/SceneRenderer.cs | 2 +- .../Renderers/SkyboxRenderer.cs | 1 - FinalEngine.Rendering/RenderingEngine.cs | 14 ++-- .../Queues/RenderModelRenderQueueSystem.cs | 48 +++++++++++ .../ECS/Components/TagComponentTests.cs | 4 +- FinalEngine.sln | 83 +++++++++++++++++++ Game.Library/Game.Library.csproj | 13 +++ 20 files changed, 201 insertions(+), 109 deletions(-) delete mode 100644 FinalEngine.Rendering/Core/Transform.cs rename FinalEngine.Rendering/{Core => Geometry}/ICamera.cs (71%) create mode 100644 FinalEngine.Rendering/Systems/Queues/RenderModelRenderQueueSystem.cs create mode 100644 Game.Library/Game.Library.csproj diff --git a/FinalEngine.Editor.Common/FinalEngine.Editor.Common.csproj b/FinalEngine.Editor.Common/FinalEngine.Editor.Common.csproj index 761ab6ae..e9ce52cc 100644 --- a/FinalEngine.Editor.Common/FinalEngine.Editor.Common.csproj +++ b/FinalEngine.Editor.Common/FinalEngine.Editor.Common.csproj @@ -34,6 +34,7 @@ + diff --git a/FinalEngine.Editor.Common/Models/Scenes/Scene.cs b/FinalEngine.Editor.Common/Models/Scenes/Scene.cs index de4c3614..ec4875a9 100644 --- a/FinalEngine.Editor.Common/Models/Scenes/Scene.cs +++ b/FinalEngine.Editor.Common/Models/Scenes/Scene.cs @@ -11,7 +11,7 @@ namespace FinalEngine.Editor.Common.Models.Scenes; using FinalEngine.ECS; using FinalEngine.ECS.Components.Core; using FinalEngine.ECS.Exceptions; -using FinalEngine.Rendering.Core; +using FinalEngine.Rendering.Components; using Microsoft.Extensions.Logging; public sealed class Scene : IScene @@ -42,12 +42,12 @@ public void AddEntity(string tag, Guid uniqueID) var entity = new Entity(uniqueID); - entity.AddComponent(new Tag() + entity.AddComponent(new TagComponent() { Name = tag, }); - entity.AddComponent(new Transform()); + entity.AddComponent(new TransformComponent()); this.world.AddEntity(entity); this.entities.Add(entity); diff --git a/FinalEngine.Editor.Desktop/App.xaml.cs b/FinalEngine.Editor.Desktop/App.xaml.cs index 5bfb0199..65028817 100644 --- a/FinalEngine.Editor.Desktop/App.xaml.cs +++ b/FinalEngine.Editor.Desktop/App.xaml.cs @@ -32,7 +32,11 @@ namespace FinalEngine.Editor.Desktop; using FinalEngine.Editor.ViewModels.Services.Interactions; using FinalEngine.Editor.ViewModels.Services.Layout; using FinalEngine.Rendering; +using FinalEngine.Rendering.Geometry; +using FinalEngine.Rendering.Lighting; using FinalEngine.Rendering.OpenGL; +using FinalEngine.Rendering.Renderers; +using FinalEngine.Rendering.Systems.Queues; using FinalEngine.Resources; using FinalEngine.Runtime; using Microsoft.Extensions.DependencyInjection; @@ -83,11 +87,29 @@ private static void ConfigureServices(HostBuilderContext context, IServiceCollec services.AddSingleton(ResourceManager.Instance); - services.AddTransient(); + services.AddTransient(x => + { + var world = new EntityWorld(); + + world.AddSystem(new RenderModelRenderQueueSystem(x.GetRequiredService>())); + + return world; + }); services.AddSingleton(); services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + + //// TODO: ILightRenderer and IGeometryRenderer should just implement IRenderQueue directly. + services.AddSingleton>(x => (IRenderQueue)x.GetRequiredService()); + services.AddSingleton>(x => (IRenderQueue)x.GetRequiredService()); + services.AddSingleton>(x => (IRenderQueue)x.GetRequiredService()); + services.AddSingleton(); services.AddSingleton(); diff --git a/FinalEngine.Editor.ViewModels/Inspectors/EntityComponentViewModel.cs b/FinalEngine.Editor.ViewModels/Inspectors/EntityComponentViewModel.cs index c21c13e4..27ce2a1b 100644 --- a/FinalEngine.Editor.ViewModels/Inspectors/EntityComponentViewModel.cs +++ b/FinalEngine.Editor.ViewModels/Inspectors/EntityComponentViewModel.cs @@ -134,7 +134,7 @@ public ICommand ToggleCommand private bool CanRemove() { - return this.component.GetType() != typeof(Tag); + return this.component.GetType() != typeof(TagComponent); } private void Remove() diff --git a/FinalEngine.Editor.ViewModels/Inspectors/EntityInspectorViewModel.cs b/FinalEngine.Editor.ViewModels/Inspectors/EntityInspectorViewModel.cs index 8f96752f..b46a0a7f 100644 --- a/FinalEngine.Editor.ViewModels/Inspectors/EntityInspectorViewModel.cs +++ b/FinalEngine.Editor.ViewModels/Inspectors/EntityInspectorViewModel.cs @@ -78,7 +78,7 @@ private void IntializeComponentTypes() { this.categorizedComponentTypes.Clear(); - var assembly = Assembly.GetAssembly(typeof(Tag)) ?? throw new TypeAccessException("Failed to initialize core engine components."); + var assembly = Assembly.GetAssembly(typeof(TagComponent)) ?? throw new TypeAccessException("Failed to initialize core engine components."); var categoryToTypeMap = this.typeResolver.GetCategorizedTypes(assembly); diff --git a/FinalEngine.Examples.Sponza/Camera.cs b/FinalEngine.Examples.Sponza/Camera.cs index bb29fefa..d0bec4e5 100644 --- a/FinalEngine.Examples.Sponza/Camera.cs +++ b/FinalEngine.Examples.Sponza/Camera.cs @@ -6,7 +6,8 @@ namespace FinalEngine.Examples.Sponza; using FinalEngine.Input.Mouses; using FinalEngine.Maths; using FinalEngine.Rendering; -using FinalEngine.Rendering.Core; +using FinalEngine.Rendering.Components; +using FinalEngine.Rendering.Geometry; public sealed class Camera : ICamera { @@ -22,7 +23,7 @@ public Camera(int width, int height) { this.width = width; this.height = height; - this.Transform = new Transform() + this.Transform = new TransformComponent() { Position = new Vector3(0, 50, 0), Rotation = Quaternion.CreateFromAxisAngle(Vector3.UnitY, MathHelper.DegreesToRadians(45.0f)), @@ -41,7 +42,7 @@ public Matrix4x4 Projection get { return Matrix4x4.CreatePerspectiveFieldOfView(MathHelper.DegreesToRadians(70.0f), this.width / this.height, 0.1f, 1000.0f); } } - public Transform Transform { get; } + public TransformComponent Transform { get; } public Matrix4x4 View { diff --git a/FinalEngine.Rendering/Core/Transform.cs b/FinalEngine.Rendering/Core/Transform.cs deleted file mode 100644 index 046d23df..00000000 --- a/FinalEngine.Rendering/Core/Transform.cs +++ /dev/null @@ -1,77 +0,0 @@ -// -// Copyright (c) Software Antics. All rights reserved. -// - -namespace FinalEngine.Rendering.Core; - -using System.Numerics; -using FinalEngine.ECS; - -public class Transform : IEntityComponent -{ - public Transform() - { - this.Position = Vector3.Zero; - this.Rotation = Quaternion.Identity; - this.Scale = Vector3.One; - } - - public Vector3 Backward - { - get { return Vector3.Normalize(Vector3.Transform(-Vector3.UnitZ, this.Rotation)); } - } - - public Vector3 Down - { - get { return Vector3.Normalize(Vector3.Transform(-Vector3.UnitY, this.Rotation)); } - } - - public Vector3 Forward - { - get { return Vector3.Normalize(Vector3.Transform(Vector3.UnitZ, this.Rotation)); } - } - - public Vector3 Left - { - get { return Vector3.Normalize(Vector3.Transform(-Vector3.UnitX, this.Rotation)); } - } - - public Vector3 Position { get; set; } - - public Vector3 Right - { - get { return Vector3.Normalize(Vector3.Transform(Vector3.UnitX, this.Rotation)); } - } - - public Quaternion Rotation { get; set; } - - public Vector3 Scale { get; set; } - - public Vector3 Up - { - get { return Vector3.Normalize(Vector3.Transform(Vector3.UnitY, this.Rotation)); } - } - - public Matrix4x4 CreateTransformationMatrix() - { - return Matrix4x4.CreateScale(this.Scale) * - Matrix4x4.CreateFromQuaternion(this.Rotation) * - Matrix4x4.CreateTranslation(this.Position); - } - - public Matrix4x4 CreateViewMatrix(Vector3 cameraUp) - { - return Matrix4x4.CreateLookAt(this.Position, this.Position + this.Forward, cameraUp); - } - - public void Rotate(Vector3 axis, float radians) - { - this.Rotation = Quaternion.CreateFromAxisAngle(axis, radians) * this.Rotation; - this.Rotation = Quaternion.Normalize(this.Rotation); - } - - public void Translate(Vector3 direction, float amount) - { - this.Position += direction * amount; - } -} diff --git a/FinalEngine.Rendering/Core/ICamera.cs b/FinalEngine.Rendering/Geometry/ICamera.cs similarity index 71% rename from FinalEngine.Rendering/Core/ICamera.cs rename to FinalEngine.Rendering/Geometry/ICamera.cs index a1adc1dc..cb7a23e6 100644 --- a/FinalEngine.Rendering/Core/ICamera.cs +++ b/FinalEngine.Rendering/Geometry/ICamera.cs @@ -2,10 +2,11 @@ // Copyright (c) Software Antics. All rights reserved. // -namespace FinalEngine.Rendering.Core; +namespace FinalEngine.Rendering.Geometry; using System.Drawing; using System.Numerics; +using FinalEngine.Rendering.Components; public interface ICamera { @@ -13,7 +14,7 @@ public interface ICamera Matrix4x4 Projection { get; } - Transform Transform { get; } + TransformComponent Transform { get; } Matrix4x4 View { get; } } diff --git a/FinalEngine.Rendering/Geometry/RenderModel.cs b/FinalEngine.Rendering/Geometry/RenderModel.cs index 5408d7cd..10acf97e 100644 --- a/FinalEngine.Rendering/Geometry/RenderModel.cs +++ b/FinalEngine.Rendering/Geometry/RenderModel.cs @@ -4,13 +4,13 @@ namespace FinalEngine.Rendering.Geometry; -using FinalEngine.Rendering.Core; +using FinalEngine.Rendering.Components; public sealed class RenderModel { private IMaterial? material; - private Transform? transform; + private TransformComponent? transform; public IMaterial Material { @@ -20,9 +20,9 @@ public IMaterial Material public IMesh? Mesh { get; set; } - public Transform Transform + public TransformComponent Transform { - get { return this.transform ??= new Transform(); } + get { return this.transform ??= new TransformComponent(); } set { this.transform = value; } } } diff --git a/FinalEngine.Rendering/IRenderingEngine.cs b/FinalEngine.Rendering/IRenderingEngine.cs index 1bb7b2ab..0174ea92 100644 --- a/FinalEngine.Rendering/IRenderingEngine.cs +++ b/FinalEngine.Rendering/IRenderingEngine.cs @@ -4,9 +4,12 @@ namespace FinalEngine.Rendering; -using FinalEngine.Rendering.Core; +using System.Drawing; +using FinalEngine.Rendering.Geometry; public interface IRenderingEngine { + Color ClearColor { get; } + void Render(ICamera camera); } diff --git a/FinalEngine.Rendering/Renderers/GeometryRenderer.cs b/FinalEngine.Rendering/Renderers/GeometryRenderer.cs index ac228c51..b21b88f8 100644 --- a/FinalEngine.Rendering/Renderers/GeometryRenderer.cs +++ b/FinalEngine.Rendering/Renderers/GeometryRenderer.cs @@ -6,7 +6,7 @@ namespace FinalEngine.Rendering.Renderers; using System; using System.Collections.Generic; -using FinalEngine.Rendering.Core; +using FinalEngine.Rendering.Components; using FinalEngine.Rendering.Geometry; public sealed class GeometryRenderer : IRenderQueue, IRenderQueue, IGeometryRenderer @@ -87,7 +87,7 @@ private void RenderBatchInstance(IMesh? mesh) mesh.Draw(this.renderDevice); } - private void UpdateUniforms(Transform transform) + private void UpdateUniforms(TransformComponent transform) { this.renderDevice.Pipeline.SetUniform("u_transform", transform.CreateTransformationMatrix()); } diff --git a/FinalEngine.Rendering/Renderers/ISceneRenderer.cs b/FinalEngine.Rendering/Renderers/ISceneRenderer.cs index 4754feb3..d966983f 100644 --- a/FinalEngine.Rendering/Renderers/ISceneRenderer.cs +++ b/FinalEngine.Rendering/Renderers/ISceneRenderer.cs @@ -4,7 +4,7 @@ namespace FinalEngine.Rendering.Renderers; -using FinalEngine.Rendering.Core; +using FinalEngine.Rendering.Geometry; public interface ISceneRenderer { diff --git a/FinalEngine.Rendering/Renderers/ISkyboxRenderer.cs b/FinalEngine.Rendering/Renderers/ISkyboxRenderer.cs index 8ea23bfe..5cd4034a 100644 --- a/FinalEngine.Rendering/Renderers/ISkyboxRenderer.cs +++ b/FinalEngine.Rendering/Renderers/ISkyboxRenderer.cs @@ -4,7 +4,7 @@ namespace FinalEngine.Rendering.Renderers; -using FinalEngine.Rendering.Core; +using FinalEngine.Rendering.Geometry; using FinalEngine.Rendering.Textures; public interface ISkyboxRenderer diff --git a/FinalEngine.Rendering/Renderers/SceneRenderer.cs b/FinalEngine.Rendering/Renderers/SceneRenderer.cs index 20adb5b5..6945f622 100644 --- a/FinalEngine.Rendering/Renderers/SceneRenderer.cs +++ b/FinalEngine.Rendering/Renderers/SceneRenderer.cs @@ -5,7 +5,7 @@ namespace FinalEngine.Rendering.Renderers; using System; -using FinalEngine.Rendering.Core; +using FinalEngine.Rendering.Geometry; using FinalEngine.Rendering.Pipeline; using FinalEngine.Resources; diff --git a/FinalEngine.Rendering/Renderers/SkyboxRenderer.cs b/FinalEngine.Rendering/Renderers/SkyboxRenderer.cs index ddae0fb8..9b9ae813 100644 --- a/FinalEngine.Rendering/Renderers/SkyboxRenderer.cs +++ b/FinalEngine.Rendering/Renderers/SkyboxRenderer.cs @@ -11,7 +11,6 @@ namespace FinalEngine.Rendering.Renderers; using System; using System.Numerics; -using FinalEngine.Rendering.Core; using FinalEngine.Rendering.Geometry; using FinalEngine.Rendering.Pipeline; using FinalEngine.Rendering.Primitives; diff --git a/FinalEngine.Rendering/RenderingEngine.cs b/FinalEngine.Rendering/RenderingEngine.cs index 8c490ad9..4fefcb8e 100644 --- a/FinalEngine.Rendering/RenderingEngine.cs +++ b/FinalEngine.Rendering/RenderingEngine.cs @@ -7,7 +7,7 @@ namespace FinalEngine.Rendering; using System; using System.Drawing; using System.IO.Abstractions; -using FinalEngine.Rendering.Core; +using FinalEngine.Rendering.Geometry; using FinalEngine.Rendering.Renderers; public sealed class RenderingEngine : IRenderingEngine @@ -20,13 +20,10 @@ public sealed class RenderingEngine : IRenderingEngine private readonly ISceneRenderer sceneRenderer; - private readonly ISkyboxRenderer skyboxRenderer; - public RenderingEngine( IFileSystem fileSystem, IRenderDevice renderDevice, ILightRenderer lightRenderer, - ISkyboxRenderer skyboxRenderer, ISceneRenderer sceneRenderer, IRenderCoordinator renderCoordinator) { @@ -34,18 +31,21 @@ public RenderingEngine( this.renderDevice = renderDevice ?? throw new ArgumentNullException(nameof(renderDevice)); this.lightRenderer = lightRenderer ?? throw new ArgumentNullException(nameof(lightRenderer)); - this.skyboxRenderer = skyboxRenderer ?? throw new ArgumentNullException(nameof(skyboxRenderer)); this.sceneRenderer = sceneRenderer ?? throw new ArgumentNullException(nameof(sceneRenderer)); this.renderCoordinator = renderCoordinator ?? throw new ArgumentNullException(nameof(renderCoordinator)); + + this.ClearColor = Color.FromArgb(255, 30, 30, 30); } + public Color ClearColor { get; set; } + public void Render(ICamera camera) { ArgumentNullException.ThrowIfNull(camera, nameof(camera)); this.renderDevice.Pipeline.SetFrameBuffer(null); this.renderDevice.Rasterizer.SetViewport(camera.Bounds); - this.renderDevice.Clear(Color.Black); + this.renderDevice.Clear(this.ClearColor); this.renderDevice.OutputMerger.SetDepthState(new DepthStateDescription() { @@ -83,7 +83,5 @@ private void RenderScene(ICamera camera) this.sceneRenderer.Render(camera, false); }); } - - this.skyboxRenderer.Render(camera); } } diff --git a/FinalEngine.Rendering/Systems/Queues/RenderModelRenderQueueSystem.cs b/FinalEngine.Rendering/Systems/Queues/RenderModelRenderQueueSystem.cs new file mode 100644 index 00000000..37c7454a --- /dev/null +++ b/FinalEngine.Rendering/Systems/Queues/RenderModelRenderQueueSystem.cs @@ -0,0 +1,48 @@ +// +// Copyright (c) Software Antics. All rights reserved. +// + +namespace FinalEngine.Rendering.Systems.Queues; + +using System; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using FinalEngine.ECS; +using FinalEngine.ECS.Attributes; +using FinalEngine.Rendering.Components; +using FinalEngine.Rendering.Geometry; +using FinalEngine.Rendering.Renderers; + +[EntitySystemProcess(ExecutionType = GameLoopType.Render)] +public sealed class RenderModelRenderQueueSystem : EntitySystemBase +{ + private readonly IRenderQueue renderQueue; + + public RenderModelRenderQueueSystem(IRenderQueue renderQueue) + { + this.renderQueue = renderQueue ?? throw new ArgumentNullException(nameof(renderQueue)); + } + + protected override bool IsMatch([NotNull] IReadOnlyEntity entity) + { + return entity.ContainsComponent() && entity.ContainsComponent(); + } + + protected override void Process([NotNull] IEnumerable entities) + { + foreach (var entity in entities) + { + var transform = entity.GetComponent(); + var mesh = entity.GetComponent(); + + var model = new RenderModel() + { + Mesh = mesh.Mesh, + Material = mesh.Material, + Transform = transform, + }; + + this.renderQueue.Enqueue(model); + } + } +} diff --git a/FinalEngine.Tests/ECS/Components/TagComponentTests.cs b/FinalEngine.Tests/ECS/Components/TagComponentTests.cs index 4840c10e..48f55d1e 100644 --- a/FinalEngine.Tests/ECS/Components/TagComponentTests.cs +++ b/FinalEngine.Tests/ECS/Components/TagComponentTests.cs @@ -10,12 +10,12 @@ namespace FinalEngine.Tests.ECS.Components; [TestFixture] public sealed class TagComponentTests { - private Tag component; + private TagComponent component; [SetUp] public void Setup() { - this.component = new Tag(); + this.component = new TagComponent(); } [Test] diff --git a/FinalEngine.sln b/FinalEngine.sln index 38ebbc7e..de9c93df 100644 --- a/FinalEngine.sln +++ b/FinalEngine.sln @@ -59,80 +59,162 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FinalEngine.Editor.Desktop" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FinalEngine.Editor.ViewModels", "FinalEngine.Editor.ViewModels\FinalEngine.Editor.ViewModels.csproj", "{30AA51B6-3E6D-455D-8635-5A4034896E9F}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Game", "Game", "{A1CA475F-9507-444C-B07A-33607BF389C7}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Game.Library", "Game.Library\Game.Library.csproj", "{D97A05DB-1E5C-4790-83BB-F3DA3BB69ED3}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU Debug|x64 = Debug|x64 + Release|Any CPU = Release|Any CPU Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution + {025F4A45-6953-4A11-871E-D034E9C61B0A}.Debug|Any CPU.ActiveCfg = Debug|x64 + {025F4A45-6953-4A11-871E-D034E9C61B0A}.Debug|Any CPU.Build.0 = Debug|x64 {025F4A45-6953-4A11-871E-D034E9C61B0A}.Debug|x64.ActiveCfg = Debug|x64 {025F4A45-6953-4A11-871E-D034E9C61B0A}.Debug|x64.Build.0 = Debug|x64 + {025F4A45-6953-4A11-871E-D034E9C61B0A}.Release|Any CPU.ActiveCfg = Release|x64 + {025F4A45-6953-4A11-871E-D034E9C61B0A}.Release|Any CPU.Build.0 = Release|x64 {025F4A45-6953-4A11-871E-D034E9C61B0A}.Release|x64.ActiveCfg = Release|x64 {025F4A45-6953-4A11-871E-D034E9C61B0A}.Release|x64.Build.0 = Release|x64 + {B123653E-BA9E-463C-B109-4C294385D74E}.Debug|Any CPU.ActiveCfg = Debug|x64 + {B123653E-BA9E-463C-B109-4C294385D74E}.Debug|Any CPU.Build.0 = Debug|x64 {B123653E-BA9E-463C-B109-4C294385D74E}.Debug|x64.ActiveCfg = Debug|x64 {B123653E-BA9E-463C-B109-4C294385D74E}.Debug|x64.Build.0 = Debug|x64 + {B123653E-BA9E-463C-B109-4C294385D74E}.Release|Any CPU.ActiveCfg = Release|x64 + {B123653E-BA9E-463C-B109-4C294385D74E}.Release|Any CPU.Build.0 = Release|x64 {B123653E-BA9E-463C-B109-4C294385D74E}.Release|x64.ActiveCfg = Release|x64 {B123653E-BA9E-463C-B109-4C294385D74E}.Release|x64.Build.0 = Release|x64 + {F22EC955-61B2-4021-88F2-BD889DED8716}.Debug|Any CPU.ActiveCfg = Debug|x64 + {F22EC955-61B2-4021-88F2-BD889DED8716}.Debug|Any CPU.Build.0 = Debug|x64 {F22EC955-61B2-4021-88F2-BD889DED8716}.Debug|x64.ActiveCfg = Debug|x64 {F22EC955-61B2-4021-88F2-BD889DED8716}.Debug|x64.Build.0 = Debug|x64 + {F22EC955-61B2-4021-88F2-BD889DED8716}.Release|Any CPU.ActiveCfg = Release|x64 + {F22EC955-61B2-4021-88F2-BD889DED8716}.Release|Any CPU.Build.0 = Release|x64 {F22EC955-61B2-4021-88F2-BD889DED8716}.Release|x64.ActiveCfg = Release|x64 {F22EC955-61B2-4021-88F2-BD889DED8716}.Release|x64.Build.0 = Release|x64 + {9835B6B5-0A5F-4645-82B6-3B34F0DA91E1}.Debug|Any CPU.ActiveCfg = Debug|x64 + {9835B6B5-0A5F-4645-82B6-3B34F0DA91E1}.Debug|Any CPU.Build.0 = Debug|x64 {9835B6B5-0A5F-4645-82B6-3B34F0DA91E1}.Debug|x64.ActiveCfg = Debug|x64 {9835B6B5-0A5F-4645-82B6-3B34F0DA91E1}.Debug|x64.Build.0 = Debug|x64 + {9835B6B5-0A5F-4645-82B6-3B34F0DA91E1}.Release|Any CPU.ActiveCfg = Release|x64 + {9835B6B5-0A5F-4645-82B6-3B34F0DA91E1}.Release|Any CPU.Build.0 = Release|x64 {9835B6B5-0A5F-4645-82B6-3B34F0DA91E1}.Release|x64.ActiveCfg = Release|x64 {9835B6B5-0A5F-4645-82B6-3B34F0DA91E1}.Release|x64.Build.0 = Release|x64 + {0A41C3A7-1881-43F8-BE83-8B35D6B04221}.Debug|Any CPU.ActiveCfg = Debug|x64 + {0A41C3A7-1881-43F8-BE83-8B35D6B04221}.Debug|Any CPU.Build.0 = Debug|x64 {0A41C3A7-1881-43F8-BE83-8B35D6B04221}.Debug|x64.ActiveCfg = Debug|x64 {0A41C3A7-1881-43F8-BE83-8B35D6B04221}.Debug|x64.Build.0 = Debug|x64 + {0A41C3A7-1881-43F8-BE83-8B35D6B04221}.Release|Any CPU.ActiveCfg = Release|x64 + {0A41C3A7-1881-43F8-BE83-8B35D6B04221}.Release|Any CPU.Build.0 = Release|x64 {0A41C3A7-1881-43F8-BE83-8B35D6B04221}.Release|x64.ActiveCfg = Release|x64 {0A41C3A7-1881-43F8-BE83-8B35D6B04221}.Release|x64.Build.0 = Release|x64 + {14B5098C-79C8-44BB-A485-6638873F10BC}.Debug|Any CPU.ActiveCfg = Debug|x64 + {14B5098C-79C8-44BB-A485-6638873F10BC}.Debug|Any CPU.Build.0 = Debug|x64 {14B5098C-79C8-44BB-A485-6638873F10BC}.Debug|x64.ActiveCfg = Debug|x64 {14B5098C-79C8-44BB-A485-6638873F10BC}.Debug|x64.Build.0 = Debug|x64 + {14B5098C-79C8-44BB-A485-6638873F10BC}.Release|Any CPU.ActiveCfg = Release|x64 + {14B5098C-79C8-44BB-A485-6638873F10BC}.Release|Any CPU.Build.0 = Release|x64 {14B5098C-79C8-44BB-A485-6638873F10BC}.Release|x64.ActiveCfg = Release|x64 {14B5098C-79C8-44BB-A485-6638873F10BC}.Release|x64.Build.0 = Release|x64 + {82A89B14-C583-4762-AAB1-F81E1C29E5D8}.Debug|Any CPU.ActiveCfg = Debug|x64 + {82A89B14-C583-4762-AAB1-F81E1C29E5D8}.Debug|Any CPU.Build.0 = Debug|x64 {82A89B14-C583-4762-AAB1-F81E1C29E5D8}.Debug|x64.ActiveCfg = Debug|x64 {82A89B14-C583-4762-AAB1-F81E1C29E5D8}.Debug|x64.Build.0 = Debug|x64 + {82A89B14-C583-4762-AAB1-F81E1C29E5D8}.Release|Any CPU.ActiveCfg = Release|x64 + {82A89B14-C583-4762-AAB1-F81E1C29E5D8}.Release|Any CPU.Build.0 = Release|x64 {82A89B14-C583-4762-AAB1-F81E1C29E5D8}.Release|x64.ActiveCfg = Release|x64 {82A89B14-C583-4762-AAB1-F81E1C29E5D8}.Release|x64.Build.0 = Release|x64 + {976CD388-3DE5-4BA3-942F-C61C8D8F4C89}.Debug|Any CPU.ActiveCfg = Debug|x64 + {976CD388-3DE5-4BA3-942F-C61C8D8F4C89}.Debug|Any CPU.Build.0 = Debug|x64 {976CD388-3DE5-4BA3-942F-C61C8D8F4C89}.Debug|x64.ActiveCfg = Debug|x64 {976CD388-3DE5-4BA3-942F-C61C8D8F4C89}.Debug|x64.Build.0 = Debug|x64 + {976CD388-3DE5-4BA3-942F-C61C8D8F4C89}.Release|Any CPU.ActiveCfg = Release|x64 + {976CD388-3DE5-4BA3-942F-C61C8D8F4C89}.Release|Any CPU.Build.0 = Release|x64 {976CD388-3DE5-4BA3-942F-C61C8D8F4C89}.Release|x64.ActiveCfg = Release|x64 {976CD388-3DE5-4BA3-942F-C61C8D8F4C89}.Release|x64.Build.0 = Release|x64 + {6E9F635E-3A47-4778-9925-D5C53FD2C9AC}.Debug|Any CPU.ActiveCfg = Debug|x64 + {6E9F635E-3A47-4778-9925-D5C53FD2C9AC}.Debug|Any CPU.Build.0 = Debug|x64 {6E9F635E-3A47-4778-9925-D5C53FD2C9AC}.Debug|x64.ActiveCfg = Debug|x64 {6E9F635E-3A47-4778-9925-D5C53FD2C9AC}.Debug|x64.Build.0 = Debug|x64 + {6E9F635E-3A47-4778-9925-D5C53FD2C9AC}.Release|Any CPU.ActiveCfg = Release|x64 + {6E9F635E-3A47-4778-9925-D5C53FD2C9AC}.Release|Any CPU.Build.0 = Release|x64 {6E9F635E-3A47-4778-9925-D5C53FD2C9AC}.Release|x64.ActiveCfg = Release|x64 {6E9F635E-3A47-4778-9925-D5C53FD2C9AC}.Release|x64.Build.0 = Release|x64 + {74E1AF06-9309-4340-BC9D-464BE306425E}.Debug|Any CPU.ActiveCfg = Debug|x64 + {74E1AF06-9309-4340-BC9D-464BE306425E}.Debug|Any CPU.Build.0 = Debug|x64 {74E1AF06-9309-4340-BC9D-464BE306425E}.Debug|x64.ActiveCfg = Debug|x64 {74E1AF06-9309-4340-BC9D-464BE306425E}.Debug|x64.Build.0 = Debug|x64 + {74E1AF06-9309-4340-BC9D-464BE306425E}.Release|Any CPU.ActiveCfg = Release|x64 + {74E1AF06-9309-4340-BC9D-464BE306425E}.Release|Any CPU.Build.0 = Release|x64 {74E1AF06-9309-4340-BC9D-464BE306425E}.Release|x64.ActiveCfg = Release|x64 {74E1AF06-9309-4340-BC9D-464BE306425E}.Release|x64.Build.0 = Release|x64 + {C80D0CB9-DB56-4039-8DB6-EABC624704DC}.Debug|Any CPU.ActiveCfg = Debug|x64 + {C80D0CB9-DB56-4039-8DB6-EABC624704DC}.Debug|Any CPU.Build.0 = Debug|x64 {C80D0CB9-DB56-4039-8DB6-EABC624704DC}.Debug|x64.ActiveCfg = Debug|x64 {C80D0CB9-DB56-4039-8DB6-EABC624704DC}.Debug|x64.Build.0 = Debug|x64 + {C80D0CB9-DB56-4039-8DB6-EABC624704DC}.Release|Any CPU.ActiveCfg = Release|x64 + {C80D0CB9-DB56-4039-8DB6-EABC624704DC}.Release|Any CPU.Build.0 = Release|x64 {C80D0CB9-DB56-4039-8DB6-EABC624704DC}.Release|x64.ActiveCfg = Release|x64 {C80D0CB9-DB56-4039-8DB6-EABC624704DC}.Release|x64.Build.0 = Release|x64 + {E153C9B7-F8A5-43B6-B112-84739E7E9224}.Debug|Any CPU.ActiveCfg = Debug|x64 + {E153C9B7-F8A5-43B6-B112-84739E7E9224}.Debug|Any CPU.Build.0 = Debug|x64 {E153C9B7-F8A5-43B6-B112-84739E7E9224}.Debug|x64.ActiveCfg = Debug|x64 {E153C9B7-F8A5-43B6-B112-84739E7E9224}.Debug|x64.Build.0 = Debug|x64 + {E153C9B7-F8A5-43B6-B112-84739E7E9224}.Release|Any CPU.ActiveCfg = Release|x64 + {E153C9B7-F8A5-43B6-B112-84739E7E9224}.Release|Any CPU.Build.0 = Release|x64 {E153C9B7-F8A5-43B6-B112-84739E7E9224}.Release|x64.ActiveCfg = Release|x64 {E153C9B7-F8A5-43B6-B112-84739E7E9224}.Release|x64.Build.0 = Release|x64 + {D67794A8-89AC-46E0-B303-94110BB382F8}.Debug|Any CPU.ActiveCfg = Debug|x64 + {D67794A8-89AC-46E0-B303-94110BB382F8}.Debug|Any CPU.Build.0 = Debug|x64 {D67794A8-89AC-46E0-B303-94110BB382F8}.Debug|x64.ActiveCfg = Debug|x64 {D67794A8-89AC-46E0-B303-94110BB382F8}.Debug|x64.Build.0 = Debug|x64 + {D67794A8-89AC-46E0-B303-94110BB382F8}.Release|Any CPU.ActiveCfg = Release|x64 + {D67794A8-89AC-46E0-B303-94110BB382F8}.Release|Any CPU.Build.0 = Release|x64 {D67794A8-89AC-46E0-B303-94110BB382F8}.Release|x64.ActiveCfg = Release|x64 {D67794A8-89AC-46E0-B303-94110BB382F8}.Release|x64.Build.0 = Release|x64 + {499177E3-A5C5-4845-B81A-F7F57004A9C4}.Debug|Any CPU.ActiveCfg = Debug|x64 + {499177E3-A5C5-4845-B81A-F7F57004A9C4}.Debug|Any CPU.Build.0 = Debug|x64 {499177E3-A5C5-4845-B81A-F7F57004A9C4}.Debug|x64.ActiveCfg = Debug|x64 {499177E3-A5C5-4845-B81A-F7F57004A9C4}.Debug|x64.Build.0 = Debug|x64 + {499177E3-A5C5-4845-B81A-F7F57004A9C4}.Release|Any CPU.ActiveCfg = Release|x64 + {499177E3-A5C5-4845-B81A-F7F57004A9C4}.Release|Any CPU.Build.0 = Release|x64 {499177E3-A5C5-4845-B81A-F7F57004A9C4}.Release|x64.ActiveCfg = Release|x64 {499177E3-A5C5-4845-B81A-F7F57004A9C4}.Release|x64.Build.0 = Release|x64 + {8CD32B3A-FE76-432F-9B0E-382A4D91A46D}.Debug|Any CPU.ActiveCfg = Debug|x64 + {8CD32B3A-FE76-432F-9B0E-382A4D91A46D}.Debug|Any CPU.Build.0 = Debug|x64 {8CD32B3A-FE76-432F-9B0E-382A4D91A46D}.Debug|x64.ActiveCfg = Debug|x64 {8CD32B3A-FE76-432F-9B0E-382A4D91A46D}.Debug|x64.Build.0 = Debug|x64 + {8CD32B3A-FE76-432F-9B0E-382A4D91A46D}.Release|Any CPU.ActiveCfg = Release|x64 + {8CD32B3A-FE76-432F-9B0E-382A4D91A46D}.Release|Any CPU.Build.0 = Release|x64 {8CD32B3A-FE76-432F-9B0E-382A4D91A46D}.Release|x64.ActiveCfg = Release|x64 {8CD32B3A-FE76-432F-9B0E-382A4D91A46D}.Release|x64.Build.0 = Release|x64 + {99DC2107-26CF-407B-8D09-6540E16DB20E}.Debug|Any CPU.ActiveCfg = Debug|x64 + {99DC2107-26CF-407B-8D09-6540E16DB20E}.Debug|Any CPU.Build.0 = Debug|x64 {99DC2107-26CF-407B-8D09-6540E16DB20E}.Debug|x64.ActiveCfg = Debug|x64 {99DC2107-26CF-407B-8D09-6540E16DB20E}.Debug|x64.Build.0 = Debug|x64 + {99DC2107-26CF-407B-8D09-6540E16DB20E}.Release|Any CPU.ActiveCfg = Release|x64 + {99DC2107-26CF-407B-8D09-6540E16DB20E}.Release|Any CPU.Build.0 = Release|x64 {99DC2107-26CF-407B-8D09-6540E16DB20E}.Release|x64.ActiveCfg = Release|x64 {99DC2107-26CF-407B-8D09-6540E16DB20E}.Release|x64.Build.0 = Release|x64 + {30AA51B6-3E6D-455D-8635-5A4034896E9F}.Debug|Any CPU.ActiveCfg = Debug|x64 + {30AA51B6-3E6D-455D-8635-5A4034896E9F}.Debug|Any CPU.Build.0 = Debug|x64 {30AA51B6-3E6D-455D-8635-5A4034896E9F}.Debug|x64.ActiveCfg = Debug|x64 {30AA51B6-3E6D-455D-8635-5A4034896E9F}.Debug|x64.Build.0 = Debug|x64 + {30AA51B6-3E6D-455D-8635-5A4034896E9F}.Release|Any CPU.ActiveCfg = Release|x64 + {30AA51B6-3E6D-455D-8635-5A4034896E9F}.Release|Any CPU.Build.0 = Release|x64 {30AA51B6-3E6D-455D-8635-5A4034896E9F}.Release|x64.ActiveCfg = Release|x64 {30AA51B6-3E6D-455D-8635-5A4034896E9F}.Release|x64.Build.0 = Release|x64 + {D97A05DB-1E5C-4790-83BB-F3DA3BB69ED3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D97A05DB-1E5C-4790-83BB-F3DA3BB69ED3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D97A05DB-1E5C-4790-83BB-F3DA3BB69ED3}.Debug|x64.ActiveCfg = Debug|Any CPU + {D97A05DB-1E5C-4790-83BB-F3DA3BB69ED3}.Debug|x64.Build.0 = Debug|Any CPU + {D97A05DB-1E5C-4790-83BB-F3DA3BB69ED3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D97A05DB-1E5C-4790-83BB-F3DA3BB69ED3}.Release|Any CPU.Build.0 = Release|Any CPU + {D97A05DB-1E5C-4790-83BB-F3DA3BB69ED3}.Release|x64.ActiveCfg = Release|Any CPU + {D97A05DB-1E5C-4790-83BB-F3DA3BB69ED3}.Release|x64.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -155,6 +237,7 @@ Global {8CD32B3A-FE76-432F-9B0E-382A4D91A46D} = {E560C356-F5BC-435B-9CA0-133C421DB04F} {99DC2107-26CF-407B-8D09-6540E16DB20E} = {E560C356-F5BC-435B-9CA0-133C421DB04F} {30AA51B6-3E6D-455D-8635-5A4034896E9F} = {E560C356-F5BC-435B-9CA0-133C421DB04F} + {D97A05DB-1E5C-4790-83BB-F3DA3BB69ED3} = {A1CA475F-9507-444C-B07A-33607BF389C7} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {A278B383-0D14-41B3-A71C-4505E1D503DF} diff --git a/Game.Library/Game.Library.csproj b/Game.Library/Game.Library.csproj new file mode 100644 index 00000000..f54fff41 --- /dev/null +++ b/Game.Library/Game.Library.csproj @@ -0,0 +1,13 @@ + + + + net8.0 + enable + enable + + + + + + +