#include "BenGui.hpp" #include #include #include #include "UIWidgets.hpp" #include "HudEditor.h" #include "2s2h/Enhancements/Audio/AudioEditor.h" #include "2s2h/Enhancements/ModMenu/ModMenu.h" #include "CosmeticEditor.h" #include "Notification.h" #include "2s2h/Rando/CheckTracker/CheckTracker.h" #ifdef __APPLE__ #include #endif #ifdef __SWITCH__ #include #endif #include "include/global.h" #include "Enhancements/Trackers/ItemTracker/ItemTracker.h" #include "Enhancements/Trackers/ItemTracker/ItemTrackerSettings.h" #include "Enhancements/Trackers/DisplayOverlay.h" #include "Enhancements/Trackers//TimeSplits/Timesplits.h" #include "Enhancements/Trackers/TimeSplits/TimesplitsSettings.h" #include "BenMenu.h" #include "BenMenuBar.h" #include "DeveloperTools/HookDebugger.h" #include "DeveloperTools/SaveEditor.h" #include "DeveloperTools/ActorViewer.h" #include "DeveloperTools/CollisionViewer.h" #include "DeveloperTools/EventLog.h" #include "DeveloperTools/DLViewer.h" #include "DeveloperTools/MessageViewer.h" namespace BenGui { // MARK: - Delegates std::shared_ptr mBenMenuBar; std::shared_ptr mConsoleWindow; std::shared_ptr mStatsWindow; std::shared_ptr mGfxDebuggerWindow; std::shared_ptr mInputEditorWindow; std::shared_ptr mHookDebuggerWindow; std::shared_ptr mSaveEditorWindow; std::shared_ptr mHudEditorWindow; std::shared_ptr mCosmeticEditorWindow; std::shared_ptr mActorViewerWindow; std::shared_ptr mCollisionViewerWindow; std::shared_ptr mEventLogWindow; std::shared_ptr mDLViewerWindow; std::shared_ptr mMessageViewerWindow; std::shared_ptr mAudioEditorWindow; std::shared_ptr mModMenuWindow; std::shared_ptr mBenMenu; std::shared_ptr mNotificationWindow; std::shared_ptr mRandoCheckTrackerWindow; std::shared_ptr mRandoCheckTrackerSettingsWindow; std::shared_ptr mItemTrackerWindow; std::shared_ptr mItemTrackerSettingsWindow; std::shared_ptr mDisplayOverlayWindow; std::shared_ptr mTimesplitsWindow; std::shared_ptr mTimesplitsSettingsWindow; std::shared_ptr mInputViewer; std::shared_ptr mInputViewerSettings; std::shared_ptr mModalWindow; UIWidgets::Colors GetMenuThemeColor() { return mBenMenu->GetMenuThemeColor(); } void SetupMenu() { auto gui = Ship::Context::GetRawInstance()->GetWindow()->GetGui(); mBenMenu = std::make_shared("gWindows.Menu", "Settings Menu"); gui->SetMenu(mBenMenu); auto& style = ImGui::GetStyle(); style.FramePadding = ImVec2(4.0f, 6.0f); style.ItemSpacing = ImVec2(8.0f, 6.0f); style.Colors[ImGuiCol_MenuBarBg] = UIWidgets::ColorValues.at(UIWidgets::Colors::DarkGray); mModalWindow = std::make_shared("gWindows.ModalWindow", "Modal Window"); gui->AddGuiWindow(mModalWindow); mModalWindow->Show(); } void SetupGuiElements() { auto gui = Ship::Context::GetRawInstance()->GetWindow()->GetGui(); mStatsWindow = gui->GetGuiWindow("Stats"); if (mStatsWindow == nullptr) { SPDLOG_ERROR("Could not find stats window"); } mConsoleWindow = gui->GetGuiWindow("Console"); if (mConsoleWindow == nullptr) { SPDLOG_ERROR("Could not find console window"); } mGfxDebuggerWindow = gui->GetGuiWindow("GfxDebuggerWindow"); if (mGfxDebuggerWindow == nullptr) { SPDLOG_ERROR("Could not find input GfxDebuggerWindow"); } mInputEditorWindow = gui->GetGuiWindow("2S2H Input Editor"); if (mInputEditorWindow == nullptr) { SPDLOG_ERROR("Could not find input editor window"); } mHookDebuggerWindow = std::make_shared("gWindows.HookDebugger", "Hook Debugger", ImVec2(480, 600)); gui->AddGuiWindow(mHookDebuggerWindow); mSaveEditorWindow = std::make_shared("gWindows.SaveEditor", "Save Editor", ImVec2(480, 600)); gui->AddGuiWindow(mSaveEditorWindow); mHudEditorWindow = std::make_shared("gWindows.HudEditor", "HUD Editor", ImVec2(480, 600)); gui->AddGuiWindow(mHudEditorWindow); mCosmeticEditorWindow = std::make_shared("gWindows.CosmeticEditor", "Cosmetic Editor", ImVec2(480, 600)); gui->AddGuiWindow(mCosmeticEditorWindow); mActorViewerWindow = std::make_shared("gWindows.ActorViewer", "Actor Viewer", ImVec2(520, 600)); gui->AddGuiWindow(mActorViewerWindow); mCollisionViewerWindow = std::make_shared("gWindows.CollisionViewer", "Collision Viewer", ImVec2(390, 475)); gui->AddGuiWindow(mCollisionViewerWindow); mEventLogWindow = std::make_shared("gWindows.EventLog", "Event Log", ImVec2(520, 600)); gui->AddGuiWindow(mEventLogWindow); mDLViewerWindow = std::make_shared("gWindows.DLViewer", "DL Viewer", ImVec2(520, 600)); gui->AddGuiWindow(mDLViewerWindow); mMessageViewerWindow = std::make_shared("gWindows.MessageViewer", "Message Viewer", ImVec2(520, 600)); gui->AddGuiWindow(mMessageViewerWindow); mAudioEditorWindow = std::make_shared("gWindows.AudioEditor", "Audio Editor", ImVec2(520, 600)); gui->AddGuiWindow(mAudioEditorWindow); mModMenuWindow = std::make_shared("gWindows.ModMenu", "Mod Menu", ImVec2(820, 630)); gui->AddGuiWindow(mModMenuWindow); mItemTrackerWindow = std::make_shared("gWindows.ItemTracker", "Item Tracker"); gui->AddGuiWindow(mItemTrackerWindow); mItemTrackerSettingsWindow = std::make_shared("gWindows.ItemTrackerSettings", "Item Tracker Settings", ImVec2(800, 400)); gui->AddGuiWindow(mItemTrackerSettingsWindow); mDisplayOverlayWindow = std::make_shared("gWindows.DisplayOverlay", "Display Overlay"); gui->AddGuiWindow(mDisplayOverlayWindow); mTimesplitsWindow = std::make_shared("gWindows.Timesplits", "Time Splits Window"); gui->AddGuiWindow(mTimesplitsWindow); mTimesplitsSettingsWindow = std::make_shared( "gWindows.Timesplits.Settings", "Time Splits Settings Window", ImVec2(567, 97)); gui->AddGuiWindow(mTimesplitsSettingsWindow); mNotificationWindow = std::make_shared("gWindows.Notifications", "Notifications Window"); gui->AddGuiWindow(mNotificationWindow); mNotificationWindow->Show(); mRandoCheckTrackerWindow = std::make_shared( "gWindows.CheckTracker", "Check Tracker", ImVec2(375, 460)); gui->AddGuiWindow(mRandoCheckTrackerWindow); mRandoCheckTrackerSettingsWindow = std::make_shared( "gWindows.CheckTrackerSettings", "Check Tracker Settings"); gui->AddGuiWindow(mRandoCheckTrackerSettingsWindow); mInputViewer = std::make_shared("gWindows.InputViewer", "Input Viewer"); gui->AddGuiWindow(mInputViewer); mInputViewerSettings = std::make_shared("gWindows.InputViewerSettings", "Input Viewer Settings", ImVec2(500, 525)); gui->AddGuiWindow(mInputViewerSettings); } void Destroy() { auto gui = Ship::Context::GetRawInstance()->GetWindow()->GetGui(); gui->RemoveAllGuiWindows(); mBenMenuBar = nullptr; mBenMenu = nullptr; mModalWindow = nullptr; mStatsWindow = nullptr; mConsoleWindow = nullptr; mGfxDebuggerWindow = nullptr; mInputEditorWindow = nullptr; mCollisionViewerWindow = nullptr; mEventLogWindow = nullptr; mNotificationWindow = nullptr; mRandoCheckTrackerWindow = nullptr; mRandoCheckTrackerSettingsWindow = nullptr; mHookDebuggerWindow = nullptr; mSaveEditorWindow = nullptr; mHudEditorWindow = nullptr; mCosmeticEditorWindow = nullptr; mActorViewerWindow = nullptr; mDLViewerWindow = nullptr; mMessageViewerWindow = nullptr; mAudioEditorWindow = nullptr; mModMenuWindow = nullptr; mItemTrackerWindow = nullptr; mItemTrackerSettingsWindow = nullptr; mInputViewer = nullptr; mInputViewerSettings = nullptr; } void RegisterPopup(std::string title, std::string message, std::string button1, std::string button2, std::function button1callback, std::function button2callback) { mModalWindow->RegisterPopup(title, message, button1, button2, button1callback, button2callback); } size_t PopupsQueued() { return mModalWindow->PopupsQueued(); } bool DismissPopup(std::string title) { if (mModalWindow->IsPopupOpen(title)) { mModalWindow->DismissPopup(); return true; } return false; } void SetDisplayOverlayVisibility(bool visible) { if (mDisplayOverlayWindow != nullptr) { if (visible) { mDisplayOverlayWindow->Show(); } else { mDisplayOverlayWindow->Hide(); } } else { CVarSetInteger("gWindows.DisplayOverlay", visible ? 1 : 0); } Ship::Context::GetRawInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame(); } } // namespace BenGui