summaryrefslogtreecommitdiff
path: root/src/port/ui/ImguiUI.cpp
diff options
context:
space:
mode:
authorMalkierian <malkierian@live.com>2025-02-04 11:43:20 -0700
committerGitHub <noreply@github.com>2025-02-04 11:43:20 -0700
commit695879c4cb6e09dae01eb6f204359619c177b79e (patch)
treef4b76c257c7450d0890357cf1659b3eb8e524c79 /src/port/ui/ImguiUI.cpp
parent301bbd3cd9d899baf8bb16b88675f1ff3d6d7f19 (diff)
Modern Menu (#183)
* Add modern menu. Add and include LUS cvars .cmake file for macro usage in modern menu. * Un-ignore new .cmake * Copy new Resolution Editor stuff from 2ship (incomplete). Fix fullscreen checkbox. Finish changes for new UIWidgets. Cleanup ShipUtils. * Remove duplicate asm-differ entry from .gitmodules. * Re-implement Freecam options. * Cleanup freecam character follow buttons. Partially re-implement Multiplayer window as enhancement sidebar (needs text input widget to finish). Cleanup disables. --------- Co-authored-by: MegaMech <MegaMech@users.noreply.github.com>
Diffstat (limited to 'src/port/ui/ImguiUI.cpp')
-rw-r--r--src/port/ui/ImguiUI.cpp692
1 files changed, 300 insertions, 392 deletions
diff --git a/src/port/ui/ImguiUI.cpp b/src/port/ui/ImguiUI.cpp
index 9801267ce..bbaa97454 100644
--- a/src/port/ui/ImguiUI.cpp
+++ b/src/port/ui/ImguiUI.cpp
@@ -14,6 +14,7 @@
#include <libultraship/libultraship.h>
#include <Fast3D/gfx_pc.h>
#include "port/Engine.h"
+#include "PortMenu.h"
extern "C" {
extern s32 gGamestateNext;
@@ -24,26 +25,23 @@ extern "C" {
namespace GameUI {
std::shared_ptr<GameMenuBar> mGameMenuBar;
+std::shared_ptr<PortMenu> mPortMenu;
std::shared_ptr<Ship::GuiWindow> mConsoleWindow;
std::shared_ptr<Ship::GuiWindow> mStatsWindow;
std::shared_ptr<Ship::GuiWindow> mInputEditorWindow;
std::shared_ptr<Ship::GuiWindow> mGfxDebuggerWindow;
std::shared_ptr<Ship::GuiWindow> mGameInfoWindow;
std::shared_ptr<Ship::GuiWindow> mMultiplayerWindow;
-std::shared_ptr<Ship::GuiWindow> mFreecamWindow;
-std::shared_ptr<AdvancedResolutionSettings::AdvancedResolutionSettingsWindow> mAdvancedResolutionSettingsWindow;
void SetupGuiElements() {
auto gui = Ship::Context::GetInstance()->GetWindow()->GetGui();
- auto& style = ImGui::GetStyle();
- style.FramePadding = ImVec2(4.0f, 6.0f);
- style.ItemSpacing = ImVec2(8.0f, 6.0f);
- style.Colors[ImGuiCol_MenuBarBg] = UIWidgets::Colors::DarkGray;
-
mGameMenuBar = std::make_shared<GameMenuBar>("gOpenMenuBar", CVarGetInteger("gOpenMenuBar", 0));
gui->SetMenuBar(mGameMenuBar);
+ mPortMenu = std::make_shared<PortMenu>("gOpenMenu", "Port Menu");
+ gui->SetMenu(mPortMenu);
+
mMultiplayerWindow = gui->GetGuiWindow("Multiplayer");
if (mMultiplayerWindow == nullptr) {
SPDLOG_ERROR("Could not find multiplayer window");
@@ -75,27 +73,11 @@ void SetupGuiElements() {
SPDLOG_ERROR("Could not find input GfxDebuggerWindow");
}
- mMultiplayerWindow = std::make_shared<Multiplayer::MultiplayerWindow>("gMultiplayerWindowEnabled", "Multiplayer");
- gui->AddGuiWindow(mMultiplayerWindow);
-
- mFreecamWindow = gui->GetGuiWindow("FreecamWindow");
- if (mFreecamWindow == nullptr) {
- SPDLOG_ERROR("Could not find input FreecamWindow");
- }
-
- mFreecamWindow = std::make_shared<Freecam::FreecamWindow>("gFreecamEnabled", "Freecam");
- gui->AddGuiWindow(mFreecamWindow);
-
- mGameInfoWindow = std::make_shared<GameInfo::GameInfoWindow>("gGameInfoEnabled", "Game info");
+ mGameInfoWindow = std::make_shared<GameInfo::GameInfoWindow>("gGameInfoEnabled", "Game Info");
gui->AddGuiWindow(mGameInfoWindow);
-
- mAdvancedResolutionSettingsWindow = std::make_shared<AdvancedResolutionSettings::AdvancedResolutionSettingsWindow>(
- "gAdvancedResolutionEditorEnabled", "Advanced Resolution Settings");
- gui->AddGuiWindow(mAdvancedResolutionSettingsWindow);
}
void Destroy() {
- mAdvancedResolutionSettingsWindow = nullptr;
mGameInfoWindow = nullptr;
mConsoleWindow = nullptr;
mStatsWindow = nullptr;
@@ -125,294 +107,294 @@ static const char* filters[3] = {
};
void DrawSettingsMenu() {
- if (UIWidgets::BeginMenu("Settings")) {
- if (UIWidgets::BeginMenu("Audio")) {
- UIWidgets::CVarSliderFloat("Master Volume", "gGameMasterVolume", 0.0f, 1.0f, 1.0f, {
- .format = "%.0f%%",
- .isPercentage = true,
- });
- if (UIWidgets::CVarSliderFloat("Main Music Volume", "gMainMusicVolume", 0.0f, 1.0f, 1.0f,
- {
- .format = "%.0f%%",
- .isPercentage = true,
- })) {
- audio_set_player_volume(SEQ_PLAYER_LEVEL, CVarGetFloat("gMainMusicVolume", 1.0f));
- }
- if (UIWidgets::CVarSliderFloat("Sound Effects Volume", "gSFXMusicVolume",
- 0.0f, 1.0f, 1.0f, {
- .format = "%.0f%%",
- .isPercentage = true,
- })) {
- audio_set_player_volume(SEQ_PLAYER_SFX, CVarGetFloat("gSFXMusicVolume", 1.0f));
- }
- if (UIWidgets::CVarSliderFloat("Environment Volume", "gEnvironmentVolume",
- 0.0f, 1.0f, 1.0f, {
- .format = "%.0f%%",
- .isPercentage = true,
- })) {
- audio_set_player_volume(SEQ_PLAYER_ENV, CVarGetFloat("gEnvironmentVolume", 1.0f));
- }
-
- static std::unordered_map<Ship::AudioBackend, const char*> audioBackendNames = {
- { Ship::AudioBackend::WASAPI, "Windows Audio Session API" },
- { Ship::AudioBackend::SDL, "SDL" },
- };
-
- ImGui::Text("Audio API (Needs reload)");
- auto currentAudioBackend = Ship::Context::GetInstance()->GetAudio()->GetCurrentAudioBackend();
-
- if (Ship::Context::GetInstance()->GetAudio()->GetAvailableAudioBackends()->size() <= 1) {
- UIWidgets::DisableComponent(ImGui::GetStyle().Alpha * 0.5f);
- }
- if (ImGui::BeginCombo("##AApi", audioBackendNames[currentAudioBackend])) {
- for (uint8_t i = 0; i <
- Ship::Context::GetInstance()->GetAudio()->GetAvailableAudioBackends()->size(); i++) {
- auto backend = Ship::Context::GetInstance()->GetAudio()->GetAvailableAudioBackends()->data()[i];
- if (ImGui::Selectable(audioBackendNames[backend], backend == currentAudioBackend)) {
- Ship::Context::GetInstance()->GetAudio()->SetCurrentAudioBackend(backend);
- }
- }
- ImGui::EndCombo();
- }
- if (Ship::Context::GetInstance()->GetAudio()->GetAvailableAudioBackends()->size() <= 1) {
- UIWidgets::ReEnableComponent("");
- }
-
- ImGui::EndMenu();
- }
-
- UIWidgets::Spacer(0);
-
- if (UIWidgets::BeginMenu("Controller")) {
- UIWidgets::WindowButton("Controller Mapping", "gInputEditorWindow", GameUI::mInputEditorWindow);
-
- UIWidgets::Spacer(0);
-
-#ifndef __SWITCH__
- UIWidgets::CVarCheckbox(
- "Menubar Controller Navigation", "gControlNav",
- { .tooltip = "Allows controller navigation of the SOH menu bar (Settings, Enhancements,...)\nCAUTION: "
- "This will disable game inputs while the menubar is visible.\n\nD-pad to move between "
- "items, A to select, and X to grab focus on the menu bar" });
-#endif
- UIWidgets::CVarCheckbox("Show Inputs", "gInputEnabled",
- { .tooltip = "Shows currently pressed inputs on the bottom right of the screen" });
- if (CVarGetInteger("gInputEnabled", 0)) {
- UIWidgets::CVarSliderFloat(
- "Input Scale", "gInputScale", 1.0f, 3.0f, 1.0f,
- {
- .tooltip = "Sets the on screen size of the displayed inputs from the Show Inputs setting",
- .format = "%.1fx",
- });
- }
-
- ImGui::EndMenu();
- }
-
- ImGui::EndMenu();
- }
-
- ImGui::SetCursorPosY(0.0f);
- if (UIWidgets::BeginMenu("Graphics")) {
- UIWidgets::WindowButton("Resolution Editor", "gAdvancedResolutionEditorEnabled",
- GameUI::mAdvancedResolutionSettingsWindow);
-
- UIWidgets::Spacer(0);
-
- // Previously was running every frame, and nothing was setting it? Maybe a bad copy/paste?
- // Ship::Context::GetInstance()->GetWindow()->SetResolutionMultiplier(CVarGetFloat("gInternalResolution", 1));
- // UIWidgets::Tooltip("Multiplies your output resolution by the value inputted, as a more intensive but
- // effective form of anti-aliasing");
-#ifndef __WIIU__
- if (UIWidgets::CVarSliderInt(
- "MSAA: %d", "gMSAAValue", 1, 8, 1,
- { .tooltip =
- "Activates multi-sample anti-aliasing when above 1x up to 8x for 8 samples for every pixel" })) {
- Ship::Context::GetInstance()->GetWindow()->SetMsaaLevel(CVarGetInteger("gMSAAValue", 1));
- }
-#endif
-
- { // FPS Slider
- const int minFps = 30;
- static int maxFps;
- if (Ship::Context::GetInstance()->GetWindow()->GetWindowBackend() ==
- Ship::WindowBackend::FAST3D_DXGI_DX11) {
- maxFps = 360;
- } else {
- maxFps = Ship::Context::GetInstance()->GetWindow()->GetCurrentRefreshRate();
- }
- int currentFps = 0;
-#ifdef __WIIU__
- UIWidgets::Spacer(0);
- // only support divisors of 60 on the Wii U
- if (currentFps > 60) {
- currentFps = 60;
- } else {
- currentFps = 60 / (60 / currentFps);
- }
-
- int fpsSlider = 1;
- if (currentFps == 30) {
- ImGui::Text("FPS: Original (30)");
- } else {
- ImGui::Text("FPS: %d", currentFps);
- if (currentFps == 30) {
- fpsSlider = 2;
- } else { // currentFps == 60
- fpsSlider = 3;
- }
- }
- if (CVarGetInteger("gMatchRefreshRate", 0)) {
- UIWidgets::DisableComponent(ImGui::GetStyle().Alpha * 0.5f);
- }
-
- if (ImGui::Button(" - ##WiiUFPS")) {
- fpsSlider--;
- }
- ImGui::SameLine();
- ImGui::SetCursorPosX(ImGui::GetCursorPosX() - 7.0f);
-
- UIWidgets::Spacer(0);
-
- ImGui::PushItemWidth(std::min((ImGui::GetContentRegionAvail().x - 60.0f), 260.0f));
- ImGui::SliderInt("##WiiUFPSSlider", &fpsSlider, 1, 3, "", ImGuiSliderFlags_AlwaysClamp);
- ImGui::PopItemWidth();
-
- ImGui::SameLine();
- ImGui::SetCursorPosX(ImGui::GetCursorPosX() - 7.0f);
- if (ImGui::Button(" + ##WiiUFPS")) {
- fpsSlider++;
- }
-
- if (CVarGetInteger("gMatchRefreshRate", 0)) {
- UIWidgets::ReEnableComponent("");
- }
- if (fpsSlider > 3) {
- fpsSlider = 3;
- } else if (fpsSlider < 1) {
- fpsSlider = 1;
- }
-
- if (fpsSlider == 1) {
- currentFps = 20;
- } else if (fpsSlider == 2) {
- currentFps = 30;
- } else if (fpsSlider == 3) {
- currentFps = 60;
- }
- CVarSetInteger("gInterpolationFPS", currentFps);
- Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
-#else
- bool matchingRefreshRate =
- CVarGetInteger("gMatchRefreshRate", 0) &&
- Ship::Context::GetInstance()->GetWindow()->GetWindowBackend() != Ship::WindowBackend::FAST3D_DXGI_DX11;
- UIWidgets::CVarSliderInt((currentFps == 20) ? "FPS: Original (20)" : "FPS: %d", "gInterpolationFPS", minFps,
- maxFps, 1, { .disabled = matchingRefreshRate });
-#endif
- if (Ship::Context::GetInstance()->GetWindow()->GetWindowBackend() ==
- Ship::WindowBackend::FAST3D_DXGI_DX11) {
- UIWidgets::Tooltip(
- "Uses Matrix Interpolation to create extra frames, resulting in smoother graphics. "
- "This is purely "
- "visual and does not impact game logic, execution of glitches etc.\n\n"
- "A higher target FPS than your monitor's refresh rate will waste resources, and might give a worse "
- "result.");
- } else {
- UIWidgets::Tooltip(
- "Uses Matrix Interpolation to create extra frames, resulting in smoother graphics. This is purely "
- "visual and does not impact game logic, execution of glitches etc.");
- }
- } // END FPS Slider
-
- if (Ship::Context::GetInstance()->GetWindow()->GetWindowBackend() == Ship::WindowBackend::FAST3D_DXGI_DX11) {
- UIWidgets::Spacer(0);
- if (ImGui::Button("Match Refresh Rate")) {
- int hz = Ship::Context::GetInstance()->GetWindow()->GetCurrentRefreshRate();
- if (hz >= 30 && hz <= 360) {
- CVarSetInteger("gInterpolationFPS", hz);
- Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
- }
- }
- } else {
- UIWidgets::PaddedEnhancementCheckbox("Match Refresh Rate", "gMatchRefreshRate", true, false);
- }
-
- UIWidgets::Tooltip("Matches interpolation value to the current game's window refresh rate");
-
- if (Ship::Context::GetInstance()->GetWindow()->GetWindowBackend() == Ship::WindowBackend::FAST3D_DXGI_DX11) {
- UIWidgets::PaddedEnhancementSliderInt(
- CVarGetInteger("gExtraLatencyThreshold", 0) == 0 ? "Jitter fix: Off" : "Jitter fix: >= %d FPS",
- "##ExtraLatencyThreshold", "gExtraLatencyThreshold", 0, 360, "", 0, true, true, false);
- UIWidgets::Tooltip("When Interpolation FPS setting is at least this threshold, add one frame of input lag "
- "(e.g. 16.6 ms for 60 FPS) in order to avoid jitter. This setting allows the CPU to "
- "work on one frame while GPU works on the previous frame.\nThis setting should be used "
- "when your computer is too slow to do CPU + GPU work in time.");
- }
-
- UIWidgets::PaddedSeparator(true, true, 3.0f, 3.0f);
-
- static std::unordered_map<Ship::WindowBackend, const char*> windowBackendNames = {
- { Ship::WindowBackend::FAST3D_DXGI_DX11, "DirectX" },
- { Ship::WindowBackend::FAST3D_SDL_OPENGL, "OpenGL" },
- { Ship::WindowBackend::FAST3D_SDL_METAL, "Metal" },
- };
-
- ImGui::Text("Renderer API (Needs reload)");
- Ship::WindowBackend runningWindowBackend = Ship::Context::GetInstance()->GetWindow()->GetWindowBackend();
- Ship::WindowBackend configWindowBackend;
- int configWindowBackendId = Ship::Context::GetInstance()->GetConfig()->GetInt("Window.Backend.Id", -1);
- if (Ship::Context::GetInstance()->GetWindow()->IsAvailableWindowBackend(configWindowBackendId)) {
- configWindowBackend = static_cast<Ship::WindowBackend>(configWindowBackendId);
- } else {
- configWindowBackend = runningWindowBackend;
- }
-
- if (Ship::Context::GetInstance()->GetWindow()->GetAvailableWindowBackends()->size() <= 1) {
- UIWidgets::DisableComponent(ImGui::GetStyle().Alpha * 0.5f);
- }
- if (ImGui::BeginCombo("##RApi", windowBackendNames[configWindowBackend])) {
- for (size_t i = 0; i < Ship::Context::GetInstance()->GetWindow()->GetAvailableWindowBackends()->size();
- i++) {
- auto backend = Ship::Context::GetInstance()->GetWindow()->GetAvailableWindowBackends()->data()[i];
- if (ImGui::Selectable(windowBackendNames[backend], backend == configWindowBackend)) {
- Ship::Context::GetInstance()->GetConfig()->SetInt("Window.Backend.Id", static_cast<int>(backend));
- Ship::Context::GetInstance()->GetConfig()->SetString("Window.Backend.Name",
- windowBackendNames[backend]);
- Ship::Context::GetInstance()->GetConfig()->Save();
- }
- }
- ImGui::EndCombo();
- }
- if (Ship::Context::GetInstance()->GetWindow()->GetAvailableWindowBackends()->size() <= 1) {
- UIWidgets::ReEnableComponent("");
- }
-
- if (Ship::Context::GetInstance()->GetWindow()->CanDisableVerticalSync()) {
- UIWidgets::PaddedEnhancementCheckbox("Enable Vsync", "gVsyncEnabled", true, false);
- }
-
- if (Ship::Context::GetInstance()->GetWindow()->SupportsWindowedFullscreen()) {
- UIWidgets::PaddedEnhancementCheckbox("Windowed fullscreen", "gSdlWindowedFullscreen", true, false);
- }
-
- if (Ship::Context::GetInstance()->GetWindow()->GetGui()->SupportsViewports()) {
- UIWidgets::PaddedEnhancementCheckbox("Allow multi-windows", "gEnableMultiViewports", true, false, false, "",
- UIWidgets::CheckboxGraphics::Cross, true);
- UIWidgets::Tooltip("Allows windows to be able to be dragged off of the main game window. Requires a reload "
- "to take effect.");
- }
-
- // If more filters are added to LUS, make sure to add them to the filters list here
- ImGui::Text("Texture Filter (Needs reload)");
-
- UIWidgets::EnhancementCombobox("gTextureFilter", filters, 0);
-
- UIWidgets::Spacer(0);
-
- Ship::Context::GetInstance()->GetWindow()->GetGui()->GetGameOverlay()->DrawSettings();
-
- ImGui::EndMenu();
- }
+// if (UIWidgets::BeginMenu("Settings")) {
+// if (UIWidgets::BeginMenu("Audio")) {
+// UIWidgets::CVarSliderFloat("Master Volume", "gGameMasterVolume", 0.0f, 1.0f, 1.0f, {
+// .format = "%.0f%%",
+// .isPercentage = true,
+// });
+// if (UIWidgets::CVarSliderFloat("Main Music Volume", "gMainMusicVolume", 0.0f, 1.0f, 1.0f,
+// {
+// .format = "%.0f%%",
+// .isPercentage = true,
+// })) {
+// audio_set_player_volume(SEQ_PLAYER_LEVEL, CVarGetFloat("gMainMusicVolume", 1.0f));
+// }
+// if (UIWidgets::CVarSliderFloat("Sound Effects Volume", "gSFXMusicVolume",
+// 0.0f, 1.0f, 1.0f, {
+// .format = "%.0f%%",
+// .isPercentage = true,
+// })) {
+// audio_set_player_volume(SEQ_PLAYER_SFX, CVarGetFloat("gSFXMusicVolume", 1.0f));
+// }
+// if (UIWidgets::CVarSliderFloat("Environment Volume", "gEnvironmentVolume",
+// 0.0f, 1.0f, 1.0f, {
+// .format = "%.0f%%",
+// .isPercentage = true,
+// })) {
+// audio_set_player_volume(SEQ_PLAYER_ENV, CVarGetFloat("gEnvironmentVolume", 1.0f));
+// }
+//
+// static std::unordered_map<Ship::AudioBackend, const char*> audioBackendNames = {
+// { Ship::AudioBackend::WASAPI, "Windows Audio Session API" },
+// { Ship::AudioBackend::SDL, "SDL" },
+// };
+//
+// ImGui::Text("Audio API (Needs reload)");
+// auto currentAudioBackend = Ship::Context::GetInstance()->GetAudio()->GetCurrentAudioBackend();
+//
+// if (Ship::Context::GetInstance()->GetAudio()->GetAvailableAudioBackends()->size() <= 1) {
+// UIWidgets::DisableComponent(ImGui::GetStyle().Alpha * 0.5f);
+// }
+// if (ImGui::BeginCombo("##AApi", audioBackendNames[currentAudioBackend])) {
+// for (uint8_t i = 0; i <
+// Ship::Context::GetInstance()->GetAudio()->GetAvailableAudioBackends()->size(); i++) {
+// auto backend = Ship::Context::GetInstance()->GetAudio()->GetAvailableAudioBackends()->data()[i];
+// if (ImGui::Selectable(audioBackendNames[backend], backend == currentAudioBackend)) {
+// Ship::Context::GetInstance()->GetAudio()->SetCurrentAudioBackend(backend);
+// }
+// }
+// ImGui::EndCombo();
+// }
+// if (Ship::Context::GetInstance()->GetAudio()->GetAvailableAudioBackends()->size() <= 1) {
+// UIWidgets::ReEnableComponent("");
+// }
+//
+// ImGui::EndMenu();
+// }
+//
+// UIWidgets::Spacer(0);
+//
+// if (UIWidgets::BeginMenu("Controller")) {
+// UIWidgets::WindowButton("Controller Mapping", "gInputEditorWindow", GameUI::mInputEditorWindow);
+//
+// UIWidgets::Spacer(0);
+//
+//#ifndef __SWITCH__
+// UIWidgets::CVarCheckbox(
+// "Menubar Controller Navigation", "gControlNav",
+// { .tooltip = "Allows controller navigation of the SOH menu bar (Settings, Enhancements,...)\nCAUTION: "
+// "This will disable game inputs while the menubar is visible.\n\nD-pad to move between "
+// "items, A to select, and X to grab focus on the menu bar" });
+//#endif
+// UIWidgets::CVarCheckbox("Show Inputs", "gInputEnabled",
+// { .tooltip = "Shows currently pressed inputs on the bottom right of the screen" });
+// if (CVarGetInteger("gInputEnabled", 0)) {
+// UIWidgets::CVarSliderFloat(
+// "Input Scale", "gInputScale", 1.0f, 3.0f, 1.0f,
+// {
+// .tooltip = "Sets the on screen size of the displayed inputs from the Show Inputs setting",
+// .format = "%.1fx",
+// });
+// }
+//
+// ImGui::EndMenu();
+// }
+//
+// ImGui::EndMenu();
+// }
+//
+// ImGui::SetCursorPosY(0.0f);
+// if (UIWidgets::BeginMenu("Graphics")) {
+// UIWidgets::WindowButton("Resolution Editor", "gAdvancedResolutionEditorEnabled",
+// GameUI::mAdvancedResolutionSettingsWindow);
+//
+// UIWidgets::Spacer(0);
+//
+// // Previously was running every frame, and nothing was setting it? Maybe a bad copy/paste?
+// // Ship::Context::GetInstance()->GetWindow()->SetResolutionMultiplier(CVarGetFloat("gInternalResolution", 1));
+// // UIWidgets::Tooltip("Multiplies your output resolution by the value inputted, as a more intensive but
+// // effective form of anti-aliasing");
+//#ifndef __WIIU__
+// if (UIWidgets::CVarSliderInt(
+// "MSAA: %d", "gMSAAValue", 1, 8, 1,
+// { .tooltip =
+// "Activates multi-sample anti-aliasing when above 1x up to 8x for 8 samples for every pixel" })) {
+// Ship::Context::GetInstance()->GetWindow()->SetMsaaLevel(CVarGetInteger("gMSAAValue", 1));
+// }
+//#endif
+//
+// { // FPS Slider
+// const int minFps = 30;
+// static int maxFps;
+// if (Ship::Context::GetInstance()->GetWindow()->GetWindowBackend() ==
+// Ship::WindowBackend::FAST3D_DXGI_DX11) {
+// maxFps = 360;
+// } else {
+// maxFps = Ship::Context::GetInstance()->GetWindow()->GetCurrentRefreshRate();
+// }
+// int currentFps = 0;
+//#ifdef __WIIU__
+// UIWidgets::Spacer(0);
+// // only support divisors of 60 on the Wii U
+// if (currentFps > 60) {
+// currentFps = 60;
+// } else {
+// currentFps = 60 / (60 / currentFps);
+// }
+//
+// int fpsSlider = 1;
+// if (currentFps == 30) {
+// ImGui::Text("FPS: Original (30)");
+// } else {
+// ImGui::Text("FPS: %d", currentFps);
+// if (currentFps == 30) {
+// fpsSlider = 2;
+// } else { // currentFps == 60
+// fpsSlider = 3;
+// }
+// }
+// if (CVarGetInteger("gMatchRefreshRate", 0)) {
+// UIWidgets::DisableComponent(ImGui::GetStyle().Alpha * 0.5f);
+// }
+//
+// if (ImGui::Button(" - ##WiiUFPS")) {
+// fpsSlider--;
+// }
+// ImGui::SameLine();
+// ImGui::SetCursorPosX(ImGui::GetCursorPosX() - 7.0f);
+//
+// UIWidgets::Spacer(0);
+//
+// ImGui::PushItemWidth(std::min((ImGui::GetContentRegionAvail().x - 60.0f), 260.0f));
+// ImGui::SliderInt("##WiiUFPSSlider", &fpsSlider, 1, 3, "", ImGuiSliderFlags_AlwaysClamp);
+// ImGui::PopItemWidth();
+//
+// ImGui::SameLine();
+// ImGui::SetCursorPosX(ImGui::GetCursorPosX() - 7.0f);
+// if (ImGui::Button(" + ##WiiUFPS")) {
+// fpsSlider++;
+// }
+//
+// if (CVarGetInteger("gMatchRefreshRate", 0)) {
+// UIWidgets::ReEnableComponent("");
+// }
+// if (fpsSlider > 3) {
+// fpsSlider = 3;
+// } else if (fpsSlider < 1) {
+// fpsSlider = 1;
+// }
+//
+// if (fpsSlider == 1) {
+// currentFps = 20;
+// } else if (fpsSlider == 2) {
+// currentFps = 30;
+// } else if (fpsSlider == 3) {
+// currentFps = 60;
+// }
+// CVarSetInteger("gInterpolationFPS", currentFps);
+// Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
+//#else
+// bool matchingRefreshRate =
+// CVarGetInteger("gMatchRefreshRate", 0) &&
+// Ship::Context::GetInstance()->GetWindow()->GetWindowBackend() != Ship::WindowBackend::FAST3D_DXGI_DX11;
+// UIWidgets::CVarSliderInt((currentFps == 20) ? "FPS: Original (20)" : "FPS: %d", "gInterpolationFPS", minFps,
+// maxFps, 1, { .disabled = matchingRefreshRate });
+//#endif
+// if (Ship::Context::GetInstance()->GetWindow()->GetWindowBackend() ==
+// Ship::WindowBackend::FAST3D_DXGI_DX11) {
+// UIWidgets::Tooltip(
+// "Uses Matrix Interpolation to create extra frames, resulting in smoother graphics. "
+// "This is purely "
+// "visual and does not impact game logic, execution of glitches etc.\n\n"
+// "A higher target FPS than your monitor's refresh rate will waste resources, and might give a worse "
+// "result.");
+// } else {
+// UIWidgets::Tooltip(
+// "Uses Matrix Interpolation to create extra frames, resulting in smoother graphics. This is purely "
+// "visual and does not impact game logic, execution of glitches etc.");
+// }
+// } // END FPS Slider
+//
+// if (Ship::Context::GetInstance()->GetWindow()->GetWindowBackend() == Ship::WindowBackend::FAST3D_DXGI_DX11) {
+// UIWidgets::Spacer(0);
+// if (ImGui::Button("Match Refresh Rate")) {
+// int hz = Ship::Context::GetInstance()->GetWindow()->GetCurrentRefreshRate();
+// if (hz >= 30 && hz <= 360) {
+// CVarSetInteger("gInterpolationFPS", hz);
+// Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
+// }
+// }
+// } else {
+// UIWidgets::PaddedEnhancementCheckbox("Match Refresh Rate", "gMatchRefreshRate", true, false);
+// }
+//
+// UIWidgets::Tooltip("Matches interpolation value to the current game's window refresh rate");
+//
+// if (Ship::Context::GetInstance()->GetWindow()->GetWindowBackend() == Ship::WindowBackend::FAST3D_DXGI_DX11) {
+// UIWidgets::PaddedEnhancementSliderInt(
+// CVarGetInteger("gExtraLatencyThreshold", 0) == 0 ? "Jitter fix: Off" : "Jitter fix: >= %d FPS",
+// "##ExtraLatencyThreshold", "gExtraLatencyThreshold", 0, 360, "", 0, true, true, false);
+// UIWidgets::Tooltip("When Interpolation FPS setting is at least this threshold, add one frame of input lag "
+// "(e.g. 16.6 ms for 60 FPS) in order to avoid jitter. This setting allows the CPU to "
+// "work on one frame while GPU works on the previous frame.\nThis setting should be used "
+// "when your computer is too slow to do CPU + GPU work in time.");
+// }
+//
+// UIWidgets::PaddedSeparator(true, true, 3.0f, 3.0f);
+//
+// static std::unordered_map<Ship::WindowBackend, const char*> windowBackendNames = {
+// { Ship::WindowBackend::FAST3D_DXGI_DX11, "DirectX" },
+// { Ship::WindowBackend::FAST3D_SDL_OPENGL, "OpenGL" },
+// { Ship::WindowBackend::FAST3D_SDL_METAL, "Metal" },
+// };
+//
+// ImGui::Text("Renderer API (Needs reload)");
+// Ship::WindowBackend runningWindowBackend = Ship::Context::GetInstance()->GetWindow()->GetWindowBackend();
+// Ship::WindowBackend configWindowBackend;
+// int configWindowBackendId = Ship::Context::GetInstance()->GetConfig()->GetInt("Window.Backend.Id", -1);
+// if (Ship::Context::GetInstance()->GetWindow()->IsAvailableWindowBackend(configWindowBackendId)) {
+// configWindowBackend = static_cast<Ship::WindowBackend>(configWindowBackendId);
+// } else {
+// configWindowBackend = runningWindowBackend;
+// }
+//
+// if (Ship::Context::GetInstance()->GetWindow()->GetAvailableWindowBackends()->size() <= 1) {
+// UIWidgets::DisableComponent(ImGui::GetStyle().Alpha * 0.5f);
+// }
+// if (ImGui::BeginCombo("##RApi", windowBackendNames[configWindowBackend])) {
+// for (size_t i = 0; i < Ship::Context::GetInstance()->GetWindow()->GetAvailableWindowBackends()->size();
+// i++) {
+// auto backend = Ship::Context::GetInstance()->GetWindow()->GetAvailableWindowBackends()->data()[i];
+// if (ImGui::Selectable(windowBackendNames[backend], backend == configWindowBackend)) {
+// Ship::Context::GetInstance()->GetConfig()->SetInt("Window.Backend.Id", static_cast<int>(backend));
+// Ship::Context::GetInstance()->GetConfig()->SetString("Window.Backend.Name",
+// windowBackendNames[backend]);
+// Ship::Context::GetInstance()->GetConfig()->Save();
+// }
+// }
+// ImGui::EndCombo();
+// }
+// if (Ship::Context::GetInstance()->GetWindow()->GetAvailableWindowBackends()->size() <= 1) {
+// UIWidgets::ReEnableComponent("");
+// }
+//
+// if (Ship::Context::GetInstance()->GetWindow()->CanDisableVerticalSync()) {
+// UIWidgets::PaddedEnhancementCheckbox("Enable Vsync", "gVsyncEnabled", true, false);
+// }
+//
+// if (Ship::Context::GetInstance()->GetWindow()->SupportsWindowedFullscreen()) {
+// UIWidgets::PaddedEnhancementCheckbox("Windowed fullscreen", "gSdlWindowedFullscreen", true, false);
+// }
+//
+// if (Ship::Context::GetInstance()->GetWindow()->GetGui()->SupportsViewports()) {
+// UIWidgets::PaddedEnhancementCheckbox("Allow multi-windows", "gEnableMultiViewports", true, false, false, "",
+// UIWidgets::CheckboxGraphics::Cross, true);
+// UIWidgets::Tooltip("Allows windows to be able to be dragged off of the main game window. Requires a reload "
+// "to take effect.");
+// }
+//
+// // If more filters are added to LUS, make sure to add them to the filters list here
+// ImGui::Text("Texture Filter (Needs reload)");
+//
+// UIWidgets::EnhancementCombobox("gTextureFilter", filters, 0);
+//
+// UIWidgets::Spacer(0);
+//
+// Ship::Context::GetInstance()->GetWindow()->GetGui()->GetGameOverlay()->DrawSettings();
+//
+// ImGui::EndMenu();
+// }
}
void DrawMenuBarIcon() {
@@ -442,56 +424,15 @@ void DrawMenuBarIcon() {
}
void DrawGameMenu() {
- if (UIWidgets::BeginMenu("Spaghetti")) {
- if (UIWidgets::MenuItem("Reset",
-#ifdef __APPLE__
- "Command-R"
-#else
- "Ctrl+R"
-#endif
- )) {
- gGamestateNext = MAIN_MENU_FROM_QUIT;
- if (CVarGetInteger("gEnableDebugMode", 0) == true) {
- gMenuSelection = START_MENU;
- } else {
- gMenuSelection = LOGO_INTRO_MENU;
- }
- }
-#if !defined(__SWITCH__) && !defined(__WIIU__)
-
- if (UIWidgets::MenuItem("Toggle Fullscreen", "F11")) {
- Ship::Context::GetInstance()->GetWindow()->ToggleFullscreen();
- }
- if (UIWidgets::MenuItem("Quit")) {
- Ship::Context::GetInstance()->GetWindow()->Close();
- }
-#endif
- ImGui::EndMenu();
- }
}
void DrawEnhancementsMenu() {
if (UIWidgets::BeginMenu("Enhancements")) {
- UIWidgets::WindowButton("Multiplayer", "gMultiplayerWindowEnabled", GameUI::mMultiplayerWindow,
- { .tooltip = "Shows the multiplayer window" });
if (UIWidgets::BeginMenu("Gameplay")) {
- UIWidgets::WindowButton("Freecam", "gFreecam", GameUI::mFreecamWindow,
- { .tooltip = "Allows you to fly around the course" });
- UIWidgets::CVarCheckbox("No multiplayer feature cuts", "gMultiplayerNoFeatureCuts",
- { .tooltip = "Allows full train and jumbotron in multiplayer, etc." });
- UIWidgets::CVarCheckbox("General Improvements", "gImprovements", { .tooltip = "General improvements to the game experience." });
- UIWidgets::CVarCheckbox(
- "No Level of Detail (LOD)", "gDisableLod",
- { .tooltip = "Disable Level of Detail (LOD) to avoid models using lower poly versions at a distance" });
-
-
- UIWidgets::CVarCheckbox("Disable Culling", "gNoCulling", { .tooltip = "Disable original culling of mk64" });
- UIWidgets::CVarSliderFloat(
- "Far Frustrum", "gFarFrustrum", 0.0f, 10000.0f, 10000.0f,
- { .tooltip = "Say how Far the Frustrum are when 'Disable Culling' are enable", .step = 10.0f });
+
ImGui::EndMenu();
}
@@ -500,16 +441,7 @@ void DrawEnhancementsMenu() {
}
void DrawCheatsMenu() {
- if (UIWidgets::BeginMenu("Cheats")) {
- UIWidgets::CVarCheckbox("Moon Jump", "gEnableMoonJump");
- UIWidgets::CVarCheckbox("Enable Custom CC", "gEnableCustomCC");
- UIWidgets::CVarSliderFloat("Custom CC", "gCustomCC", 0.0, 1000.0, 150.0, { .step = 10.0 });
- UIWidgets::CVarCheckbox("Disable Wall Collision", "gNoWallColision", { .tooltip = "Disable wall collision." });
- UIWidgets::CVarSliderFloat(
- "Min Height", "gMinHeight", -50.0f, 50.0f, 0.0f,
- { .tooltip = "When Disable Wall Collision are enable what is the minimal height you can get." });
- ImGui::EndMenu();
- }
+
}
const char* debugInfoPages[6] = {
@@ -517,31 +449,7 @@ const char* debugInfoPages[6] = {
};
void DrawDebugMenu() {
- if (UIWidgets::BeginMenu("Developer")) {
- UIWidgets::WindowButton(
- "Gfx Debugger", "gGfxDebuggerEnabled", GameUI::mGfxDebuggerWindow,
- { .tooltip =
- "Enables the Gfx Debugger window, allowing you to input commands, type help for some examples" });
-
- UIWidgets::CVarCheckbox("Debug mode", "gEnableDebugMode", { .tooltip = "Enable debug mode" });
-
- UIWidgets::CVarCheckbox("Render Collision", "gRenderCollisionMesh",
- { .tooltip = "Renders the collision mesh instead of the course mesh" });
-
- UIWidgets::Spacer(0);
- UIWidgets::WindowButton("GameInfo", "gGameInfoEnabled", GameUI::mGameInfoWindow,
- { .tooltip = "Shows the game info window, contains player and actor information" });
-
- UIWidgets::WindowButton(
- "Stats", "gStatsEnabled", GameUI::mStatsWindow,
- { .tooltip = "Shows the stats window, with your FPS and frametimes, and the OS you're playing on" });
- UIWidgets::WindowButton(
- "Console", "gConsoleEnabled", GameUI::mConsoleWindow,
- { .tooltip = "Enables the console window, allowing you to input commands, type help for some examples" });
-
- ImGui::EndMenu();
- }
}
void GameMenuBar::DrawElement() {
@@ -552,19 +460,19 @@ void GameMenuBar::DrawElement() {
ImGui::SetCursorPosY(0.0f);
- DrawSettingsMenu();
+ //DrawSettingsMenu();
ImGui::SetCursorPosY(0.0f);
- DrawEnhancementsMenu();
+ //DrawEnhancementsMenu();
ImGui::SetCursorPosY(0.0f);
- DrawCheatsMenu();
+ //DrawCheatsMenu();
ImGui::SetCursorPosY(0.0f);
- DrawDebugMenu();
+ //DrawDebugMenu();
ImGui::EndMenuBar();
}