Elaztek Developer Hub
Blamite Game Engine - blam!  00453.06.08.26.0624.blamite
The core library for the Blamite Game Engine.
console.hpp
Go to the documentation of this file.
1 #pragma once
2 
4 
9 #include <Strings/components/classes/events/game_engine_events/LogMessage/LogMessage.h>
10 #include <Strings/components/classes/events/game_engine_events/KeyPress/KeyPressEvent.h>
11 #include <Strings/components/classes/events/events.h>
12 
19 class BlamImGuiWindow_ImGuiConsole : public BlamImGuiWindow, public BlamEventListener
20 {
21 private:
22  std::string input_buffer = "";
23  std::vector<BlamLogMessage> history;
24 
25  bool focused = false;
26  bool needs_scroll = false;
27  bool needs_reclaim_focus = false;
28 
29  void FireCommand()
30  {
32  input_buffer = "";
33  }
34 
35 public:
37  {
38  Subscribe(BlamEventType::LogMessage);
39  Subscribe(BlamEventType::KeyPress);
40  BlamStrings::Events::RegisterListener(this, "imgui_console");
41  }
42 
44  {
45  BlamStrings::Events::UnregisterListener(this);
46  }
47 
48  void OnLogMessageEvent(LogMessageEvent* event)
49  {
50  history.push_back(event->GetLogMessage());
51  needs_scroll = true;
52  }
53 
54  void OnKeyPressEvent(KeyPressEvent* event)
55  {
56  if (focused)
57  {
58  if (event->GetVirtualKey() == SDLK_RETURN)
59  {
60  FireCommand();
61  needs_reclaim_focus = true;
62  }
63  }
64  }
65 
66  void Draw()
67  {
68  if (show)
69  {
70  if (ImGui::Begin("Console", &show))
71  {
72  float window_width = ImGui::GetWindowContentRegionWidth();
73  float window_height = ImGui::GetWindowHeight() - (70 * *Blam::Globals::GetGlobalAsFloat("ui_scale_factor"));
74 
75  if (ImGui::BeginChildFrame(ImGuiID("log_output"), ImVec2(window_width, window_height),
77  {
78  for (int i = 0; i < history.size(); i++)
79  {
80  BlamColor color = history.at(i).color;
81  ImVec4 message_color = ImVec4(color.GetRedAsFloat(), color.GetGreenAsFloat(), color.GetBlueAsFloat(), color.GetAlphaAsFloat());
82 
83  ImGui::PushID(std::string("console_item_" + std::to_string(i)).c_str());
84  ImGui::TextColored(message_color, history.at(i).message.c_str());
85  ImGui::PopID();
86  }
87 
88  if (needs_scroll)
89  {
91  needs_scroll = false;
92  }
93  }
95 
97 
98  ImGui::Text(ENGINE_TEXT("console_prompt_label").c_str());
99 
100  ImGui::SameLine();
101 
103  ImGui::InputText("", &input_buffer);
104 
105  if (needs_reclaim_focus)
106  {
108  needs_reclaim_focus = false;
109  }
110 
111  focused = ImGui::IsItemActive();
112 
113  ImGui::SameLine();
114 
115  if (ImGui::Button("Run Command"))
116  {
117  FireCommand();
118  }
119  }
120  ImGui::End();
121  }
122  }
123 };
color
BlamColor color
Typedef for a color field, used in tag definitions.
Definition: tags.h:447
BlamImGuiWindow::show
bool show
Controls whether or not the group should be shown. May not be used in all groups.
Definition: imgui.h:34
ImGui::SetScrollHereY
IMGUI_API void SetScrollHereY(float center_y_ratio=0.5f)
Definition: imgui.cpp:7349
BlamImGuiWindow_ImGuiConsole::BlamImGuiWindow_ImGuiConsole
BlamImGuiWindow_ImGuiConsole()
Definition: console.hpp:36
ImVec4
Definition: imgui.h:192
ImGui::InputText
IMGUI_API bool InputText(const char *label, char *buf, size_t buf_size, ImGuiInputTextFlags flags=0, ImGuiInputTextCallback callback=NULL, void *user_data=NULL)
Definition: imgui_widgets.cpp:3068
ImGui::SetItemDefaultFocus
IMGUI_API void SetItemDefaultFocus()
Definition: imgui.cpp:6966
Blam::Globals::GetGlobalAsFloat
BLAM float * GetGlobalAsFloat(std::string name)
Retrieves a global's value as a float.
Definition: globals.cpp:403
ImGui::End
IMGUI_API void End()
Definition: imgui.cpp:6016
console.h
engine_text.h
imgui_stdlib.h
ImGui::GetWindowContentRegionWidth
IMGUI_API float GetWindowContentRegionWidth()
Definition: imgui.cpp:6831
ImGui::SameLine
IMGUI_API void SameLine(float offset_from_start_x=0.0f, float spacing=-1.0f)
Definition: imgui.cpp:7147
BlamImGuiWindow
Class representing an ImGUI window.
Definition: imgui.h:31
ImVec2
Definition: imgui.h:179
SDLK_RETURN
@ SDLK_RETURN
Definition: SdlEmulationLayer.h:385
ImGui::SetKeyboardFocusHere
IMGUI_API void SetKeyboardFocusHere(int offset=0)
Definition: imgui.cpp:6956
ImGui::Begin
IMGUI_API bool Begin(const char *name, bool *p_open=NULL, ImGuiWindowFlags flags=0)
Definition: imgui.cpp:5397
ImGuiWindowFlags_AlwaysVerticalScrollbar
@ ImGuiWindowFlags_AlwaysVerticalScrollbar
Definition: imgui.h:728
ImGui::Text
IMGUI_API void Text(const char *fmt,...) IM_FMTARGS(1)
Definition: imgui_widgets.cpp:238
ImGui::IsItemActive
IMGUI_API bool IsItemActive()
Definition: imgui.cpp:4578
BlamImGuiWindow_ImGuiConsole::~BlamImGuiWindow_ImGuiConsole
~BlamImGuiWindow_ImGuiConsole()
Definition: console.hpp:43
globals.h
ImGui::BeginChildFrame
IMGUI_API bool BeginChildFrame(ImGuiID id, const ImVec2 &size, ImGuiWindowFlags flags=0)
Definition: imgui.cpp:4804
BlamImGuiWindow_ImGuiConsole::OnLogMessageEvent
void OnLogMessageEvent(LogMessageEvent *event)
Definition: console.hpp:48
ImGuiWindowFlags_HorizontalScrollbar
@ ImGuiWindowFlags_HorizontalScrollbar
Definition: imgui.h:725
ImGui::PopID
IMGUI_API void PopID()
Definition: imgui.cpp:7026
ImGuiID
unsigned int ImGuiID
Definition: imgui.h:130
BlamImGuiWindow_ImGuiConsole
Class for the ImGUI console implementation.
Definition: console.hpp:19
Blam::Resources::Console::RunCommandLine
BLAM BlamResult RunCommandLine(std::string command_line)
Executed the provided string as a console command.
Definition: console.cpp:271
BlamImGuiWindow_ImGuiConsole::OnKeyPressEvent
void OnKeyPressEvent(KeyPressEvent *event)
Definition: console.hpp:54
ENGINE_TEXT
#define ENGINE_TEXT(string_id)
Definition: engine_text.h:7
imgui.h
ImGui::GetWindowHeight
IMGUI_API float GetWindowHeight()
Definition: imgui.cpp:6586
ImGui::Separator
IMGUI_API void Separator()
Definition: imgui_widgets.cpp:1284
BlamImGuiWindow_ImGuiConsole::Draw
void Draw()
Draws the contents of the group.
Definition: console.hpp:66
ImGui::EndChildFrame
IMGUI_API void EndChildFrame()
Definition: imgui.cpp:4818
ImGui::TextColored
IMGUI_API void TextColored(const ImVec4 &col, const char *fmt,...) IM_FMTARGS(2)
Definition: imgui_widgets.cpp:257
ImGui::PushID
IMGUI_API void PushID(const char *str_id)
Definition: imgui.cpp:6995
ImGui::Button
IMGUI_API bool Button(const char *label, const ImVec2 &size=ImVec2(0, 0))
Definition: imgui_widgets.cpp:644