LUS Cleanup: GameOverlay and moves various GUI related files to it's own filter.

This commit is contained in:
Kenix3 2022-08-02 23:32:37 -04:00
parent 2d60c772bf
commit 8431cddb14
3 changed files with 238 additions and 231 deletions

View File

@ -10,7 +10,8 @@
#include "Lib/ImGui/imgui_internal.h" #include "Lib/ImGui/imgui_internal.h"
#include "Utils/StringHelper.h" #include "Utils/StringHelper.h"
void Ship::GameOverlay::LoadFont(const std::string& name, const std::string& path, float fontSize) { namespace Ship {
void GameOverlay::LoadFont(const std::string& name, const std::string& path, float fontSize) {
ImGuiIO& io = ImGui::GetIO(); ImGuiIO& io = ImGui::GetIO();
std::shared_ptr<Archive> base = GlobalCtx2::GetInstance()->GetResourceManager()->GetArchive(); std::shared_ptr<Archive> base = GlobalCtx2::GetInstance()->GetResourceManager()->GetArchive();
std::shared_ptr<File> font = std::make_shared<File>(); std::shared_ptr<File> font = std::make_shared<File>();
@ -20,9 +21,9 @@ void Ship::GameOverlay::LoadFont(const std::string& name, const std::string& pat
memcpy(font_data, font->buffer.get(), font->dwBufferSize); memcpy(font_data, font->buffer.get(), font->dwBufferSize);
Fonts[name] = io.Fonts->AddFontFromMemoryTTF(font_data, font->dwBufferSize, fontSize); Fonts[name] = io.Fonts->AddFontFromMemoryTTF(font_data, font->dwBufferSize, fontSize);
} }
} }
void Ship::GameOverlay::TextDraw(float x, float y, bool shadow, ImVec4 color, const char* fmt, ...) { void GameOverlay::TextDraw(float x, float y, bool shadow, ImVec4 color, const char* fmt, ...) {
char buf[1024]; char buf[1024];
va_list args; va_list args;
va_start(args, fmt); va_start(args, fmt);
@ -42,9 +43,9 @@ void Ship::GameOverlay::TextDraw(float x, float y, bool shadow, ImVec4 color, co
ImGui::Text(buf, args); ImGui::Text(buf, args);
ImGui::PopFont(); ImGui::PopFont();
ImGui::PopStyleColor(); ImGui::PopStyleColor();
} }
void Ship::GameOverlay::TextDrawNotification(float duration, bool shadow, const char* fmt, ...) { void GameOverlay::TextDrawNotification(float duration, bool shadow, const char* fmt, ...) {
char buf[1024]; char buf[1024];
va_list args; va_list args;
va_start(args, fmt); va_start(args, fmt);
@ -53,35 +54,36 @@ void Ship::GameOverlay::TextDrawNotification(float duration, bool shadow, const
va_end(args); va_end(args);
this->RegisteredOverlays[StringHelper::Sprintf("NotificationID:%d%d", rand(), this->RegisteredOverlays.size())] = new Overlay({ OverlayType::NOTIFICATION, ImStrdup(buf), duration, duration }); this->RegisteredOverlays[StringHelper::Sprintf("NotificationID:%d%d", rand(), this->RegisteredOverlays.size())] = new Overlay({ OverlayType::NOTIFICATION, ImStrdup(buf), duration, duration });
NeedsCleanup = true; NeedsCleanup = true;
} }
void Ship::GameOverlay::CleanupNotifications() { void GameOverlay::CleanupNotifications() {
if(!NeedsCleanup) return; if (!NeedsCleanup) return;
for (auto it = this->RegisteredOverlays.begin(); it != this->RegisteredOverlays.end(); ) { for (auto it = this->RegisteredOverlays.begin(); it != this->RegisteredOverlays.end(); ) {
if (it->second->type == OverlayType::NOTIFICATION && it->second->duration <= 0.0f) { if (it->second->type == OverlayType::NOTIFICATION && it->second->duration <= 0.0f) {
it = this->RegisteredOverlays.erase(it); it = this->RegisteredOverlays.erase(it);
} else { }
else {
++it; ++it;
} }
} }
NeedsCleanup = false; NeedsCleanup = false;
} }
float Ship::GameOverlay::GetScreenWidth() { float GameOverlay::GetScreenWidth() {
const ImGuiViewport* viewport = ImGui::GetMainViewport(); const ImGuiViewport* viewport = ImGui::GetMainViewport();
return viewport->Size.x; return viewport->Size.x;
} }
float Ship::GameOverlay::GetScreenHeight() { float GameOverlay::GetScreenHeight() {
const ImGuiViewport* viewport = ImGui::GetMainViewport(); const ImGuiViewport* viewport = ImGui::GetMainViewport();
return viewport->Size.y; return viewport->Size.y;
} }
float Ship::GameOverlay::GetStringWidth(const char* text) { float GameOverlay::GetStringWidth(const char* text) {
return CalculateTextSize(text).x; return CalculateTextSize(text).x;
} }
ImVec2 Ship::GameOverlay::CalculateTextSize(const char* text, const char* text_end, bool hide_text_after_double_hash, float wrap_width) { ImVec2 GameOverlay::CalculateTextSize(const char* text, const char* text_end, bool hide_text_after_double_hash, float wrap_width) {
ImGuiContext& g = *GImGui; ImGuiContext& g = *GImGui;
const char* text_display_end; const char* text_display_end;
@ -106,13 +108,13 @@ ImVec2 Ship::GameOverlay::CalculateTextSize(const char* text, const char* text_e
text_size.x = IM_FLOOR(text_size.x + 0.99999f); text_size.x = IM_FLOOR(text_size.x + 0.99999f);
return text_size; return text_size;
} }
void Ship::GameOverlay::Init() { void GameOverlay::Init() {
this->LoadFont("Press Start 2P", "assets/ship_of_harkinian/fonts/PressStart2P-Regular.ttf", 12.0f); this->LoadFont("Press Start 2P", "assets/ship_of_harkinian/fonts/PressStart2P-Regular.ttf", 12.0f);
this->LoadFont("Fipps", "assets/ship_of_harkinian/fonts/Fipps-Regular.otf", 32.0f); this->LoadFont("Fipps", "assets/ship_of_harkinian/fonts/Fipps-Regular.otf", 32.0f);
const std::string DefaultFont = this->Fonts.begin()->first; const std::string DefaultFont = this->Fonts.begin()->first;
if(!this->Fonts.empty()) { if (!this->Fonts.empty()) {
const std::string font = CVar_GetString("gOverlayFont", ImStrdup(DefaultFont.c_str())); const std::string font = CVar_GetString("gOverlayFont", ImStrdup(DefaultFont.c_str()));
for (auto& [name, _] : this->Fonts) { for (auto& [name, _] : this->Fonts) {
if (font.starts_with(name)) { if (font.starts_with(name)) {
@ -123,9 +125,9 @@ void Ship::GameOverlay::Init() {
} }
} }
SohImGui::console->Commands["overlay"] = { OverlayCommand, "Draw an overlay using a cvar value" }; SohImGui::console->Commands["overlay"] = { OverlayCommand, "Draw an overlay using a cvar value" };
} }
void Ship::GameOverlay::DrawSettings() { void GameOverlay::DrawSettings() {
ImGui::Text("Overlays Text Font"); ImGui::Text("Overlays Text Font");
if (ImGui::BeginCombo("##TextFont", this->CurrentFont.c_str())) { if (ImGui::BeginCombo("##TextFont", this->CurrentFont.c_str())) {
for (auto& [name, font] : this->Fonts) { for (auto& [name, font] : this->Fonts) {
@ -138,10 +140,10 @@ void Ship::GameOverlay::DrawSettings() {
} }
ImGui::EndCombo(); ImGui::EndCombo();
} }
} }
void Ship::GameOverlay::Draw() { void GameOverlay::Draw() {
const ImGuiViewport* viewport = ImGui::GetMainViewport(); const ImGuiViewport* viewport = ImGui::GetMainViewport();
ImGui::SetNextWindowPos(viewport->Pos, ImGuiCond_Always); ImGui::SetNextWindowPos(viewport->Pos, ImGuiCond_Always);
@ -154,7 +156,7 @@ void Ship::GameOverlay::Draw() {
float textY = 50; float textY = 50;
float notY = 0; float notY = 0;
for (auto &[key, overlay] : this->RegisteredOverlays) { for (auto& [key, overlay] : this->RegisteredOverlays) {
if (overlay->type == OverlayType::TEXT) { if (overlay->type == OverlayType::TEXT) {
const char* text = ImStrdup(overlay->value); const char* text = ImStrdup(overlay->value);
@ -176,7 +178,7 @@ void Ship::GameOverlay::Draw() {
break; break;
} }
free((void*) text); free((void*)text);
textY += 30; textY += 30;
} }
@ -194,10 +196,10 @@ void Ship::GameOverlay::Draw() {
} }
ImGui::End(); ImGui::End();
} }
bool Ship::OverlayCommand(const std::vector<std::string>& args) { bool OverlayCommand(const std::vector<std::string>& args) {
if (args.size() < 3) { if (args.size() < 3) {
return CMD_FAILED; return CMD_FAILED;
} }
@ -209,20 +211,25 @@ bool Ship::OverlayCommand(const std::vector<std::string>& args) {
if (!overlay->RegisteredOverlays.contains(key)) { if (!overlay->RegisteredOverlays.contains(key)) {
overlay->RegisteredOverlays[key] = new Overlay({ OverlayType::TEXT, ImStrdup(key), -1.0f }); overlay->RegisteredOverlays[key] = new Overlay({ OverlayType::TEXT, ImStrdup(key), -1.0f });
INFO("Added overlay: %s ", key); INFO("Added overlay: %s ", key);
} else { }
else {
ERROR("Overlay already exists: %s", key); ERROR("Overlay already exists: %s", key);
} }
} else if (args[1] == "remove") { }
else if (args[1] == "remove") {
if (overlay->RegisteredOverlays.contains(key)) { if (overlay->RegisteredOverlays.contains(key)) {
overlay->RegisteredOverlays.erase(key); overlay->RegisteredOverlays.erase(key);
INFO("Removed overlay: %s ", key); INFO("Removed overlay: %s ", key);
} else { }
else {
ERROR("Overlay not found: %s ", key); ERROR("Overlay not found: %s ", key);
} }
} }
} else { }
else {
ERROR("CVar %s does not exist", args[2].c_str()); ERROR("CVar %s does not exist", args[2].c_str());
} }
return CMD_SUCCESS; return CMD_SUCCESS;
}
} }

View File

@ -3,21 +3,21 @@
#include <vector> #include <vector>
#include "Lib/ImGui/imgui.h" #include "Lib/ImGui/imgui.h"
#include <map>
#include <unordered_map> #include <unordered_map>
enum class OverlayType { namespace Ship {
TEXT, IMAGE, NOTIFICATION
};
struct Overlay { enum class OverlayType {
TEXT, IMAGE, NOTIFICATION
};
struct Overlay {
OverlayType type; OverlayType type;
const char* value; const char* value;
float fadeTime; float fadeTime;
float duration; float duration;
}; };
namespace Ship {
class GameOverlay { class GameOverlay {
public: public:
std::unordered_map<std::string, Overlay*> RegisteredOverlays; std::unordered_map<std::string, Overlay*> RegisteredOverlays;

View File

@ -82,9 +82,6 @@
<Filter Include="Source Files\Logging"> <Filter Include="Source Files\Logging">
<UniqueIdentifier>{bd6557f1-9480-413b-b0cd-843f8efc1939}</UniqueIdentifier> <UniqueIdentifier>{bd6557f1-9480-413b-b0cd-843f8efc1939}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="Source Files\CustomImpl\Overlay">
<UniqueIdentifier>{3285ab8a-06d8-4dac-9af9-efb2a9723ab1}</UniqueIdentifier>
</Filter>
<Filter Include="Source Files\Lib\dr_libs"> <Filter Include="Source Files\Lib\dr_libs">
<UniqueIdentifier>{db6e02cc-fc4c-4138-8219-1d281ad93ec2}</UniqueIdentifier> <UniqueIdentifier>{db6e02cc-fc4c-4138-8219-1d281ad93ec2}</UniqueIdentifier>
</Filter> </Filter>
@ -97,6 +94,9 @@
<Filter Include="Source Files\Controller\InputEditor"> <Filter Include="Source Files\Controller\InputEditor">
<UniqueIdentifier>{010dc29b-d1f6-4793-a4e7-4156aa4fcdd6}</UniqueIdentifier> <UniqueIdentifier>{010dc29b-d1f6-4793-a4e7-4156aa4fcdd6}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="Source Files\GUI">
<UniqueIdentifier>{5d68254f-662d-4e8c-a57f-de0d8e1d4a58}</UniqueIdentifier>
</Filter>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClCompile Include="Factories\MaterialFactory.cpp"> <ClCompile Include="Factories\MaterialFactory.cpp">
@ -300,12 +300,6 @@
<ClCompile Include="Lib\ImGui\backends\imgui_impl_sdl.cpp"> <ClCompile Include="Lib\ImGui\backends\imgui_impl_sdl.cpp">
<Filter>Source Files\Lib\ImGui</Filter> <Filter>Source Files\Lib\ImGui</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="ImGuiImpl.cpp">
<Filter>Source Files\CustomImpl</Filter>
</ClCompile>
<ClCompile Include="Console.cpp">
<Filter>Source Files\CustomImpl</Filter>
</ClCompile>
<ClCompile Include="Lib\ImGui\backends\imgui_impl_dx11.cpp"> <ClCompile Include="Lib\ImGui\backends\imgui_impl_dx11.cpp">
<Filter>Source Files\Lib\ImGui</Filter> <Filter>Source Files\Lib\ImGui</Filter>
</ClCompile> </ClCompile>
@ -342,9 +336,6 @@
<ClCompile Include="GameSettings.cpp"> <ClCompile Include="GameSettings.cpp">
<Filter>Source Files\CustomImpl</Filter> <Filter>Source Files\CustomImpl</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="GameOverlay.cpp">
<Filter>Source Files\CustomImpl\Overlay</Filter>
</ClCompile>
<ClCompile Include="Audio.cpp"> <ClCompile Include="Audio.cpp">
<Filter>Source Files\Resources\Files</Filter> <Filter>Source Files\Resources\Files</Filter>
</ClCompile> </ClCompile>
@ -360,6 +351,15 @@
<ClCompile Include="Lib\Mercury\Mercury.cpp"> <ClCompile Include="Lib\Mercury\Mercury.cpp">
<Filter>Source Files\Lib\Mercury</Filter> <Filter>Source Files\Lib\Mercury</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="Console.cpp">
<Filter>Source Files\GUI</Filter>
</ClCompile>
<ClCompile Include="GameOverlay.cpp">
<Filter>Source Files\GUI</Filter>
</ClCompile>
<ClCompile Include="ImGuiImpl.cpp">
<Filter>Source Files\GUI</Filter>
</ClCompile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClInclude Include="Lib\tinyxml2\tinyxml2.h"> <ClInclude Include="Lib\tinyxml2\tinyxml2.h">
@ -587,12 +587,6 @@
<ClInclude Include="Lib\ImGui\backends\imgui_impl_sdl.h"> <ClInclude Include="Lib\ImGui\backends\imgui_impl_sdl.h">
<Filter>Source Files\Lib\ImGui</Filter> <Filter>Source Files\Lib\ImGui</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="ImGuiImpl.h">
<Filter>Source Files\CustomImpl</Filter>
</ClInclude>
<ClInclude Include="Console.h">
<Filter>Source Files\CustomImpl</Filter>
</ClInclude>
<ClInclude Include="Lib\ImGui\backends\imgui_impl_dx11.h"> <ClInclude Include="Lib\ImGui\backends\imgui_impl_dx11.h">
<Filter>Source Files\Lib\ImGui</Filter> <Filter>Source Files\Lib\ImGui</Filter>
</ClInclude> </ClInclude>
@ -647,9 +641,6 @@
<ClInclude Include="color.h"> <ClInclude Include="color.h">
<Filter>Header Files</Filter> <Filter>Header Files</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="GameOverlay.h">
<Filter>Source Files\CustomImpl\Overlay</Filter>
</ClInclude>
<ClInclude Include="Audio.h"> <ClInclude Include="Audio.h">
<Filter>Header Files\Resources\Files</Filter> <Filter>Header Files\Resources\Files</Filter>
</ClInclude> </ClInclude>
@ -677,5 +668,14 @@
<ClInclude Include="VirtualController.h"> <ClInclude Include="VirtualController.h">
<Filter>Source Files\Controller</Filter> <Filter>Source Files\Controller</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="Console.h">
<Filter>Source Files\GUI</Filter>
</ClInclude>
<ClInclude Include="GameOverlay.h">
<Filter>Source Files\GUI</Filter>
</ClInclude>
<ClInclude Include="ImGuiImpl.h">
<Filter>Source Files\GUI</Filter>
</ClInclude>
</ItemGroup> </ItemGroup>
</Project> </Project>