Files
Unreal_EmberWild/Source/Survival_projet/Private/SettingsAudioWidget.cpp
T
2026-08-06 13:27:21 +02:00

182 lines
4.9 KiB
C++

// Fill out your copyright notice in the Description page of Project Settings.
#include "SettingsAudioWidget.h"
#include "SettingRowWidget.h"
#include "SurvivalUserSettings.h"
#define LOCTEXT_NAMESPACE "Reglages"
namespace SettingsAudioTab
{
/** La seule liste de choix de cet onglet. */
TArray<FText> MakeMuteAudibleLabels()
{
return { LOCTEXT("Muet", "Muet"), LOCTEXT("Audible", "Audible") };
}
}
void USettingsAudioWidget::NativeConstruct()
{
Super::NativeConstruct();
using namespace SurvivalSettingsRange;
using namespace SettingsAudioTab;
const FText PercentSuffix = LOCTEXT("Pourcent", " %");
if (MasterVolumeRow)
{
MasterVolumeRow->SetupAsNumber(LOCTEXT("VolumeGeneral", "Volume général"),
VolumeMin, VolumeMax, VolumeStep, VolumeArrowStep, VolumeMin, PercentSuffix);
MasterVolumeRow->OnIndexChanged.AddDynamic(this, &USettingsAudioWidget::HandleMasterVolumeChanged);
}
if (MusicVolumeRow)
{
MusicVolumeRow->SetupAsNumber(LOCTEXT("Musique", "Musique"),
VolumeMin, VolumeMax, VolumeStep, VolumeArrowStep, VolumeMin, PercentSuffix);
MusicVolumeRow->OnIndexChanged.AddDynamic(this, &USettingsAudioWidget::HandleMusicVolumeChanged);
}
if (EffectsVolumeRow)
{
// Cle "EffetsSonores" et pas "Effets" : l'onglet Graphismes utilise deja
// cette derniere pour la qualite des effets visuels, dans le meme namespace.
EffectsVolumeRow->SetupAsNumber(LOCTEXT("EffetsSonores", "Effets sonores"),
VolumeMin, VolumeMax, VolumeStep, VolumeArrowStep, VolumeMin, PercentSuffix);
EffectsVolumeRow->OnIndexChanged.AddDynamic(this, &USettingsAudioWidget::HandleEffectsVolumeChanged);
}
if (UiVolumeRow)
{
UiVolumeRow->SetupAsNumber(LOCTEXT("Interface", "Interface"),
VolumeMin, VolumeMax, VolumeStep, VolumeArrowStep, VolumeMin, PercentSuffix);
UiVolumeRow->OnIndexChanged.AddDynamic(this, &USettingsAudioWidget::HandleUiVolumeChanged);
}
if (BackgroundSoundRow)
{
BackgroundSoundRow->SetupAsChoice(LOCTEXT("SonEnArrierePlan", "Jeu en arrière-plan"),
MakeMuteAudibleLabels(), 0);
BackgroundSoundRow->OnIndexChanged.AddDynamic(this, &USettingsAudioWidget::HandleBackgroundSoundChanged);
}
RefreshFromSettings();
}
void USettingsAudioWidget::RefreshFromSettings()
{
USurvivalUserSettings* Settings = USurvivalUserSettings::Get();
if (!Settings)
{
UE_LOG(LogTemp, Error, TEXT("USettingsAudioWidget : GameUserSettingsClassName n'est pas configure dans DefaultEngine.ini, l'onglet restera inerte."));
return;
}
// SetNumericValueSilently : diffuser ici ferait boucler l'onglet sur lui-meme.
if (MasterVolumeRow)
{
MasterVolumeRow->SetNumericValueSilently(Settings->GetMasterVolume());
}
if (MusicVolumeRow)
{
MusicVolumeRow->SetNumericValueSilently(Settings->GetMusicVolume());
}
if (EffectsVolumeRow)
{
EffectsVolumeRow->SetNumericValueSilently(Settings->GetEffectsVolume());
}
if (UiVolumeRow)
{
UiVolumeRow->SetNumericValueSilently(Settings->GetUiVolume());
}
if (BackgroundSoundRow)
{
BackgroundSoundRow->SetIndexSilently(Settings->GetPlayInBackground() ? 1 : 0);
}
}
void USettingsAudioWidget::ResetToDefaults()
{
USurvivalUserSettings* Settings = USurvivalUserSettings::Get();
if (!Settings)
{
return;
}
Settings->SetSurvivalAudioToDefaults();
Settings->ApplyAudioSettings();
RefreshFromSettings();
}
void USettingsAudioWidget::HandleMasterVolumeChanged(int32 NewIndex)
{
USurvivalUserSettings* Settings = USurvivalUserSettings::Get();
if (!Settings || !MasterVolumeRow)
{
return;
}
Settings->SetMasterVolume(MasterVolumeRow->GetNumericValue());
// Pas de SaveSettings ici : c'est l'ecran de reglages qui ecrit le .ini en se
// fermant. Meme regle que les autres onglets.
Settings->ApplyAudioSettings();
}
void USettingsAudioWidget::HandleMusicVolumeChanged(int32 NewIndex)
{
USurvivalUserSettings* Settings = USurvivalUserSettings::Get();
if (!Settings || !MusicVolumeRow)
{
return;
}
Settings->SetMusicVolume(MusicVolumeRow->GetNumericValue());
Settings->ApplyAudioSettings();
}
void USettingsAudioWidget::HandleEffectsVolumeChanged(int32 NewIndex)
{
USurvivalUserSettings* Settings = USurvivalUserSettings::Get();
if (!Settings || !EffectsVolumeRow)
{
return;
}
Settings->SetEffectsVolume(EffectsVolumeRow->GetNumericValue());
Settings->ApplyAudioSettings();
}
void USettingsAudioWidget::HandleUiVolumeChanged(int32 NewIndex)
{
USurvivalUserSettings* Settings = USurvivalUserSettings::Get();
if (!Settings || !UiVolumeRow)
{
return;
}
// Aucun son de test a jouer : les fleches de la ligne portent deja le son de
// clic de l'interface, donc le joueur entend le reglage qu'il est en train de
// faire, sur le son exact qu'il regle.
Settings->SetUiVolume(UiVolumeRow->GetNumericValue());
Settings->ApplyAudioSettings();
}
void USettingsAudioWidget::HandleBackgroundSoundChanged(int32 NewIndex)
{
if (USurvivalUserSettings* Settings = USurvivalUserSettings::Get())
{
Settings->SetPlayInBackground(NewIndex == 1);
Settings->ApplyAudioSettings();
}
}
#undef LOCTEXT_NAMESPACE