|
6 | 6 | using SharpEngine.Core.Math; |
7 | 7 | using SharpEngine.Core.Renderer; |
8 | 8 | using SharpEngine.Core.Utils; |
9 | | -using SharpEngine.Editor.Build; |
10 | | -using SharpEngine.Editor.GUI; |
11 | | -using SharpEngine.Editor.Project.Data; |
12 | | -using SharpEngine.Editor.Scene; |
13 | 9 |
|
14 | 10 | namespace SharpEngine.Editor; |
15 | 11 |
|
16 | | -public class Editor |
| 12 | +public class Editor: Window |
17 | 13 | { |
18 | | - internal static Editor? Instance { get; private set; } |
19 | | - |
20 | | - internal static readonly Core.Scene CurrentScene = new GameScene(); |
21 | | - internal static string? ProjectFolder { get; set; } = null; |
22 | | - internal static string ProjectName { get; set; } = ""; |
23 | | - internal static ProjectData ProjectData { get; set; } = new() |
24 | | - { |
25 | | - Title = "", |
26 | | - Scenes = [] |
27 | | - }; |
28 | | - |
29 | | - private static bool _exists { get; set; } = false; |
30 | 14 | private RenderTexture2D _renderTexture; |
31 | 15 |
|
32 | | - private int _windowSizeX; |
33 | | - private int _windowSizeY; |
34 | | - |
35 | | - private MainMenuBar? _mainMenuBar; |
36 | | - private RenderWindow? _renderWindow; |
37 | | - private Properties? _properties; |
38 | | - private Objects? _sceneTree; |
39 | | - private AssetsExplorer? _assetsExplorer; |
40 | | - |
41 | | - public Editor() |
| 16 | + public Editor(): base(1800, 900, "SharpEngine Editor", Core.Utils.Color.Black, null, true, true, true) |
42 | 17 | { |
43 | | - Instance = this; |
44 | | - |
45 | 18 | if (!Path.Exists("Projects")) |
46 | 19 | Directory.CreateDirectory("Projects"); |
47 | 20 |
|
48 | 21 | Raylib.SetConfigFlags(ConfigFlags.ResizableWindow); |
49 | | - var window = new Window(900, 600, "SharpEngine Editor", debug: true, fileLog: true) |
50 | | - { |
51 | | - RenderImGui = RenderImGui |
52 | | - }; |
53 | | - Raylib.MaximizeWindow(); |
54 | 22 | ImGui.GetIO().ConfigFlags |= ImGuiConfigFlags.DockingEnable; |
55 | 23 |
|
56 | | - _windowSizeX = 900; |
57 | | - _windowSizeY = 600; |
58 | | - window.AddScene(new EditorScene(this)); |
59 | | - |
60 | | - CurrentScene.Window = window; |
61 | | - |
62 | | - window.Run(); |
63 | | - } |
64 | | - |
65 | | - public void Load() |
66 | | - { |
67 | 24 | DebugManager.Log(LogLevel.LogInfo, "EDITOR: Loading..."); |
68 | | - CurrentScene.Load(); |
69 | 25 | _renderTexture = Raylib.LoadRenderTexture(900, 600); |
70 | | - |
71 | | - _mainMenuBar = new MainMenuBar(); |
72 | | - _renderWindow = new RenderWindow(_renderTexture); |
73 | | - _properties = new Properties(); |
74 | | - _sceneTree = new Objects(); |
75 | | - _assetsExplorer = new AssetsExplorer(); |
76 | 26 | DebugManager.Log(LogLevel.LogInfo, "EDITOR: Loaded !"); |
| 27 | + |
| 28 | + AddScene(new Scene()); |
| 29 | + |
| 30 | + Run(); |
| 31 | + |
| 32 | + Unload(); |
77 | 33 | } |
78 | 34 |
|
79 | 35 | public void Unload() |
80 | 36 | { |
81 | 37 | DebugManager.Log(LogLevel.LogInfo, "EDITOR: Unloading..."); |
82 | 38 | Raylib.UnloadRenderTexture(_renderTexture); |
83 | | - CurrentScene.Unload(); |
84 | 39 | DebugManager.Log(LogLevel.LogInfo, "EDITOR: Unloaded !"); |
85 | 40 | } |
86 | | - |
87 | | - public void UpdateRenderSize() |
88 | | - { |
89 | | - _renderTexture.Texture.Width = ProjectData.Width; |
90 | | - _renderTexture.Texture.Height = ProjectData.Height; |
91 | | - } |
92 | | - |
93 | | - private void RenderCurrentScene(Window window) |
94 | | - { |
95 | | - CurrentScene.Draw(); |
96 | | - |
97 | | - Raylib.BeginTextureMode(_renderTexture); |
98 | | - Raylib.ClearBackground(ProjectData.BackgroundColor); |
99 | | - SERender.Draw(window); |
100 | | - Raylib.EndTextureMode(); |
101 | | - } |
102 | | - |
103 | | - private void RenderImGui(Window window) |
104 | | - { |
105 | | - // Resize if necessary |
106 | | - if (Raylib.GetScreenWidth() != _windowSizeX || Raylib.GetScreenHeight() != _windowSizeY) |
107 | | - { |
108 | | - _windowSizeX = Raylib.GetScreenWidth(); |
109 | | - _windowSizeY = Raylib.GetScreenHeight(); |
110 | | - window.SeImGui.Resize(_windowSizeX, _windowSizeY); |
111 | | - } |
112 | | - |
113 | | - // Render Current Scene |
114 | | - RenderCurrentScene(window); |
115 | | - |
116 | | - // Create ImGui |
117 | | - if (ProjectFolder != null) |
118 | | - { |
119 | | - _mainMenuBar?.Render(); |
120 | | - |
121 | | - ImGui.DockSpaceOverViewport( |
122 | | - 0, |
123 | | - ImGui.GetMainViewport() |
124 | | - ); |
125 | | - _renderWindow?.Render(); |
126 | | - _sceneTree?.Render(); |
127 | | - _assetsExplorer?.Render(); |
128 | | - _properties?.Render(); |
129 | | - } |
130 | | - else |
131 | | - { |
132 | | - var io = ImGui.GetIO(); |
133 | | - ImGui.SetNextWindowSize(new Vec2(io.DisplaySize.X / 2f, io.DisplaySize.Y / 2f)); |
134 | | - ImGui.SetWindowPos(new Vec2(io.DisplaySize.X / 2f, io.DisplaySize.Y / 2f)); |
135 | | - |
136 | | - if ( |
137 | | - ImGui.Begin( |
138 | | - "Projects List", |
139 | | - ImGuiWindowFlags.NoMove |
140 | | - | ImGuiWindowFlags.NoResize |
141 | | - | ImGuiWindowFlags.NoCollapse |
142 | | - ) |
143 | | - ) |
144 | | - RenderProjectsList(); |
145 | | - } |
146 | | - } |
147 | | - |
148 | | - private void RenderProjectsList() |
149 | | - { |
150 | | - foreach (var directory in Directory.GetDirectories("Projects").Where(x => ImGui.Button(Path.GetFileName(x)))) |
151 | | - { |
152 | | - ProjectName = Path.GetFileName(directory); |
153 | | - ProjectFolder = directory; |
154 | | - AssetsExplorer.CurrentPath = ProjectFolder; |
155 | | - ProjectData = JsonSerializer.Deserialize<ProjectData>( |
156 | | - File.ReadAllText($"Projects/{ProjectName}/project.json") |
157 | | - ) ?? throw new JsonException("Cannot deserialize project"); |
158 | | - UpdateRenderSize(); |
159 | | - } |
160 | | - ImGui.Separator(); |
161 | | - if (_exists) |
162 | | - ImGui.TextColored(Core.Utils.Color.Red.ToVec4(), "Project already exists !"); |
163 | | - |
164 | | - var project = ProjectName; |
165 | | - ImGui.InputText("Project Name", ref project, 90); |
166 | | - ProjectName = project; |
167 | | - |
168 | | - if (ImGui.Button("Create")) |
169 | | - { |
170 | | - if (Directory.Exists($"Projects/{ProjectName}")) |
171 | | - _exists = true; |
172 | | - else |
173 | | - { |
174 | | - ProjectData = new ProjectData |
175 | | - { |
176 | | - Width = 900, |
177 | | - Height = 600, |
178 | | - Title = ProjectName, |
179 | | - BackgroundColor = Core.Utils.Color.Black, |
180 | | - CurrentScene = 0, |
181 | | - Scenes = [] |
182 | | - }; |
183 | | - Directory.CreateDirectory($"Projects/{ProjectName}"); |
184 | | - File.WriteAllText( |
185 | | - $"Projects/{ProjectName}/project.json", |
186 | | - JsonSerializer.Serialize(ProjectData) |
187 | | - ); |
188 | | - ProjectBuilder.CreateSolution(ProjectName); |
189 | | - ProjectFolder = $"Projects/{ProjectName}"; |
190 | | - AssetsExplorer.CurrentPath = ProjectFolder; |
191 | | - } |
192 | | - } |
193 | | - ImGui.End(); |
194 | | - } |
195 | 41 | } |
0 commit comments