Files
SpaghettiKart/src/port/ui/Tools.cpp
T
2025-03-13 16:52:01 -06:00

115 lines
3.5 KiB
C++

#include "Tools.h"
#include "port/ui/PortMenu.h"
#include "UIWidgets.h"
#include "libultraship/src/Context.h"
#include <imgui.h>
#include <map>
#include <libultraship/libultraship.h>
#include <spdlog/fmt/fmt.h>
#include "spdlog/formatter.h"
#include <common_structs.h>
#include <defines.h>
extern "C" {
#include "code_800029B0.h"
#include "code_80057C60.h"
}
namespace Editor {
ToolsWindow::~ToolsWindow() {
SPDLOG_TRACE("destruct tools window");
}
void ToolsWindow::InitElement() {
}
void ToolsWindow::DrawElement() {
static bool toggleGroundSnap = CVarGetInteger("gEditorSnapToGround", 0);
static bool toggleBoundary = CVarGetInteger("gEditorBoundary", 0);
static int selectedTool = 0; // 0: Move, 1: Rotate, 2: Scale
static int selectedPlayTool = 0; // 0: Play, 1: Paused
ImVec4 defaultColor = ImGui::GetStyle().Colors[ImGuiCol_Button];
// Function to check and highlight the selected button
auto ToolButton = [&](const char* label, int id) {
bool isSelected = (selectedTool == id);
ImGui::PushStyleColor(ImGuiCol_Button, isSelected ? ImVec4(0.4f, 0.7f, 0.9f, 1.0f) : defaultColor);
if (ImGui::Button(label, ImVec2(50, 25))) {
selectedTool = id; // Set the selected tool
CVarSetInteger("eGizmoMode", id);
}
ImGui::PopStyleColor();
};
// Draw buttons
ToolButton(ICON_FA_ARROWS, 0);
ImGui::SameLine();
ToolButton(ICON_FA_REPEAT, 1);
ImGui::SameLine();
ToolButton(ICON_FA_EXPAND, 2);
ImGui::SameLine();
// Snap to ground
ImGui::PushStyleColor(ImGuiCol_Button, toggleGroundSnap ? ImVec4(0.4f, 0.7f, 0.9f, 1.0f) : defaultColor);
if (ImGui::Button(ICON_FA_LINK, ImVec2(50, 25))) {
toggleGroundSnap = !toggleGroundSnap;
CVarSetInteger("gEditorSnapToGround", toggleGroundSnap);
}
ImGui::PopStyleColor();
ImGui::SameLine();
// Boundary
ImGui::PushStyleColor(ImGuiCol_Button, toggleBoundary ? ImVec4(0.4f, 0.7f, 0.9f, 1.0f) : defaultColor);
if (ImGui::Button(toggleBoundary ? "Map Boundaries" : "Map Boundaries", ImVec2(125, 25))) {
toggleBoundary = !toggleBoundary;
CVarSetInteger("gEditorBoundary", toggleBoundary);
}
ImGui::PopStyleColor();
ImGui::SameLine();
// Toggle player human/ai
bool playerToggle = (gPlayerOne->type & PLAYER_KART_AI);
ImGui::PushStyleColor(ImGuiCol_Button, defaultColor);
if (ImGui::Button(playerToggle ? ICON_FA_DESKTOP : ICON_FA_GAMEPAD, ImVec2(50, 25))) {
if (playerToggle) {
gPlayerOne->type &= ~PLAYER_KART_AI;
} else {
gPlayerOne->type |= PLAYER_KART_AI;
}
}
ImGui::PopStyleColor();
ImGui::SameLine();
// Play/pause button
ImGui::PushStyleColor(ImGuiCol_Button, defaultColor);
if (ImGui::Button(gIsEditorPaused ? ICON_FA_PLAY : ICON_FA_PAUSE, ImVec2(50, 25))) {
gIsEditorPaused = !gIsEditorPaused;
}
ImGui::PopStyleColor();
ImGui::SameLine();
// Toggle hud
ImGui::PushStyleColor(ImGuiCol_Button, gIsHUDVisible ? ImVec4(0.4f, 0.7f, 0.9f, 1.0f) : defaultColor);
if (ImGui::Button("Toggle HUD", ImVec2(150, 25))) {
gIsHUDVisible = !gIsHUDVisible;
}
ImGui::PopStyleColor();
}
}