mirror of
https://github.com/antopilo/Nuake.git
synced 2026-09-15 20:08:54 +03:00
147 lines
4.7 KiB
C++
147 lines
4.7 KiB
C++
#pragma once
|
|
#include "ComponentPanel.h"
|
|
|
|
#include <src/Core/FileSystem.h>
|
|
#include <src/Core/Maths.h>
|
|
#include <src/Scene/Components/AudioEmitterComponent.h>
|
|
#include <src/Scene/Entities/ImGuiHelper.h>
|
|
|
|
|
|
class AudioEmitterPanel : ComponentPanel
|
|
{
|
|
public:
|
|
AudioEmitterPanel() = default;
|
|
~AudioEmitterPanel() = default;
|
|
|
|
void Draw(Nuake::Entity entity) override
|
|
{
|
|
using namespace Nuake;
|
|
|
|
if (!entity.HasComponent<AudioEmitterComponent>())
|
|
return;
|
|
|
|
auto& component = entity.GetComponent<AudioEmitterComponent>();
|
|
BeginComponentTable(AUDIO EMITTER, AudioEmitterComponent);
|
|
{
|
|
{
|
|
ImGui::Text("Audio File");
|
|
ImGui::TableNextColumn();
|
|
|
|
std::string path = component.FilePath;
|
|
ImGui::Button(component.FilePath.c_str(), ImVec2(ImGui::GetContentRegionAvail().x, 0));
|
|
if (ImGui::BeginDragDropTarget())
|
|
{
|
|
if (const ImGuiPayload* payload = ImGui::AcceptDragDropPayload("_AudioFile"))
|
|
{
|
|
char* file = (char*)payload->Data;
|
|
std::string fullPath = std::string(file, 256);
|
|
path = Nuake::FileSystem::AbsoluteToRelative(fullPath);
|
|
component.FilePath = path;
|
|
}
|
|
ImGui::EndDragDropTarget();
|
|
}
|
|
|
|
ImGui::TableNextColumn();
|
|
|
|
ComponentTableReset(component.FilePath, "");
|
|
}
|
|
ImGui::TableNextColumn();
|
|
{
|
|
ImGui::Text("Playing");
|
|
ImGui::TableNextColumn();
|
|
|
|
UI::ToggleButton("##Player", &component.IsPlaying);
|
|
//ImGui::Checkbox("##Playing", &component.IsPlaying);
|
|
ImGui::TableNextColumn();
|
|
|
|
ComponentTableReset(component.IsPlaying, false);
|
|
}
|
|
ImGui::TableNextColumn();
|
|
{
|
|
ImGui::Text("Loop");
|
|
ImGui::TableNextColumn();
|
|
|
|
ImGui::Checkbox("##Loop", &component.Loop);
|
|
ImGui::TableNextColumn();
|
|
|
|
ComponentTableReset(component.Loop, false);
|
|
}
|
|
ImGui::TableNextColumn();
|
|
{
|
|
ImGui::Text("Volume");
|
|
ImGui::TableNextColumn();
|
|
|
|
ImGui::DragFloat("##Volume", &component.Volume, 0.001f, 0.0f, 2.0f);
|
|
ImGui::TableNextColumn();
|
|
|
|
ComponentTableReset(component.Volume, 1.0f);
|
|
}
|
|
ImGui::TableNextColumn();
|
|
{
|
|
ImGui::Text("Playback Speed");
|
|
ImGui::TableNextColumn();
|
|
|
|
ImGui::DragFloat("##PlaybackSpeed", &component.PlaybackSpeed, 0.01f, 0.0001f);
|
|
ImGui::TableNextColumn();
|
|
|
|
ComponentTableReset(component.PlaybackSpeed, 1.0f);
|
|
}
|
|
ImGui::TableNextColumn();
|
|
{
|
|
ImGui::Text("Pan");
|
|
ImGui::TableNextColumn();
|
|
|
|
ImGui::DragFloat("##Pan", &component.Pan, 0.01f, -1.0f, 1.0f);
|
|
ImGui::TableNextColumn();
|
|
|
|
ComponentTableReset(component.Pan, 0.0f);
|
|
}
|
|
|
|
ImGui::TableNextColumn();
|
|
{
|
|
ImGui::Text("Spatialized");
|
|
ImGui::TableNextColumn();
|
|
|
|
ImGui::Checkbox("##Spatialized", &component.Spatialized);
|
|
ImGui::TableNextColumn();
|
|
|
|
ComponentTableReset(component.Spatialized, false);
|
|
}
|
|
|
|
if (component.Spatialized)
|
|
{
|
|
ImGui::TableNextColumn();
|
|
{
|
|
ImGui::Text("Min Distance");
|
|
ImGui::TableNextColumn();
|
|
|
|
ImGui::DragFloat("##minDistance", &component.MinDistance, 0.001f, 0.0f);
|
|
ImGui::TableNextColumn();
|
|
|
|
ComponentTableReset(component.MinDistance, 1.0f);
|
|
}
|
|
ImGui::TableNextColumn();
|
|
{
|
|
ImGui::Text("Max Distance");
|
|
ImGui::TableNextColumn();
|
|
|
|
ImGui::DragFloat("##maxDistance", &component.MaxDistance, 0.001f, 0.0f);
|
|
ImGui::TableNextColumn();
|
|
|
|
ComponentTableReset(component.MaxDistance, 10.0f);
|
|
}
|
|
ImGui::TableNextColumn();
|
|
{
|
|
ImGui::Text("Attenuation Factor");
|
|
ImGui::TableNextColumn();
|
|
|
|
ImGui::DragFloat("##attenuationFactor", &component.AttenuationFactor, 0.001f, 0.0f);
|
|
ImGui::TableNextColumn();
|
|
|
|
ComponentTableReset(component.AttenuationFactor, 1.0f);
|
|
}
|
|
}
|
|
}
|
|
EndComponentTable();
|
|
}
|
|
}; |