Files
Nuake-custom/Editor/src/Windows/ProjectSettings/ProjectSettingsWindow.cpp
WiggleWizard 7efa69a20d Enabled multithreaded compilation and fixed some build warnings
Enabled MT compilation for all first party TUs and some third party ones too. Disabled specific warnings in third party code, started fixing warnings in first party code as well
2024-09-11 12:03:09 +01:00

212 lines
6.7 KiB
C++

#include "ProjectSettingsWindow.h"
#include <imgui/imgui.h>
#include "../../Misc/InterfaceFonts.h"
#include <src/FileSystem/FileDialog.h>
#include "src/FileSystem/FileSystem.h"
#include "../EditorInterface.h"
#include "../../Commands/Commands/Commands.h"
#include <src/Audio/AudioManager.h>
ProjectSettingsCategoryWindowGeneral::ProjectSettingsCategoryWindowGeneral(Ref<Nuake::Project> project) :
m_Project(project)
{
Name = "General";
}
void ProjectSettingsCategoryWindowGeneral::Draw()
{
ImGui::InputText("Project Name", &m_Project->Name);
ImGui::InputTextMultiline("Project Description", &m_Project->Description);
if (ImGui::Button("Locate"))
{
const std::string& locationPath = Nuake::FileDialog::OpenFile("TrenchBroom (.exe)\0TrenchBroom.exe\0");
if (!locationPath.empty())
{
m_Project->TrenchbroomPath = locationPath;
}
}
ImGui::SameLine();
ImGui::InputText("Trenchbroom Path", &m_Project->TrenchbroomPath);
ImGui::ColorEdit4("Primary Color", &m_Project->Settings.PrimaryColor.r);
}
ProjectSettingsWindow::ProjectSettingsWindow()
{
}
void ProjectSettingsWindow::Init(Ref<Nuake::Project> project)
{
if (m_Project == project)
{
return;
}
m_Project = project;
m_CategoryWindows.clear();
m_CategoryWindows.push_back(CreateRef<ProjectSettingsCategoryWindowGeneral>(project));
m_CategoryWindows.push_back(CreateRef<ProjectSettingsCategoryWindowViewport>(project));
m_CategoryWindows.push_back(CreateRef<ProjectSettingsCategoryWindowRendering>(project));
m_CategoryWindows.push_back(CreateRef<ProjectSettingsCategoryScripting>(project));
m_CategoryWindows.push_back(CreateRef<ProjectSettingsCategoryPhysics>(project));
m_CategoryWindows.push_back(CreateRef<ProjectSettingsCategoryAudio>(project));
}
void ProjectSettingsWindow::Draw()
{
if (!m_DisplayWindow)
{
return;
}
ImGui::SetNextWindowSizeConstraints({800, 400}, {1280, 720});
if (ImGui::Begin("Project Settings", &m_DisplayWindow, ImGuiWindowFlags_NoDocking))
{
ImVec4* colors = ImGui::GetStyle().Colors;
ImGui::PushStyleColor(ImGuiCol_ChildBg, colors[ImGuiCol_TitleBgCollapsed]);
ImGui::PushStyleVar(ImGuiStyleVar_WindowBorderSize, 8);
if(ImGui::BeginChild("ProjectSettingsLeft", { 200, ImGui::GetContentRegionAvail().y }, true))
{
for (int i = 0; i < static_cast<int>(m_CategoryWindows.size()); i++)
{
ImGuiTreeNodeFlags base_flags = ImGuiTreeNodeFlags_Leaf | ImGuiTreeNodeFlags_SpanAvailWidth | ImGuiTreeNodeFlags_SpanFullWidth | ImGuiTreeNodeFlags_DefaultOpen | ImGuiTreeNodeFlags_FramePadding;
bool is_selected = m_CurrentTab == i;
if (is_selected)
{
base_flags |= ImGuiTreeNodeFlags_Selected;
}
Ref<ProjectSettingsCategoryWindow> window = m_CategoryWindows.at(i);
ImGui::PushStyleVar(ImGuiStyleVar_CellPadding, ImVec2(0, 0));
ImGui::PushFont(FontManager::GetFont(Bold));
ImGui::TreeNodeEx(window->Name.c_str(), base_flags);
if (ImGui::IsItemClicked())
{
m_CurrentTab = i;
}
ImGui::TreePop();
ImGui::PopFont();
ImGui::PopStyleVar();
}
}
ImGui::EndChild();
ImGui::PopStyleVar();
ImGui::PopStyleColor();
ImGui::SameLine();
if(ImGui::BeginChild("ProjectSettingsRight", ImGui::GetContentRegionAvail(), ImGuiChildFlags_Border))
{
m_CategoryWindows.at(m_CurrentTab)->Draw();
}
ImGui::EndChild();
}
ImGui::End();
}
ProjectSettingsCategoryWindowViewport::ProjectSettingsCategoryWindowViewport(Ref<Nuake::Project> project) :
m_Project(project)
{
Name = "Viewport";
}
void ProjectSettingsCategoryWindowViewport::Draw()
{
ImGui::DragFloat("Outline Radius", &m_Project->Settings.OutlineRadius, 0.1f, 1.0f, 90.0f);
ImGui::DragFloat("Gizmo Size", &m_Project->Settings.GizmoSize, 0.01f, 0.05f, 0.5f);
ImGui::Separator();
ImGui::Checkbox("Smooth Camera", &m_Project->Settings.SmoothCamera);
if (!m_Project->Settings.SmoothCamera)
{
ImGui::BeginDisabled();
}
ImGui::DragFloat("Smooth Camera Speed", &m_Project->Settings.SmoothCameraSpeed, 0.01f, 0.01f, 1.0f);
if (!m_Project->Settings.SmoothCamera)
{
ImGui::EndDisabled();
}
}
ProjectSettingsCategoryWindowRendering::ProjectSettingsCategoryWindowRendering(Ref<Nuake::Project> project) :
m_Project(project)
{
Name = "Rendering";
}
void ProjectSettingsCategoryWindowRendering::Draw()
{
bool oldVsync = m_Project->Settings.VSync;
ImGui::Checkbox("VSync", &m_Project->Settings.VSync);
if (oldVsync != m_Project->Settings.VSync)
{
Nuake::EditorInterface::PushCommand(SetVSync(m_Project->Settings.VSync));
}
ImGui::DragFloat("Resolution Scale", &m_Project->Settings.ResolutionScale, 0.01f, 0.05f, 2.0f);
}
ProjectSettingsCategoryScripting::ProjectSettingsCategoryScripting(Ref<Nuake::Project> project) :
m_Project(project)
{
Name = "Scripting";
}
void ProjectSettingsCategoryScripting::Draw()
{
}
ProjectSettingsCategoryPhysics::ProjectSettingsCategoryPhysics(Ref<Nuake::Project> project) :
m_Project(project)
{
Name = "Physics";
}
void ProjectSettingsCategoryPhysics::Draw()
{
int oldStep = Engine::GetProject()->Settings.PhysicsStep;
ImGui::DragInt("Physics Step", &Engine::GetProject()->Settings.PhysicsStep, 1.0f, 30.0f, 200.0f);
if (oldStep != Engine::GetProject()->Settings.PhysicsStep)
{
Engine::SetPhysicsStep(Engine::GetProject()->Settings.PhysicsStep);
}
ImGui::DragInt("Maximum SubSteps", &Engine::GetProject()->Settings.MaxPhysicsSubStep, 1, 8, 128);
ImGui::DragInt("Maximum Bodies", &Engine::GetProject()->Settings.MaxPhysicsBodies, 1.0f, 256, 8000);
ImGui::DragInt("Maximum Body Pair", &Engine::GetProject()->Settings.MaxPhysicsBodyPair, 1.0f, 256, 4096);
ImGui::DragInt("Maximum Contact Constraint", &Engine::GetProject()->Settings.MaxPhysicsContactConstraints, 1.0f, 256, 4096);
}
ProjectSettingsCategoryAudio::ProjectSettingsCategoryAudio(Ref<Nuake::Project> project) :
m_Project(project)
{
Name = "Audio";
}
void ProjectSettingsCategoryAudio::Draw()
{
float oldVolume = Engine::GetProject()->Settings.GlobalVolume;
ImGui::DragFloat("Global Volume", &Engine::GetProject()->Settings.GlobalVolume, 0.01f, 0.0f, 1.0f);
if (oldVolume != Engine::GetProject()->Settings.GlobalVolume)
{
Nuake::AudioManager::Get().SetGlobalVolume(Engine::GetProject()->Settings.GlobalVolume);
}
ImGui::DragInt("Max Active Voices", &Engine::GetProject()->Settings.MaxActiveVoiceCount, 1.0f, 8.0f, 64.0f);
}