2
0
mirror of https://github.com/AxioDL/metaforce.git synced 2025-08-11 10:19:07 +00:00

Give the input viewer it's own overlay

This commit is contained in:
Phillip Stephens 2021-06-06 14:22:59 -07:00
parent 995dc184b0
commit 34baaa8adb
Signed by: Antidote
GPG Key ID: F8BEE4C83DACA60D
2 changed files with 186 additions and 143 deletions

View File

@ -702,7 +702,7 @@ void ImGuiConsole::ShowAboutWindow(bool canClose, std::string_view errorString)
void ImGuiConsole::ShowDebugOverlay() { void ImGuiConsole::ShowDebugOverlay() {
if (!m_frameCounter && !m_frameRate && !m_inGameTime && !m_roomTimer && !m_playerInfo && !m_areaInfo && if (!m_frameCounter && !m_frameRate && !m_inGameTime && !m_roomTimer && !m_playerInfo && !m_areaInfo &&
!m_worldInfo && !m_randomStats && !m_resourceStats && !m_showInput) { !m_worldInfo && !m_randomStats && !m_resourceStats) {
return; return;
} }
ImGuiIO& io = ImGui::GetIO(); ImGuiIO& io = ImGui::GetIO();
@ -869,15 +869,57 @@ void ImGuiConsole::ShowDebugOverlay() {
ImGuiStringViewText(fmt::format(FMT_STRING("Resource Objects: {}\n"), g_SimplePool->GetLiveObjects())); ImGuiStringViewText(fmt::format(FMT_STRING("Resource Objects: {}\n"), g_SimplePool->GetLiveObjects()));
} }
// Code -stolen- borrowed from Practice Mod if (ImGui::BeginPopupContextWindow()) {
if (m_showInput && g_InputGenerator != nullptr) { if (ImGui::MenuItem("Custom", nullptr, m_debugOverlayCorner == -1)) {
auto input = g_InputGenerator->GetLastInput(); m_debugOverlayCorner = -1;
if (input.x4_controllerIdx == 0) {
if (hasPrevious) {
ImGui::Separator();
} }
hasPrevious = true; if (ImGui::MenuItem("Top-left", nullptr, m_debugOverlayCorner == 0, m_inputOverlayCorner != 1)) {
m_debugOverlayCorner = 0;
}
if (ImGui::MenuItem("Top-right", nullptr, m_debugOverlayCorner == 1, m_inputOverlayCorner != 1)) {
m_debugOverlayCorner = 1;
}
if (ImGui::MenuItem("Bottom-left", nullptr, m_debugOverlayCorner == 2, m_inputOverlayCorner != 2)) {
m_debugOverlayCorner = 2;
}
if (ImGui::MenuItem("Bottom-right", nullptr, m_debugOverlayCorner == 3, m_inputOverlayCorner != 3)) {
m_debugOverlayCorner = 3;
}
ImGui::EndPopup();
}
}
ImGui::End();
}
void ImGuiConsole::ShowInputViewer() {
if (!m_showInput || g_InputGenerator == nullptr) {
return;
}
auto input = g_InputGenerator->GetLastInput();
if (input.x4_controllerIdx != 0) {
return;
}
// Code -stolen- borrowed from Practice Mod
ImGuiIO& io = ImGui::GetIO();
ImGuiWindowFlags windowFlags = ImGuiWindowFlags_NoDecoration | ImGuiWindowFlags_AlwaysAutoResize |
ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_NoFocusOnAppearing |
ImGuiWindowFlags_NoNav;
if (m_inputOverlayCorner != -1) {
const ImGuiViewport* viewport = ImGui::GetMainViewport();
ImVec2 workPos = viewport->WorkPos; // Use work area to avoid menu-bar/task-bar, if any!
ImVec2 workSize = viewport->WorkSize;
ImVec2 windowPos;
ImVec2 windowPosPivot;
constexpr float padding = 10.0f;
windowPos.x = (m_inputOverlayCorner & 1) != 0 ? (workPos.x + workSize.x - padding) : (workPos.x + padding);
windowPos.y = (m_inputOverlayCorner & 2) != 0 ? (workPos.y + workSize.y - padding) : (workPos.y + padding);
windowPosPivot.x = (m_inputOverlayCorner & 1) != 0 ? 1.0f : 0.0f;
windowPosPivot.y = (m_inputOverlayCorner & 2) != 0 ? 1.0f : 0.0f;
ImGui::SetNextWindowPos(windowPos, ImGuiCond_Always, windowPosPivot);
windowFlags |= ImGuiWindowFlags_NoMove;
}
ImGui::SetNextWindowBgAlpha(0.65f);
if (ImGui::Begin("Input Overlay", nullptr, windowFlags)) {
ImDrawList* dl = ImGui::GetWindowDrawList(); ImDrawList* dl = ImGui::GetWindowDrawList();
zeus::CVector2f p = ImGui::GetCursorScreenPos(); zeus::CVector2f p = ImGui::GetCursorScreenPos();
@ -1005,23 +1047,21 @@ void ImGuiConsole::ShowDebugOverlay() {
} }
ImGui::Dummy(zeus::CVector2f(270, 130) * scale); ImGui::Dummy(zeus::CVector2f(270, 130) * scale);
}
}
if (ImGui::BeginPopupContextWindow()) { if (ImGui::BeginPopupContextWindow()) {
if (ImGui::MenuItem("Custom", nullptr, m_debugOverlayCorner == -1)) { if (ImGui::MenuItem("Custom", nullptr, m_inputOverlayCorner == -1)) {
m_debugOverlayCorner = -1; m_inputOverlayCorner = -1;
} }
if (ImGui::MenuItem("Top-left", nullptr, m_debugOverlayCorner == 0)) { if (ImGui::MenuItem("Top-left", nullptr, m_inputOverlayCorner == 0, m_debugOverlayCorner != 0)) {
m_debugOverlayCorner = 0; m_inputOverlayCorner = 0;
} }
if (ImGui::MenuItem("Top-right", nullptr, m_debugOverlayCorner == 1)) { if (ImGui::MenuItem("Top-right", nullptr, m_inputOverlayCorner == 1, m_debugOverlayCorner != 1)) {
m_debugOverlayCorner = 1; m_inputOverlayCorner = 1;
} }
if (ImGui::MenuItem("Bottom-left", nullptr, m_debugOverlayCorner == 2)) { if (ImGui::MenuItem("Bottom-left", nullptr, m_inputOverlayCorner == 2, m_debugOverlayCorner != 2)) {
m_debugOverlayCorner = 2; m_inputOverlayCorner = 2;
} }
if (ImGui::MenuItem("Bottom-right", nullptr, m_debugOverlayCorner == 3)) { if (ImGui::MenuItem("Bottom-right", nullptr, m_inputOverlayCorner == 3, m_debugOverlayCorner != 3)) {
m_debugOverlayCorner = 3; m_inputOverlayCorner = 3;
} }
ImGui::EndPopup(); ImGui::EndPopup();
} }
@ -1171,6 +1211,7 @@ void ImGuiConsole::PreUpdate() {
ShowConsoleVariablesWindow(); ShowConsoleVariablesWindow();
} }
ShowDebugOverlay(); ShowDebugOverlay();
ShowInputViewer();
} }
void ImGuiConsole::PostUpdate() { void ImGuiConsole::PostUpdate() {

View File

@ -86,6 +86,7 @@ private:
bool m_isInitialized = false; bool m_isInitialized = false;
int m_debugOverlayCorner = 2; // bottom-left int m_debugOverlayCorner = 2; // bottom-left
int m_inputOverlayCorner = 3; // bottom-right
const void* m_currentRoom = nullptr; const void* m_currentRoom = nullptr;
double m_lastRoomTime = 0.f; double m_lastRoomTime = 0.f;
double m_currentRoomStart = 0.f; double m_currentRoomStart = 0.f;
@ -102,5 +103,6 @@ private:
void ShowLayersWindow(); void ShowLayersWindow();
void ShowConsoleVariablesWindow(); void ShowConsoleVariablesWindow();
void ShowMenuHint(); void ShowMenuHint();
void ShowInputViewer();
}; };
} // namespace metaforce } // namespace metaforce