mirror of
https://github.com/HarbourMasters/Shipwright.git
synced 2024-11-26 11:22:17 -05:00
Fixed id and cleanup on finish of notifications (#304)
Co-authored-by: KiritoDv <nohomoboi01@gmail.com>
This commit is contained in:
parent
3bc0564d9a
commit
b3d19eee3a
@ -8,6 +8,7 @@
|
|||||||
#include "SohImGuiImpl.h"
|
#include "SohImGuiImpl.h"
|
||||||
#include "TextureMod.h"
|
#include "TextureMod.h"
|
||||||
#include "Lib/ImGui/imgui_internal.h"
|
#include "Lib/ImGui/imgui_internal.h"
|
||||||
|
#include "Utils/StringHelper.h"
|
||||||
|
|
||||||
void Ship::GameOverlay::LoadFont(const std::string& name, const std::string& path, float fontSize) {
|
void Ship::GameOverlay::LoadFont(const std::string& name, const std::string& path, float fontSize) {
|
||||||
ImGuiIO& io = ImGui::GetIO();
|
ImGuiIO& io = ImGui::GetIO();
|
||||||
@ -50,10 +51,21 @@ void Ship::GameOverlay::TextDrawNotification(float duration, bool shadow, const
|
|||||||
vsnprintf(buf, IM_ARRAYSIZE(buf), fmt, args);
|
vsnprintf(buf, IM_ARRAYSIZE(buf), fmt, args);
|
||||||
buf[IM_ARRAYSIZE(buf) - 1] = 0;
|
buf[IM_ARRAYSIZE(buf) - 1] = 0;
|
||||||
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[fmt] = new Overlay({ OverlayType::NOTIFICATION, ImStrdup(buf), duration, duration });
|
NeedsCleanup = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Ship::GameOverlay::CleanupNotifications() {
|
||||||
|
if(!NeedsCleanup) return;
|
||||||
|
for (auto it = this->RegisteredOverlays.begin(); it != this->RegisteredOverlays.end(); ) {
|
||||||
|
if (it->second->type == OverlayType::NOTIFICATION && it->second->duration <= 0.0f) {
|
||||||
|
it = this->RegisteredOverlays.erase(it);
|
||||||
|
} else {
|
||||||
|
++it;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
NeedsCleanup = false;
|
||||||
|
}
|
||||||
|
|
||||||
float Ship::GameOverlay::GetScreenWidth() {
|
float Ship::GameOverlay::GetScreenWidth() {
|
||||||
const ImGuiViewport* viewport = ImGui::GetMainViewport();
|
const ImGuiViewport* viewport = ImGui::GetMainViewport();
|
||||||
@ -137,6 +149,8 @@ void Ship::GameOverlay::Draw() {
|
|||||||
ImGui::Begin("SoHOverlay", nullptr, ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoBackground |
|
ImGui::Begin("SoHOverlay", nullptr, ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoBackground |
|
||||||
ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_NoInputs);
|
ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_NoInputs);
|
||||||
|
|
||||||
|
this->CleanupNotifications();
|
||||||
|
|
||||||
float textY = 50;
|
float textY = 50;
|
||||||
float notY = 0;
|
float notY = 0;
|
||||||
|
|
||||||
|
@ -33,6 +33,8 @@ namespace Ship {
|
|||||||
void TextDraw(float x, float y, bool shadow, ImVec4 color, const char* text, ...);
|
void TextDraw(float x, float y, bool shadow, ImVec4 color, const char* text, ...);
|
||||||
void TextDrawNotification(float duration, bool shadow, const char* fmt, ...);
|
void TextDrawNotification(float duration, bool shadow, const char* fmt, ...);
|
||||||
private:
|
private:
|
||||||
|
bool NeedsCleanup = false;
|
||||||
|
void CleanupNotifications();
|
||||||
void LoadFont(const std::string& name, const std::string& path, float fontSize);
|
void LoadFont(const std::string& name, const std::string& path, float fontSize);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user