Elaztek Developer Hub
Blamite Game Engine - blam!  00406.12.10.23.1457.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.clear();
33  input_buffer = "";
34  }
35 
36 public:
38  {
39  Subscribe(BlamEventType::LogMessage);
40  Subscribe(BlamEventType::KeyPress);
41  BlamStrings::Events::RegisterListener(this, "imgui_console");
42  }
43 
45  {
46  BlamStrings::Events::UnregisterListener(this);
47  }
48 
49  void OnLogMessageEvent(LogMessageEvent* event)
50  {
51  history.push_back(event->GetLogMessage());
52  needs_scroll = true;
53  }
54 
55  void OnKeyPressEvent(KeyPressEvent* event)
56  {
57  if (focused)
58  {
59  if (event->GetVirtualKey() == SDLK_RETURN)
60  {
61  FireCommand();
62  needs_reclaim_focus = true;
63  }
64  }
65  }
66 
67  void Draw()
68  {
69  if (show)
70  {
71  if (ImGui::Begin("Console", &show))
72  {
73  float window_width = ImGui::GetWindowContentRegionWidth();
74  float window_height = ImGui::GetWindowHeight() - (70 * *Blam::Globals::GetGlobalAsFloat("ui_scale_factor"));
75 
76  if (ImGui::BeginChildFrame(ImGuiID("log_output"), ImVec2(window_width, window_height),
78  {
79  for (int i = 0; i < history.size(); i++)
80  {
81  BlamColor color = history.at(i).color;
82  ImVec4 message_color = ImVec4(color.GetRedAsFloat(), color.GetGreenAsFloat(), color.GetBlueAsFloat(), color.GetAlphaAsFloat());
83 
84  ImGui::PushID(std::string("console_item_" + std::to_string(i)).c_str());
85  ImGui::TextColored(message_color, history.at(i).message.c_str());
86  ImGui::PopID();
87  }
88 
89  if (needs_scroll)
90  {
92  needs_scroll = false;
93  }
94  }
96 
98 
99  ImGui::Text(ENGINE_TEXT("console_prompt_label").c_str());
100 
101  ImGui::SameLine();
102 
104  ImGui::InputText("", &input_buffer);
105 
106  if (needs_reclaim_focus)
107  {
109  needs_reclaim_focus = false;
110  }
111 
112  focused = ImGui::IsItemActive();
113 
114  ImGui::SameLine();
115 
116  if (ImGui::Button("Run Command"))
117  {
118  FireCommand();
119  }
120  }
121  ImGui::End();
122  }
123  }
124 };
color
BlamColor color
Typedef for a color field, used in tag definitions.
Definition: tags.h:416
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:37
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
engine_text.h
imgui_stdlib.h
ImGui::GetWindowContentRegionWidth
IMGUI_API float GetWindowContentRegionWidth()
Definition: imgui.cpp:6831
console.h
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:44
ImGui::BeginChildFrame
IMGUI_API bool BeginChildFrame(ImGuiID id, const ImVec2 &size, ImGuiWindowFlags flags=0)
Definition: imgui.cpp:4804
globals.h
BlamImGuiWindow_ImGuiConsole::OnLogMessageEvent
void OnLogMessageEvent(LogMessageEvent *event)
Definition: console.hpp:49
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:260
BlamImGuiWindow_ImGuiConsole::OnKeyPressEvent
void OnKeyPressEvent(KeyPressEvent *event)
Definition: console.hpp:55
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:67
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