using System.Drawing; using System.Numerics; using Silk.NET.Core; using Silk.NET.Input; using Silk.NET.OpenGL; using Silk.NET.OpenGL.Extensions.ImGui; using Silk.NET.Windowing; using CaterpillarEngine.Rendering; using CaterpillarEngine.Objects; using CaterpillarEngine.IMGUI; using ImGuiNET; namespace CaterpillarEngine { public class MainWindow { #region Variables #region General private readonly IWindow _mainWindow = default!; private IInputContext _input = default!; private ImGuiController _controller = default!; #endregion #region Editor //private GameObject CurrentObject = default!; #endregion #region Testing GameObject go = new GameObject("Test"); #endregion #endregion public MainWindow(WindowOptions options) { _mainWindow = Window.Create(options); _mainWindow.FileDrop += _mainWindow_FileDrop; _mainWindow.Load += MainWindow_Load; _mainWindow.Update += MainWindow_Update; _mainWindow.Render += MainWindow_Render; _mainWindow.Resize += MainWindow_Resize; _mainWindow.Closing += MainWindow_Closing; } private void _mainWindow_FileDrop(string[] obj) { } public void Run() => _mainWindow.Run(); public void Close() => _mainWindow.Close(); protected virtual void MainWindow_Resize(Silk.NET.Maths.Vector2D obj) => GraphicsDevice.ViewPort(obj); protected virtual void MainWindow_Load() { var icon = RenderLoader.LoadRawImage(@"Assets\Sprites\csharp.png"); _mainWindow.SetWindowIcon(ref icon); _mainWindow.Center(); _controller = new ( GraphicsDevice.GL = _mainWindow.CreateOpenGL(), _mainWindow, _input = _mainWindow.CreateInput() ); } protected virtual void MainWindow_Update(double obj) { if (_input.Keyboards[0].IsKeyPressed(Key.Escape)) Close(); } protected virtual void MainWindow_Render(double obj) { //_controller.Update((float)obj); GraphicsDevice.ClearColor(Color.AliceBlue); go.Render(obj); /* if (ImGui.Begin("Inspector",ImGuiWindowFlags.NoCollapse)) { foreach (Component component in go) { component.ImGuiInspectorValues(); } if (ImGui.BeginPopup("1")) { if (ImGui.MenuItem("Transform")) { go.AddComponent(); } if (ImGui.MenuItem("Sprite Renderer")) { go.AddComponent(); } ImGui.EndPopup(); } if (ImGui.Button("Add Component", new(ImGui.GetWindowWidth(),0))) { ImGui.OpenPopup("1"); } ImGui.End(); } */ if (!_mainWindow.IsClosing) { //_controller.Render(); } } protected virtual void MainWindow_Closing() { GraphicsDevice.DisposeGL(); _input.Dispose(); _controller.Dispose(); foreach (Component component in go) { component.OnClosing(); } } } }