Doxygen Samurai Engine 0.0.1
Doxygen Samurai Engine Documentation
Loading...
Searching...
No Matches
editor.cpp
Go to the documentation of this file.
1
2#include "Config.h"
3
4#include "editor.h"
5#include <iostream>
6#include "IconsForkAwesome.h"
8#include <safeSave/safeSave.h>
10
11
12#define DOCK_MAIN_WINDOW_SHORTCUT ICON_FK_EYE_SLASH " Hide main window"
13#define LOGS_SHORTCUT ICON_FK_COMMENT_O " Logs window"
14#define EDIT_SHORTCUTS ICON_FK_PENCIL_SQUARE " Edit shortcuts window"
15#define CONTAINERS_SHORTCUTS ICON_FK_MICROCHIP " Containers window"
16#define RELOAD_DLL_SHORTCUTS ICON_FK_REFRESH " Reload dll"
17#define TRANSPARENT_EDITOR_WINDOW ICON_FK_EYE " Transparent Editor window"
18#define ASSET_MANAGER_WINDOW ICON_FK_FILES_O " Asset manager"
19
20
22{
23
24 shortcutManager.registerShortcut(DOCK_MAIN_WINDOW_SHORTCUT, "Ctrl+Alt+D", &optionsFlags.hideMainWindow);
25 shortcutManager.registerShortcut(LOGS_SHORTCUT, "Ctrl+L", &windowFlags.logsWindow);
26 shortcutManager.registerShortcut(EDIT_SHORTCUTS, "", &windowFlags.editShortcutsWindow);
27 shortcutManager.registerShortcut(CONTAINERS_SHORTCUTS, "Ctrl+M", &windowFlags.containerManager);
28 shortcutManager.registerShortcut(RELOAD_DLL_SHORTCUTS, "Ctrl+Alt+R", &shouldReloadDll);
29 shortcutManager.registerShortcut(TRANSPARENT_EDITOR_WINDOW, "Ctrl+Alt+T", &windowFlags.transparentWindow);
30 shortcutManager.registerShortcut(ASSET_MANAGER_WINDOW, "Ctrl+Alt+A", &windowFlags.assetManagerWindow);
31
32 imguiId = imguiIDManager.getImguiIds(1);
33
34 logWindow.init(imguiIDManager);
35 editShortcutsWindow.init(imguiIDManager);
36 containersWindow.init(imguiIDManager);
37 assetManagerWindow.init(imguiIDManager);
38
39 if (sfs::safeLoad(&optionsFlags, sizeof(optionsFlags), SAMURAI_ENGINE_SAVES_PATH "options", false) != sfs::noError)
40 {
41 optionsFlags = {};
42 }
43
44 if (sfs::safeLoad(&windowFlags, sizeof(windowFlags), SAMURAI_ENGINE_SAVES_PATH "window", false) != sfs::noError)
45 {
46 windowFlags = {};
47 }
48
49
50}
51
52
53
55 samurai::ShortcutManager &shortcutManager, samurai::LogManager &logs,
56 samurai::LoadedDll &loadedDll
57 , samurai::samuraiImgui::ImGuiIdsManager &imguiIDsManager, samurai::ContainerManager& containerManager)
58{
59
60 if (!optionsFlags.hideMainWindow)
61 {
62
63#pragma region docking space init
64 ImGuiWindowFlags mainWindowFlags = ImGuiWindowFlags_MenuBar;
65 //if (optionsFlags.hideMainWindow)
66 {
67 mainWindowFlags = ImGuiWindowFlags_MenuBar |
68 ImGuiWindowFlags_NoResize |
69 ImGuiWindowFlags_NoMove |
70 ImGuiWindowFlags_NoCollapse |
71 ImGuiWindowFlags_NoBringToFrontOnFocus |
72 ImGuiWindowFlags_NoBackground |
73 ImGuiWindowFlags_NoTitleBar;
74
75 ImVec2 vWindowSize = ImGui::GetMainViewport()->Size;
76 ImVec2 vPos0 = ImGui::GetMainViewport()->Pos;
77 ImGui::SetNextWindowPos(ImVec2((float)vPos0.x, (float)vPos0.y), ImGuiCond_Always);
78 ImGui::SetNextWindowSize(ImVec2((float)vWindowSize.x, (float)vWindowSize.y), 0);
79 }
80#pragma endregion
81
82#pragma region main editor window
83
84 //ImGui::PushStyleColor(ImGuiCol_WindowBg, ImVec4(0.2f, 0.2f, 0.3f, 1.0f));
85
86
87 ImGui::PushID(imguiId);
88
89 ImGui::SetNextWindowBgAlpha(0);
90
91 if (ImGui::Begin(
92 "Main window",
93 /*p_open=*/nullptr,
94 mainWindowFlags
95 )
96 )
97 {
98
99
100 //if (optionsFlags.dockMainWindow)
101 {
102 static const ImGuiDockNodeFlags dockspaceFlags = ImGuiDockNodeFlags_None;
103 ImGuiID dockSpace = ImGui::GetID("MainWindowDockspace");
104 ImGui::DockSpace(dockSpace, ImVec2(0.0f, 0.0f), dockspaceFlags);
105 }
106
107 #pragma region menu
108 if (ImGui::BeginMenuBar())
109 {
110
111 if (ImGui::BeginMenu(ICON_FK_COGS " Engine"))
112 {
113 //todo submit tasks to the engine (usefull for this and also in gameplay)
114
115 if (ImGui::MenuItem(ICON_FK_REFRESH " Reload dll",
116 shortcutManager.getShortcut(RELOAD_DLL_SHORTCUTS), nullptr))
117 {
118 shouldReloadDll = true;
119 }
120
121
122 ImGui::EndMenu();
123 }
124
125 if (ImGui::BeginMenu("Options"))
126 {
127
128
129 ImGui::MenuItem(DOCK_MAIN_WINDOW_SHORTCUT,
130 shortcutManager.getShortcut(DOCK_MAIN_WINDOW_SHORTCUT), &optionsFlags.hideMainWindow);
131
132 ImGui::EndMenu();
133 }
134
135 if (ImGui::BeginMenu(ICON_FK_WINDOW_MAXIMIZE " Windows"))
136 {
137 ImGui::MenuItem(samurai::LogWindow::ICON_NAME,
138 shortcutManager.getShortcut(LOGS_SHORTCUT), &windowFlags.logsWindow);
139
141 shortcutManager.getShortcut(CONTAINERS_SHORTCUTS), &windowFlags.containerManager);
142
144 shortcutManager.getShortcut(ASSET_MANAGER_WINDOW), &windowFlags.assetManagerWindow);
145
146
147 ImGui::EndMenu();
148
149 }
150
151 if (ImGui::BeginMenu(ICON_FK_COG " Settings"))
152 {
154 shortcutManager.getShortcut(EDIT_SHORTCUTS), &windowFlags.editShortcutsWindow);
155
157
158 ImGui::MenuItem(TRANSPARENT_EDITOR_WINDOW,
159 shortcutManager.getShortcut(TRANSPARENT_EDITOR_WINDOW),
160 &windowFlags.transparentWindow);
161
162 ImGui::EndMenu();
163 }
164
165 ImGui::EndMenuBar();
166 }
167 #pragma endregion
168
169 }
170 ImGui::End();
171
172 ImGui::PopID();
173
174 #pragma endregion
175
176 }
177
178 if (windowFlags.transparentWindow)
179 {
180 ImGuiStyle &style = ::ImGui::GetStyle();
181 style.Colors[ImGuiCol_WindowBg].w = 0.f;
182 }
183 else
184 {
185 ImGuiStyle &style = ::ImGui::GetStyle();
186 style.Colors[ImGuiCol_WindowBg].w = 1.f;
187 }
188
189#pragma region log window
190 if (windowFlags.logsWindow)
191 {
192 logWindow.update(logs, windowFlags.logsWindow);
193 }
194#pragma endregion
195
196#pragma region shortcuts window
197 if (windowFlags.editShortcutsWindow)
198 {
199 editShortcutsWindow.update(shortcutManager, windowFlags.editShortcutsWindow);
200 }
201#pragma endregion
202
203#pragma region containers window
204 if (windowFlags.containerManager)
205 {
206 containersWindow.update(logs, windowFlags.containerManager,
207 loadedDll, containerManager, imguiIDsManager);
208 }
209#pragma endregion
210
211#pragma region asset manager window
212
213 if (windowFlags.assetManagerWindow)
214 {
215 assetManagerWindow.update(windowFlags.assetManagerWindow, containerManager, loadedDll, logs, imguiIDsManager);
216 }
217
218#pragma endregion
219
220
221
222}
223
225{
226
227 sfs::safeSave(&optionsFlags, sizeof(optionsFlags), SAMURAI_ENGINE_SAVES_PATH "options", false);
228 sfs::safeSave(&windowFlags, sizeof(windowFlags), SAMURAI_ENGINE_SAVES_PATH "window", false);
229
230
231}
232
233
#define SAMURAI_ENGINE_SAVES_PATH
Definition Config.h:11
#define CONTAINERS_SHORTCUTS
Definition editor.cpp:15
#define LOGS_SHORTCUT
Definition editor.cpp:13
#define ASSET_MANAGER_WINDOW
Definition editor.cpp:18
#define TRANSPARENT_EDITOR_WINDOW
Definition editor.cpp:17
#define DOCK_MAIN_WINDOW_SHORTCUT
Definition editor.cpp:12
#define EDIT_SHORTCUTS
Definition editor.cpp:14
#define RELOAD_DLL_SHORTCUTS
Definition editor.cpp:16
void displayMemorySizeToggle()
Definition gui.cpp:196
static constexpr char * ICON_NAME
static constexpr char * ICON_NAME
void init(samurai::samuraiImgui::ImGuiIdsManager &imguiIdsManager)
void saveFlagsData()
Definition editor.cpp:224
void init(samurai::ShortcutManager &shortcutManager, samurai::samuraiImgui::ImGuiIdsManager &imguiIDManager)
Definition editor.cpp:21
bool shouldReloadDll
Definition editor.h:50
samurai::LogWindow logWindow
Definition editor.h:43
void update(const samurai::Input &input, samurai::ShortcutManager &shortcutManager, samurai::LogManager &logs, samurai::LoadedDll &loadedDll, samurai::samuraiImgui::ImGuiIdsManager &imguiIDsManager, samurai::ContainerManager &containerManager)
Definition editor.cpp:54
struct samurai::Editor::@1 windowFlags
bool editShortcutsWindow
Definition editor.h:37
bool assetManagerWindow
Definition editor.h:40
samurai::ContainersWindow containersWindow
Definition editor.h:45
struct samurai::Editor::@0 optionsFlags
void init(samurai::samuraiImgui::ImGuiIdsManager &idManager)
Definition logWindow.cpp:8
static constexpr char * ICON_NAME
Definition logWindow.h:22
bool registerShortcut(const char *name, const char *s, bool *toggle, bool editable=1)
const char * getShortcut(const char *name)
static constexpr char * ICON_NAME
int getImguiIds(unsigned int count=1)
Definition gui.h:60