Blamite Game Engine - Blam (Core)
menubar.hpp
Go to the documentation of this file.
1 #pragma once
2 
3 #include "../debug_ui.h"
4 
5 #include "../imgui_windows\builtin\dx11_window.hpp"
6 #include "devtools_bar.hpp"
9 #include "version_data.h"
14 
15 namespace Blam::DebugUI::Widgets
16 {
23  {
24  private:
25  DevToolsBar* old_menu;
26 
27  bool old_devtools_bar = false;
28  bool show_menubar = true;
29 
30  int commit_hash_label = 0;
31 
32  public:
37  {
38  old_menu = new DevToolsBar();
39 
40  old_menu->SetDrawModeNotMainMenu();
41  }
42 
47  {
48  delete(old_menu);
49  }
50 
57  void Draw()
58  {
59  // Main Menu (titlebar)
60  if (show_menubar)
61  {
62  if (ImGui::BeginMainMenuBar())
63  {
64  using namespace Blam::DebugUI::Windows;
65 
66  if (ImGui::BeginMenu("File"))
67  {
68  ImGui::MenuItem("Open .map file", NULL, false, false); ShowNYITooltip();
69  ImGui::MenuItem("Return to mainmenu", NULL, false, false); ShowNYITooltip();
70  if (ImGui::MenuItem("Open game dir", NULL)) Blam::Utils::IO::OpenGameDirectory();
71  ImGui::Separator();
72  if (ImGui::MenuItem("Open Report Viewer", NULL)) Blam::Utils::OpenLocalWebURL("/reports/index.html");
73  ImGui::Separator();
74  ImGui::MenuItem("Exit", NULL, duigvs(exit_via_menu));
75  ImGui::EndMenu();
76  }
77  if (ImGui::BeginMenu("Tools"))
78  {
79  ImGui::MenuItem("Cheats", NULL, false, false); ShowNYITooltip();
80  ImGui::Separator();
81  if (ImGui::BeginMenu("Network"))
82  {
83  ImGui::MenuItem("Show Network Info", NULL, duigvs(network_stats));
84  ImGui::MenuItem("Discord Rich Presence", NULL, duigvs(discord_rpc_ui));
85  ImGui::EndMenu();
86  }
87 
88  if (ImGui::BeginMenu("Rendering"))
89  {
90  ImGui::MenuItem("Render Stack Editor", NULL, duigvs(render_stack_editor));
91  ImGui::MenuItem("Font Editor", NULL, duigvs(font_editor));
92 
93  ImGui::EndMenu();
94  }
95 
96  if (ImGui::BeginMenu("Test"))
97  {
98  if (ImGui::BeginMenu("Deprecated"))
99  {
100  ImGui::TextColored(ImVec4(255, 0, 0, 1), "These items will be replaced/removed in the future.");
101  ImGui::Separator();
102  ImGui::MenuItem("Crash Test", NULL, duigvs(crash_test_ui));
103  ImGui::MenuItem("Access Key Dialog", NULL, duigvs(license_startup_prompt));
104  ImGui::MenuItem("Old Menu", NULL, &old_devtools_bar);
105 
106  ImGui::EndMenu();
107  }
108 
109  if (ImGui::BeginMenu("Rendering"))
110  {
111  ImGui::MenuItem("Direct2D Test Window", NULL, duigvs(d2d_test));
112  ImGui::Separator();
113  ImGui::MenuItem("Toggle Render Target Clearing", "F3 + R", BlamRendering::DirectX::RenderTargetClearing());
114 
115  ImGui::EndMenu();
116  }
117  ImGui::MenuItem("DX11 Example Window", NULL, duigvs(dx11_window));
118  ImGui::MenuItem("ImGui Test Window", NULL, ((Windows::DirectX11Window*)GetDrawListItem(dx11_window))->ShowTestWindow());
119 
120  ImGui::EndMenu();
121  }
122 
123  ImGui::Separator();
124  if (ImGui::MenuItem("Take Screenshot", "F2")) Blam::TakeScreenshot();
125 
126  ImGui::Separator();
127 
128  ImGui::MenuItem("Tag Editor", NULL, duigvs(tag_editor));
129 
130  ImGui::EndMenu();
131  }
132  if (ImGui::BeginMenu("Network Tools"))
133  {
134  ImGui::MenuItem("this menu is a placeholder, come back later", NULL, false, false); ShowNYITooltip();
135  ImGui::EndMenu();
136  }
137  if (ImGui::BeginMenu("Debug"))
138  {
139  if (ImGui::MenuItem("Debug Menu", "PgUp"))
140  {
142 
143  if (debug_menu_stack_item)
144  {
145  debug_menu_stack_item->toggleVisibility();
146  }
147  else
148  {
149  Blam::Logger::LogEventForce("### ERROR failed to find debug menu in render stack!", WSV_ERROR);
150  }
151  }
152  ImGui::MenuItem("Debug Menu (imgui)", "Shift + PgUp", duigvs(debug_menu));
153  ImGui::EndMenu();
154  }
155  if (ImGui::BeginMenu("Settings"))
156  {
157  ImGui::MenuItem("Configuration Editor", NULL, false, false); ShowNYITooltip();
158  ImGui::MenuItem("Theme Selector", NULL, duigvs(theme_selector));
159  ImGui::EndMenu();
160  }
161  if (ImGui::BeginMenu("Monitoring"))
162  {
163  ImGui::MenuItem("Show FPS", NULL, false, false); ShowNYITooltip();
164  ImGui::Separator();
165  ImGui::MenuItem("Show Usage Info", NULL, false, false); ShowNYITooltip();
166  ImGui::EndMenu();
167  }
168  if (ImGui::BeginMenu("Help"))
169  {
170  ImGui::MenuItem("ImGui User Guide", NULL, duigvs(imgui_user_guide));
171  ImGui::Separator();
172  ImGui::MenuItem("About ImGui", NULL, duigvs(imgui_info));
173  ImGui::MenuItem("About Blamite", NULL, duigvs(engine_info_new));
174  ImGui::EndMenu();
175  }
176 
177 
178  ImGui::SameLine(ImGui::GetWindowWidth() - (commit_hash_label + 15));
179  ImGui::TextDisabled(CURRENT_COMMIT);
180  if (ImGui::IsItemHovered())
181  {
182  ImGui::BeginTooltip();
183  ImGui::PushTextWrapPos(450.0f);
184  ImGui::TextUnformatted("Current git commit of this build");
185 
186  ImGui::Separator();
187 
188  ImGui::TextUnformatted("If this build was created locally, this number will be inaccurate. Only builds acquired from Jenkins or BuildMaster will be accurate.");
189 
190 
191  ImGui::PopTextWrapPos();
192  ImGui::EndTooltip();
193  }
194 
195  ImVec2 commit_label_size = ImGui::GetItemRectSize();
196 
197  commit_hash_label = commit_label_size.x;
198 
199  ImGui::EndMainMenuBar();
200  }
201  }
202 
203  if (old_devtools_bar)
204  {
205  ImGui::Begin("Old Menu", &old_devtools_bar, ImGuiWindowFlags_MenuBar | ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoResize);
206 
207  old_menu->Draw();
208 
209  ImGui::Text("can't imagine why you'd need it, but here it is");
210 
211  ImGui::End();
212  }
213  }
214  };
215 }
Blam::DebugUI::d2d_test
@ d2d_test
Definition: debug_ui.h:382
Blam::DebugUI::tag_editor
@ tag_editor
Definition: debug_ui.h:389
Blam::DebugUI::discord_rpc_ui
@ discord_rpc_ui
Definition: debug_ui.h:383
Blam::DebugUI::dx11_window
@ dx11_window
Definition: debug_ui.h:367
Blam::DebugUI::Widgets::MenuBar::Draw
void Draw()
Draws the menu bar contents and calculates the size of the commit hash text size.
Definition: menubar.hpp:57
render_stack.h
Blam::DebugUI::render_stack_editor
@ render_stack_editor
Definition: debug_ui.h:386
logger.h
Blam::Utils::IO::OpenGameDirectory
BLAM void OpenGameDirectory()
Opens the engine's game directory in Windows Explorer.
Definition: io.cpp:114
Blam::DebugUI::Widgets::MenuBar::MenuBar
MenuBar()
Initializes data for the legacy menu bar and instructs it to draw as a standard menu rather than the ...
Definition: menubar.hpp:36
Blam::DebugUI::Windows::DirectX11Window
Class for the default ImGUI DX11 sample window.
Definition: dx11_window.hpp:13
version_data.h
Blam::DebugUI::engine_info_new
@ engine_info_new
Definition: debug_ui.h:392
Blam::Utils::OpenLocalWebURL
BLAM void OpenLocalWebURL(std::string local_path)
Opens the specified relative path in the user's default web browser.
Definition: web.cpp:9
Blam::DebugUI::imgui_info
@ imgui_info
Definition: debug_ui.h:393
Blam::DebugUI::Widgets::MenuBar::~MenuBar
~MenuBar()
Cleans up the legacy menu bar data.
Definition: menubar.hpp:46
Blam::DebugUI::imgui_user_guide
@ imgui_user_guide
Definition: debug_ui.h:397
BlamRendering::RenderStack::DebugMenu
Stack item representing the debug menu.
Definition: debug_menu.hpp:20
BlamRendering::RenderStack::DebugMenu::toggleVisibility
void toggleVisibility()
Toggles the visibility of the debug menu.
Definition: debug_menu.hpp:602
Blam::DebugUI::Widgets::DevToolsBar
Class for the original menu bar shown with ImGUI.
Definition: devtools_bar.hpp:17
WSV_ERROR
#define WSV_ERROR
Macro for 'Error' log seveirty. Original pre-enum value was 2.
Definition: logger.h:17
Blam::DebugUI::debug_menu
@ debug_menu
Definition: debug_ui.h:394
debug_menu.hpp
Blam::TakeScreenshot
BLAM void TakeScreenshot()
Captures the current frame and saves it to a file.
Definition: screenshot.cpp:100
Blam::DebugUI::font_editor
@ font_editor
Definition: debug_ui.h:384
Blam::DebugUI::theme_selector
@ theme_selector
Definition: debug_ui.h:398
Blam::DebugUI::license_startup_prompt
@ license_startup_prompt
Definition: debug_ui.h:375
Blam::DebugUI::ImGUIDrawingGroup
Class representing an ImGUI drawing group/draw list item.
Definition: debug_ui.h:408
utilities.h
CURRENT_COMMIT
#define CURRENT_COMMIT
Definition: version_data.h:14
Blam::DebugUI::GetDrawListItem
BLAM ImGUIDrawingGroup * GetDrawListItem(DrawListItem key)
Retrieves a drawing group with the specified ID.
Definition: drawing_list.cpp:21
engine_definitions.h
Blam::DebugUI::crash_test_ui
@ crash_test_ui
Definition: debug_ui.h:381
Blam::DebugUI::Widgets::ShowNYITooltip
BLAM void ShowNYITooltip()
Shows a tooltip with the text Not yet implemented upon hovered.
Definition: widgets.cpp:18
Blam::Logger::LogEventForce
BLAM void LogEventForce(std::string message, LogSeverity severity)
Forcibly logs a message to the log and/or console.
Definition: aliases.cpp:137
io.h
Blam::DebugUI::Widgets::DevToolsBar::Draw
void Draw()
Draws the menu bar contents.
Definition: devtools_bar.hpp:44
Blam::DebugUI::exit_via_menu
@ exit_via_menu
Definition: debug_ui.h:396
Blam::DebugUI::Windows
Legacy namespace to contain data for the legacy ImGUI console.
Definition: debug_ui.h:493
Blam::DebugUI::Widgets
Namespace containing general-purpose widgets used in multiple ImGUI drawing groups/windows.
Definition: devtools_bar.hpp:9
Text
@ Text
Master text object that wraps around both BitmapText and DWText.
Definition: render_stack.h:73
Blam::DebugUI::Widgets::MenuBar
Class for the main ImGUI menu bar.
Definition: menubar.hpp:22
BlamRendering::DirectX::RenderTargetClearing
BLAM bool * RenderTargetClearing()
Retrieves whether or not to enable render target clearing.
Definition: render_manage.cpp:597
duigvs
#define duigvs(x)
Macro for Blam::DebugUI::GetVisibility().
Definition: debug_ui.h:20
devtools_bar.hpp
BlamRendering::RenderStack::GetStackItem
BLAM StackObjectBase * GetStackItem(std::string id)
Retrieves an item from the render stack.
Definition: render_stack.cpp:75
Blam::DebugUI::Widgets::DevToolsBar::SetDrawModeNotMainMenu
void SetDrawModeNotMainMenu()
Instructs the menu to draw as a menu bar within a window, rather than as part of the main menu bar.
Definition: devtools_bar.hpp:36
Blam::DebugUI::network_stats
@ network_stats
Definition: debug_ui.h:385