0.49 (#160)
* renderer updates: material shadertype, customshaders * custom shader updates * hologram fix * editor windows refactor * major gui update: - gui no longer lifetime manager - window no longer needs gui to construct - removed gui constructors/destructors - rewritten every editor window * renderer update * gui hasfocus fix * editor fix * renderpath upgrades: hybrid forward-deferred * fix * water ripple refactor * cmake fix * cmake fix * renderer fix * volumetric light fix * customshader stencilref * cmake fix * rtdeferred fix * editor update * raytraced shadows denoise * anisotropic shader * sss stencil greater * added cartoon shader * using precomputed tangents * added unlit object shader * importer update * editor update * editor fix * vulkan envmap rendering fix * terrain shader simplification (normal texture mapping instead of triplanar) * added subsurface profiles, reduced gbuffer * denoise disocclusion fallback * editor fix * more sorting priority for blend than instancing * hairparticle culling * particle updates; font update instancing instead of index buffer; vulkan/dx12 fixes; * shader fixes * hairparticle trianglestrip and no cross section * editor fix * cam wnd update * terrain shader fix
This commit is contained in:
+134
-143
@@ -10,65 +10,62 @@ using namespace wiGraphics;
|
||||
using namespace wiECS;
|
||||
using namespace wiScene;
|
||||
|
||||
SoundWindow::SoundWindow(EditorComponent* editor) : GUI(&editor->GetGUI())
|
||||
void SoundWindow::Create(EditorComponent* editor)
|
||||
{
|
||||
assert(GUI && "Invalid GUI!");
|
||||
|
||||
soundWindow = new wiWindow(GUI, "Sound Window");
|
||||
soundWindow->SetSize(XMFLOAT2(440, 220));
|
||||
GUI->AddWidget(soundWindow);
|
||||
wiWindow::Create("Sound Window");
|
||||
SetSize(XMFLOAT2(440, 220));
|
||||
|
||||
float x = 20;
|
||||
float y = 10;
|
||||
float hei = 18;
|
||||
float step = hei + 2;
|
||||
|
||||
reverbComboBox = new wiComboBox("Reverb: ");
|
||||
reverbComboBox->SetPos(XMFLOAT2(x + 80, y += step));
|
||||
reverbComboBox->SetSize(XMFLOAT2(180, hei));
|
||||
reverbComboBox->OnSelect([&](wiEventArgs args) {
|
||||
reverbComboBox.Create("Reverb: ");
|
||||
reverbComboBox.SetPos(XMFLOAT2(x + 80, y += step));
|
||||
reverbComboBox.SetSize(XMFLOAT2(180, hei));
|
||||
reverbComboBox.OnSelect([&](wiEventArgs args) {
|
||||
wiAudio::SetReverb((wiAudio::REVERB_PRESET)args.iValue);
|
||||
});
|
||||
reverbComboBox->AddItem("DEFAULT");
|
||||
reverbComboBox->AddItem("GENERIC");
|
||||
reverbComboBox->AddItem("FOREST");
|
||||
reverbComboBox->AddItem("PADDEDCELL");
|
||||
reverbComboBox->AddItem("ROOM");
|
||||
reverbComboBox->AddItem("BATHROOM");
|
||||
reverbComboBox->AddItem("LIVINGROOM");
|
||||
reverbComboBox->AddItem("STONEROOM");
|
||||
reverbComboBox->AddItem("AUDITORIUM");
|
||||
reverbComboBox->AddItem("CONCERTHALL");
|
||||
reverbComboBox->AddItem("CAVE");
|
||||
reverbComboBox->AddItem("ARENA");
|
||||
reverbComboBox->AddItem("HANGAR");
|
||||
reverbComboBox->AddItem("CARPETEDHALLWAY");
|
||||
reverbComboBox->AddItem("HALLWAY");
|
||||
reverbComboBox->AddItem("STONECORRIDOR");
|
||||
reverbComboBox->AddItem("ALLEY");
|
||||
reverbComboBox->AddItem("CITY");
|
||||
reverbComboBox->AddItem("MOUNTAINS");
|
||||
reverbComboBox->AddItem("QUARRY");
|
||||
reverbComboBox->AddItem("PLAIN");
|
||||
reverbComboBox->AddItem("PARKINGLOT");
|
||||
reverbComboBox->AddItem("SEWERPIPE");
|
||||
reverbComboBox->AddItem("UNDERWATER");
|
||||
reverbComboBox->AddItem("SMALLROOM");
|
||||
reverbComboBox->AddItem("MEDIUMROOM");
|
||||
reverbComboBox->AddItem("LARGEROOM");
|
||||
reverbComboBox->AddItem("MEDIUMHALL");
|
||||
reverbComboBox->AddItem("LARGEHALL");
|
||||
reverbComboBox->AddItem("PLATE");
|
||||
reverbComboBox->SetTooltip("Set the global reverb setting. Sound instances need to enable reverb to take effect!");
|
||||
soundWindow->AddWidget(reverbComboBox);
|
||||
reverbComboBox.AddItem("DEFAULT");
|
||||
reverbComboBox.AddItem("GENERIC");
|
||||
reverbComboBox.AddItem("FOREST");
|
||||
reverbComboBox.AddItem("PADDEDCELL");
|
||||
reverbComboBox.AddItem("ROOM");
|
||||
reverbComboBox.AddItem("BATHROOM");
|
||||
reverbComboBox.AddItem("LIVINGROOM");
|
||||
reverbComboBox.AddItem("STONEROOM");
|
||||
reverbComboBox.AddItem("AUDITORIUM");
|
||||
reverbComboBox.AddItem("CONCERTHALL");
|
||||
reverbComboBox.AddItem("CAVE");
|
||||
reverbComboBox.AddItem("ARENA");
|
||||
reverbComboBox.AddItem("HANGAR");
|
||||
reverbComboBox.AddItem("CARPETEDHALLWAY");
|
||||
reverbComboBox.AddItem("HALLWAY");
|
||||
reverbComboBox.AddItem("STONECORRIDOR");
|
||||
reverbComboBox.AddItem("ALLEY");
|
||||
reverbComboBox.AddItem("CITY");
|
||||
reverbComboBox.AddItem("MOUNTAINS");
|
||||
reverbComboBox.AddItem("QUARRY");
|
||||
reverbComboBox.AddItem("PLAIN");
|
||||
reverbComboBox.AddItem("PARKINGLOT");
|
||||
reverbComboBox.AddItem("SEWERPIPE");
|
||||
reverbComboBox.AddItem("UNDERWATER");
|
||||
reverbComboBox.AddItem("SMALLROOM");
|
||||
reverbComboBox.AddItem("MEDIUMROOM");
|
||||
reverbComboBox.AddItem("LARGEROOM");
|
||||
reverbComboBox.AddItem("MEDIUMHALL");
|
||||
reverbComboBox.AddItem("LARGEHALL");
|
||||
reverbComboBox.AddItem("PLATE");
|
||||
reverbComboBox.SetTooltip("Set the global reverb setting. Sound instances need to enable reverb to take effect!");
|
||||
AddWidget(&reverbComboBox);
|
||||
|
||||
y += step;
|
||||
|
||||
addButton = new wiButton("Add Sound");
|
||||
addButton->SetTooltip("Add a sound file to the scene.");
|
||||
addButton->SetPos(XMFLOAT2(x, y += step));
|
||||
addButton->SetSize(XMFLOAT2(80, hei));
|
||||
addButton->OnClick([=](wiEventArgs args) {
|
||||
addButton.Create("Add Sound");
|
||||
addButton.SetTooltip("Add a sound file to the scene.");
|
||||
addButton.SetPos(XMFLOAT2(x, y += step));
|
||||
addButton.SetSize(XMFLOAT2(80, hei));
|
||||
addButton.OnClick([=](wiEventArgs args) {
|
||||
wiHelper::FileDialogParams params;
|
||||
params.type = wiHelper::FileDialogParams::OPEN;
|
||||
params.description = "Sound";
|
||||
@@ -79,22 +76,23 @@ SoundWindow::SoundWindow(EditorComponent* editor) : GUI(&editor->GetGUI())
|
||||
Entity entity = GetScene().Entity_CreateSound("editorSound", fileName);
|
||||
editor->ClearSelected();
|
||||
editor->AddSelected(entity);
|
||||
editor->RefreshSceneGraphView();
|
||||
SetEntity(entity);
|
||||
});
|
||||
});
|
||||
});
|
||||
soundWindow->AddWidget(addButton);
|
||||
AddWidget(&addButton);
|
||||
|
||||
filenameLabel = new wiLabel("Filename");
|
||||
filenameLabel->SetPos(XMFLOAT2(x, y += step));
|
||||
filenameLabel->SetSize(XMFLOAT2(400, hei));
|
||||
soundWindow->AddWidget(filenameLabel);
|
||||
filenameLabel.Create("Filename");
|
||||
filenameLabel.SetPos(XMFLOAT2(x, y += step));
|
||||
filenameLabel.SetSize(XMFLOAT2(400, hei));
|
||||
AddWidget(&filenameLabel);
|
||||
|
||||
nameField = new wiTextInputField("SoundName");
|
||||
nameField->SetTooltip("Enter a sound name to identify this entity...");
|
||||
nameField->SetPos(XMFLOAT2(x, y += step));
|
||||
nameField->SetSize(XMFLOAT2(300, hei));
|
||||
nameField->OnInputAccepted([&](wiEventArgs args) {
|
||||
nameField.Create("SoundName");
|
||||
nameField.SetTooltip("Enter a sound name to identify this entity...");
|
||||
nameField.SetPos(XMFLOAT2(x, y += step));
|
||||
nameField.SetSize(XMFLOAT2(300, hei));
|
||||
nameField.OnInputAccepted([&](wiEventArgs args) {
|
||||
NameComponent* name = wiScene::GetScene().names.GetComponent(entity);
|
||||
if (name == nullptr)
|
||||
{
|
||||
@@ -102,51 +100,51 @@ SoundWindow::SoundWindow(EditorComponent* editor) : GUI(&editor->GetGUI())
|
||||
}
|
||||
*name = args.sValue;
|
||||
});
|
||||
soundWindow->AddWidget(nameField);
|
||||
nameField->SetEnabled(false);
|
||||
AddWidget(&nameField);
|
||||
nameField.SetEnabled(false);
|
||||
|
||||
playstopButton = new wiButton("Play");
|
||||
playstopButton->SetTooltip("Play/Stop selected sound instance.");
|
||||
playstopButton->SetPos(XMFLOAT2(x, y += step));
|
||||
playstopButton->SetSize(XMFLOAT2(80, hei));
|
||||
playstopButton->OnClick([&](wiEventArgs args) {
|
||||
playstopButton.Create("Play");
|
||||
playstopButton.SetTooltip("Play/Stop selected sound instance.");
|
||||
playstopButton.SetPos(XMFLOAT2(x, y += step));
|
||||
playstopButton.SetSize(XMFLOAT2(80, hei));
|
||||
playstopButton.OnClick([&](wiEventArgs args) {
|
||||
SoundComponent* sound = GetScene().sounds.GetComponent(entity);
|
||||
if (sound != nullptr)
|
||||
{
|
||||
if (sound->IsPlaying())
|
||||
{
|
||||
sound->Stop();
|
||||
playstopButton->SetText("Play");
|
||||
playstopButton.SetText("Play");
|
||||
}
|
||||
else
|
||||
{
|
||||
sound->Play();
|
||||
playstopButton->SetText("Stop");
|
||||
playstopButton.SetText("Stop");
|
||||
}
|
||||
}
|
||||
});
|
||||
soundWindow->AddWidget(playstopButton);
|
||||
playstopButton->SetEnabled(false);
|
||||
AddWidget(&playstopButton);
|
||||
playstopButton.SetEnabled(false);
|
||||
|
||||
loopedCheckbox = new wiCheckBox("Looped: ");
|
||||
loopedCheckbox->SetTooltip("Enable looping for the selected sound instance.");
|
||||
loopedCheckbox->SetPos(XMFLOAT2(x + 150, y));
|
||||
loopedCheckbox->SetSize(XMFLOAT2(hei, hei));
|
||||
loopedCheckbox->OnClick([&](wiEventArgs args) {
|
||||
loopedCheckbox.Create("Looped: ");
|
||||
loopedCheckbox.SetTooltip("Enable looping for the selected sound instance.");
|
||||
loopedCheckbox.SetPos(XMFLOAT2(x + 150, y));
|
||||
loopedCheckbox.SetSize(XMFLOAT2(hei, hei));
|
||||
loopedCheckbox.OnClick([&](wiEventArgs args) {
|
||||
SoundComponent* sound = GetScene().sounds.GetComponent(entity);
|
||||
if (sound != nullptr)
|
||||
{
|
||||
sound->SetLooped(args.bValue);
|
||||
}
|
||||
});
|
||||
soundWindow->AddWidget(loopedCheckbox);
|
||||
loopedCheckbox->SetEnabled(false);
|
||||
AddWidget(&loopedCheckbox);
|
||||
loopedCheckbox.SetEnabled(false);
|
||||
|
||||
reverbCheckbox = new wiCheckBox("Reverb: ");
|
||||
reverbCheckbox->SetTooltip("Enable/disable reverb.");
|
||||
reverbCheckbox->SetPos(XMFLOAT2(x + 240, y));
|
||||
reverbCheckbox->SetSize(XMFLOAT2(hei, hei));
|
||||
reverbCheckbox->OnClick([&](wiEventArgs args) {
|
||||
reverbCheckbox.Create("Reverb: ");
|
||||
reverbCheckbox.SetTooltip("Enable/disable reverb.");
|
||||
reverbCheckbox.SetPos(XMFLOAT2(x + 240, y));
|
||||
reverbCheckbox.SetSize(XMFLOAT2(hei, hei));
|
||||
reverbCheckbox.OnClick([&](wiEventArgs args) {
|
||||
SoundComponent* sound = GetScene().sounds.GetComponent(entity);
|
||||
if (sound != nullptr)
|
||||
{
|
||||
@@ -154,14 +152,14 @@ SoundWindow::SoundWindow(EditorComponent* editor) : GUI(&editor->GetGUI())
|
||||
wiAudio::CreateSoundInstance(sound->soundResource->sound, &sound->soundinstance);
|
||||
}
|
||||
});
|
||||
soundWindow->AddWidget(reverbCheckbox);
|
||||
reverbCheckbox->SetEnabled(false);
|
||||
AddWidget(&reverbCheckbox);
|
||||
reverbCheckbox.SetEnabled(false);
|
||||
|
||||
disable3dCheckbox = new wiCheckBox("2D: ");
|
||||
disable3dCheckbox->SetTooltip("Sounds in the scene are 3D spatial by default. Select this to disable 3D effect.");
|
||||
disable3dCheckbox->SetPos(XMFLOAT2(x + 300, y));
|
||||
disable3dCheckbox->SetSize(XMFLOAT2(hei, hei));
|
||||
disable3dCheckbox->OnClick([&](wiEventArgs args) {
|
||||
disable3dCheckbox.Create("2D: ");
|
||||
disable3dCheckbox.SetTooltip("Sounds in the scene are 3D spatial by default. Select this to disable 3D effect.");
|
||||
disable3dCheckbox.SetPos(XMFLOAT2(x + 300, y));
|
||||
disable3dCheckbox.SetSize(XMFLOAT2(hei, hei));
|
||||
disable3dCheckbox.OnClick([&](wiEventArgs args) {
|
||||
SoundComponent* sound = GetScene().sounds.GetComponent(entity);
|
||||
if (sound != nullptr)
|
||||
{
|
||||
@@ -169,27 +167,27 @@ SoundWindow::SoundWindow(EditorComponent* editor) : GUI(&editor->GetGUI())
|
||||
wiAudio::CreateSoundInstance(sound->soundResource->sound, &sound->soundinstance);
|
||||
}
|
||||
});
|
||||
soundWindow->AddWidget(disable3dCheckbox);
|
||||
loopedCheckbox->SetEnabled(false);
|
||||
AddWidget(&disable3dCheckbox);
|
||||
loopedCheckbox.SetEnabled(false);
|
||||
|
||||
volumeSlider = new wiSlider(0, 1, 1, 1000, "Volume: ");
|
||||
volumeSlider->SetTooltip("Set volume level for the selected sound instance.");
|
||||
volumeSlider->SetPos(XMFLOAT2(x + 60, y += step));
|
||||
volumeSlider->SetSize(XMFLOAT2(240, hei));
|
||||
volumeSlider->OnSlide([&](wiEventArgs args) {
|
||||
volumeSlider.Create(0, 1, 1, 1000, "Volume: ");
|
||||
volumeSlider.SetTooltip("Set volume level for the selected sound instance.");
|
||||
volumeSlider.SetPos(XMFLOAT2(x + 60, y += step));
|
||||
volumeSlider.SetSize(XMFLOAT2(240, hei));
|
||||
volumeSlider.OnSlide([&](wiEventArgs args) {
|
||||
SoundComponent* sound = GetScene().sounds.GetComponent(entity);
|
||||
if (sound != nullptr)
|
||||
{
|
||||
sound->volume = args.fValue;
|
||||
}
|
||||
});
|
||||
soundWindow->AddWidget(volumeSlider);
|
||||
volumeSlider->SetEnabled(false);
|
||||
AddWidget(&volumeSlider);
|
||||
volumeSlider.SetEnabled(false);
|
||||
|
||||
submixComboBox = new wiComboBox("Submix: ");
|
||||
submixComboBox->SetPos(XMFLOAT2(x + 80, y += step));
|
||||
submixComboBox->SetSize(XMFLOAT2(180, hei));
|
||||
submixComboBox->OnSelect([&](wiEventArgs args) {
|
||||
submixComboBox.Create("Submix: ");
|
||||
submixComboBox.SetPos(XMFLOAT2(x + 80, y += step));
|
||||
submixComboBox.SetSize(XMFLOAT2(180, hei));
|
||||
submixComboBox.OnSelect([&](wiEventArgs args) {
|
||||
SoundComponent* sound = GetScene().sounds.GetComponent(entity);
|
||||
if (sound != nullptr)
|
||||
{
|
||||
@@ -197,27 +195,20 @@ SoundWindow::SoundWindow(EditorComponent* editor) : GUI(&editor->GetGUI())
|
||||
wiAudio::CreateSoundInstance(sound->soundResource->sound, &sound->soundinstance);
|
||||
}
|
||||
});
|
||||
submixComboBox->AddItem("SOUNDEFFECT");
|
||||
submixComboBox->AddItem("MUSIC");
|
||||
submixComboBox->AddItem("USER0");
|
||||
submixComboBox->AddItem("USER1");
|
||||
submixComboBox->SetTooltip("Set the submix channel of the sound. \nSound properties like volume can be set per sound, or per submix channel.");
|
||||
submixComboBox->SetScriptTip("SoundInstance::SetSubmixType(int submixType)");
|
||||
soundWindow->AddWidget(submixComboBox);
|
||||
submixComboBox.AddItem("SOUNDEFFECT");
|
||||
submixComboBox.AddItem("MUSIC");
|
||||
submixComboBox.AddItem("USER0");
|
||||
submixComboBox.AddItem("USER1");
|
||||
submixComboBox.SetTooltip("Set the submix channel of the sound. \nSound properties like volume can be set per sound, or per submix channel.");
|
||||
submixComboBox.SetScriptTip("SoundInstance::SetSubmixType(int submixType)");
|
||||
AddWidget(&submixComboBox);
|
||||
|
||||
soundWindow->Translate(XMFLOAT3(400, 120, 0));
|
||||
soundWindow->SetVisible(false);
|
||||
Translate(XMFLOAT3(400, 120, 0));
|
||||
SetVisible(false);
|
||||
|
||||
SetEntity(INVALID_ENTITY);
|
||||
}
|
||||
|
||||
SoundWindow::~SoundWindow()
|
||||
{
|
||||
soundWindow->RemoveWidgets(true);
|
||||
GUI->RemoveWidget(soundWindow);
|
||||
delete soundWindow;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void SoundWindow::SetEntity(Entity entity)
|
||||
@@ -230,50 +221,50 @@ void SoundWindow::SetEntity(Entity entity)
|
||||
|
||||
if (sound != nullptr)
|
||||
{
|
||||
filenameLabel->SetText(sound->filename);
|
||||
filenameLabel.SetText(sound->filename);
|
||||
if (name == nullptr)
|
||||
{
|
||||
nameField->SetText("Enter a sound name...");
|
||||
nameField.SetText("Enter a sound name...");
|
||||
}
|
||||
else
|
||||
{
|
||||
nameField->SetText(name->name);
|
||||
nameField.SetText(name->name);
|
||||
}
|
||||
nameField->SetEnabled(true);
|
||||
playstopButton->SetEnabled(true);
|
||||
loopedCheckbox->SetEnabled(true);
|
||||
loopedCheckbox->SetCheck(sound->IsLooped());
|
||||
reverbCheckbox->SetEnabled(true);
|
||||
reverbCheckbox->SetCheck(sound->soundinstance.IsEnableReverb());
|
||||
disable3dCheckbox->SetEnabled(true);
|
||||
disable3dCheckbox->SetCheck(sound->IsDisable3D());
|
||||
volumeSlider->SetEnabled(true);
|
||||
volumeSlider->SetValue(sound->volume);
|
||||
nameField.SetEnabled(true);
|
||||
playstopButton.SetEnabled(true);
|
||||
loopedCheckbox.SetEnabled(true);
|
||||
loopedCheckbox.SetCheck(sound->IsLooped());
|
||||
reverbCheckbox.SetEnabled(true);
|
||||
reverbCheckbox.SetCheck(sound->soundinstance.IsEnableReverb());
|
||||
disable3dCheckbox.SetEnabled(true);
|
||||
disable3dCheckbox.SetCheck(sound->IsDisable3D());
|
||||
volumeSlider.SetEnabled(true);
|
||||
volumeSlider.SetValue(sound->volume);
|
||||
if (sound->IsPlaying())
|
||||
{
|
||||
playstopButton->SetText("Stop");
|
||||
playstopButton.SetText("Stop");
|
||||
}
|
||||
else
|
||||
{
|
||||
playstopButton->SetText("Play");
|
||||
playstopButton.SetText("Play");
|
||||
}
|
||||
submixComboBox->SetEnabled(true);
|
||||
if (submixComboBox->GetSelected() != (int)sound->soundinstance.type)
|
||||
submixComboBox.SetEnabled(true);
|
||||
if (submixComboBox.GetSelected() != (int)sound->soundinstance.type)
|
||||
{
|
||||
submixComboBox->SetSelected((int)sound->soundinstance.type);
|
||||
submixComboBox.SetSelected((int)sound->soundinstance.type);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
filenameLabel->SetText("");
|
||||
nameField->SetText("");
|
||||
nameField->SetEnabled(false);
|
||||
playstopButton->SetEnabled(false);
|
||||
loopedCheckbox->SetEnabled(false);
|
||||
reverbCheckbox->SetEnabled(false);
|
||||
disable3dCheckbox->SetEnabled(false);
|
||||
volumeSlider->SetEnabled(false);
|
||||
submixComboBox->SetEnabled(false);
|
||||
filenameLabel.SetText("");
|
||||
nameField.SetText("");
|
||||
nameField.SetEnabled(false);
|
||||
playstopButton.SetEnabled(false);
|
||||
loopedCheckbox.SetEnabled(false);
|
||||
reverbCheckbox.SetEnabled(false);
|
||||
disable3dCheckbox.SetEnabled(false);
|
||||
volumeSlider.SetEnabled(false);
|
||||
submixComboBox.SetEnabled(false);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user