(Feat) Add Main Menu + Music Manger
This commit is contained in:
@@ -0,0 +1,250 @@
|
||||
// Fill out your copyright notice in the Description page of Project Settings.
|
||||
|
||||
|
||||
#include "SettingsGraphicsWidget.h"
|
||||
|
||||
#include "SettingRowWidget.h"
|
||||
#include "SurvivalUserSettings.h"
|
||||
|
||||
#define LOCTEXT_NAMESPACE "Reglages"
|
||||
|
||||
namespace SettingsGraphicsTab
|
||||
{
|
||||
/**
|
||||
* Index de "Personnalise" dans la ligne de qualite globale.
|
||||
*
|
||||
* Le moteur renvoie -1 quand les curseurs ne correspondent a aucun preset.
|
||||
* On l'affiche comme un cinquieme choix, mais SetMaxSelectableIndex(3)
|
||||
* empeche le joueur de le selectionner : c'est un etat dans lequel on tombe,
|
||||
* pas un reglage qu'on choisit.
|
||||
*/
|
||||
constexpr int32 CustomQualityIndex = 4;
|
||||
|
||||
/** Bas / Moyen / Eleve / Epique. Le moteur accepte aussi 4 (cinematique), qu'on n'expose pas. */
|
||||
constexpr int32 MaxQualityLevel = 3;
|
||||
}
|
||||
|
||||
void USettingsGraphicsWidget::SetupQualityRow(USettingRowWidget* Row, const FText& Label)
|
||||
{
|
||||
if (!Row)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Row->SetupAsChoice(Label,
|
||||
{ LOCTEXT("QualiteBas", "Bas"),
|
||||
LOCTEXT("QualiteMoyen", "Moyen"),
|
||||
LOCTEXT("QualiteEleve", "Élevé"),
|
||||
LOCTEXT("QualiteEpique", "Épique") }, 0);
|
||||
}
|
||||
|
||||
void USettingsGraphicsWidget::NativeConstruct()
|
||||
{
|
||||
Super::NativeConstruct();
|
||||
|
||||
if (OverallQualityRow)
|
||||
{
|
||||
OverallQualityRow->SetupAsChoice(LOCTEXT("QualiteGlobale", "Qualité globale"),
|
||||
{ LOCTEXT("QualiteBas", "Bas"),
|
||||
LOCTEXT("QualiteMoyen", "Moyen"),
|
||||
LOCTEXT("QualiteEleve", "Élevé"),
|
||||
LOCTEXT("QualiteEpique", "Épique"),
|
||||
LOCTEXT("QualitePerso", "Personnalisé") }, 0);
|
||||
|
||||
OverallQualityRow->SetMaxSelectableIndex(SettingsGraphicsTab::MaxQualityLevel);
|
||||
OverallQualityRow->OnIndexChanged.AddDynamic(this, &USettingsGraphicsWidget::HandleOverallQualityChanged);
|
||||
}
|
||||
|
||||
SetupQualityRow(ViewDistanceRow, LOCTEXT("DistanceAffichage", "Distance d'affichage"));
|
||||
SetupQualityRow(FoliageRow, LOCTEXT("Vegetation", "Végétation"));
|
||||
SetupQualityRow(ShadowRow, LOCTEXT("Ombres", "Ombres"));
|
||||
SetupQualityRow(TextureRow, LOCTEXT("Textures", "Textures"));
|
||||
SetupQualityRow(VisualEffectRow, LOCTEXT("Effets", "Effets"));
|
||||
SetupQualityRow(PostProcessRow, LOCTEXT("PostProcess", "Post-process"));
|
||||
SetupQualityRow(AntiAliasingRow, LOCTEXT("AntiAliasing", "Anti-aliasing"));
|
||||
SetupQualityRow(ReflectionRow, LOCTEXT("Reflexions", "Réflexions"));
|
||||
SetupQualityRow(GlobalIlluminationRow, LOCTEXT("EclairageGlobal", "Éclairage global"));
|
||||
SetupQualityRow(ShadingRow, LOCTEXT("Ombrage", "Ombrage"));
|
||||
|
||||
if (ViewDistanceRow) { ViewDistanceRow->OnIndexChanged.AddDynamic(this, &USettingsGraphicsWidget::HandleViewDistanceChanged); }
|
||||
if (FoliageRow) { FoliageRow->OnIndexChanged.AddDynamic(this, &USettingsGraphicsWidget::HandleFoliageChanged); }
|
||||
if (ShadowRow) { ShadowRow->OnIndexChanged.AddDynamic(this, &USettingsGraphicsWidget::HandleShadowChanged); }
|
||||
if (TextureRow) { TextureRow->OnIndexChanged.AddDynamic(this, &USettingsGraphicsWidget::HandleTextureChanged); }
|
||||
if (VisualEffectRow) { VisualEffectRow->OnIndexChanged.AddDynamic(this, &USettingsGraphicsWidget::HandleVisualEffectChanged); }
|
||||
if (PostProcessRow) { PostProcessRow->OnIndexChanged.AddDynamic(this, &USettingsGraphicsWidget::HandlePostProcessChanged); }
|
||||
if (AntiAliasingRow) { AntiAliasingRow->OnIndexChanged.AddDynamic(this, &USettingsGraphicsWidget::HandleAntiAliasingChanged); }
|
||||
if (ReflectionRow) { ReflectionRow->OnIndexChanged.AddDynamic(this, &USettingsGraphicsWidget::HandleReflectionChanged); }
|
||||
if (GlobalIlluminationRow) { GlobalIlluminationRow->OnIndexChanged.AddDynamic(this, &USettingsGraphicsWidget::HandleGlobalIlluminationChanged); }
|
||||
if (ShadingRow) { ShadingRow->OnIndexChanged.AddDynamic(this, &USettingsGraphicsWidget::HandleShadingChanged); }
|
||||
|
||||
RefreshFromSettings();
|
||||
}
|
||||
|
||||
void USettingsGraphicsWidget::RefreshFromSettings()
|
||||
{
|
||||
USurvivalUserSettings* Settings = USurvivalUserSettings::Get();
|
||||
if (!Settings)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (OverallQualityRow)
|
||||
{
|
||||
// -1 quand les curseurs ne collent a aucun preset : c'est la que
|
||||
// "Personnalise" s'affiche.
|
||||
const int32 Overall = Settings->GetOverallScalabilityLevel();
|
||||
OverallQualityRow->SetIndexSilently(Overall >= 0 ? Overall : SettingsGraphicsTab::CustomQualityIndex);
|
||||
}
|
||||
|
||||
if (ViewDistanceRow) { ViewDistanceRow->SetIndexSilently(Settings->GetViewDistanceQuality()); }
|
||||
if (FoliageRow) { FoliageRow->SetIndexSilently(Settings->GetFoliageQuality()); }
|
||||
if (ShadowRow) { ShadowRow->SetIndexSilently(Settings->GetShadowQuality()); }
|
||||
if (TextureRow) { TextureRow->SetIndexSilently(Settings->GetTextureQuality()); }
|
||||
if (VisualEffectRow) { VisualEffectRow->SetIndexSilently(Settings->GetVisualEffectQuality()); }
|
||||
if (PostProcessRow) { PostProcessRow->SetIndexSilently(Settings->GetPostProcessingQuality()); }
|
||||
if (AntiAliasingRow) { AntiAliasingRow->SetIndexSilently(Settings->GetAntiAliasingQuality()); }
|
||||
if (ReflectionRow) { ReflectionRow->SetIndexSilently(Settings->GetReflectionQuality()); }
|
||||
if (GlobalIlluminationRow) { GlobalIlluminationRow->SetIndexSilently(Settings->GetGlobalIlluminationQuality()); }
|
||||
if (ShadingRow) { ShadingRow->SetIndexSilently(Settings->GetShadingQuality()); }
|
||||
}
|
||||
|
||||
void USettingsGraphicsWidget::ResetToDefaults()
|
||||
{
|
||||
USurvivalUserSettings* Settings = USurvivalUserSettings::Get();
|
||||
if (!Settings)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// "Eleve" plutot que le benchmark automatique : sur une machine modeste,
|
||||
// RunHardwareBenchmark peut descendre tres bas et le joueur ne comprendrait
|
||||
// pas pourquoi "Reinitialiser" a degrade son jeu.
|
||||
Settings->SetOverallScalabilityLevel(2);
|
||||
Settings->ApplyNonResolutionSettings();
|
||||
|
||||
RefreshFromSettings();
|
||||
}
|
||||
|
||||
void USettingsGraphicsWidget::ApplyAndRefreshOverall()
|
||||
{
|
||||
USurvivalUserSettings* Settings = USurvivalUserSettings::Get();
|
||||
if (!Settings || !OverallQualityRow)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Settings->ApplyNonResolutionSettings();
|
||||
|
||||
// Toucher un curseur individuel fait presque toujours basculer la qualite
|
||||
// globale sur "Personnalise" : la ligne du haut doit suivre immediatement,
|
||||
// sinon elle affiche un preset qui ne correspond plus a rien.
|
||||
const int32 Overall = Settings->GetOverallScalabilityLevel();
|
||||
OverallQualityRow->SetIndexSilently(Overall >= 0 ? Overall : SettingsGraphicsTab::CustomQualityIndex);
|
||||
}
|
||||
|
||||
void USettingsGraphicsWidget::HandleOverallQualityChanged(int32 NewIndex)
|
||||
{
|
||||
USurvivalUserSettings* Settings = USurvivalUserSettings::Get();
|
||||
if (!Settings)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Settings->SetOverallScalabilityLevel(FMath::Clamp(NewIndex, 0, SettingsGraphicsTab::MaxQualityLevel));
|
||||
Settings->ApplyNonResolutionSettings();
|
||||
|
||||
// Un preset repositionne les dix autres lignes d'un coup.
|
||||
RefreshFromSettings();
|
||||
}
|
||||
|
||||
void USettingsGraphicsWidget::HandleViewDistanceChanged(int32 NewIndex)
|
||||
{
|
||||
if (USurvivalUserSettings* Settings = USurvivalUserSettings::Get())
|
||||
{
|
||||
Settings->SetViewDistanceQuality(NewIndex);
|
||||
ApplyAndRefreshOverall();
|
||||
}
|
||||
}
|
||||
|
||||
void USettingsGraphicsWidget::HandleFoliageChanged(int32 NewIndex)
|
||||
{
|
||||
if (USurvivalUserSettings* Settings = USurvivalUserSettings::Get())
|
||||
{
|
||||
Settings->SetFoliageQuality(NewIndex);
|
||||
ApplyAndRefreshOverall();
|
||||
}
|
||||
}
|
||||
|
||||
void USettingsGraphicsWidget::HandleShadowChanged(int32 NewIndex)
|
||||
{
|
||||
if (USurvivalUserSettings* Settings = USurvivalUserSettings::Get())
|
||||
{
|
||||
Settings->SetShadowQuality(NewIndex);
|
||||
ApplyAndRefreshOverall();
|
||||
}
|
||||
}
|
||||
|
||||
void USettingsGraphicsWidget::HandleTextureChanged(int32 NewIndex)
|
||||
{
|
||||
if (USurvivalUserSettings* Settings = USurvivalUserSettings::Get())
|
||||
{
|
||||
Settings->SetTextureQuality(NewIndex);
|
||||
ApplyAndRefreshOverall();
|
||||
}
|
||||
}
|
||||
|
||||
void USettingsGraphicsWidget::HandleVisualEffectChanged(int32 NewIndex)
|
||||
{
|
||||
if (USurvivalUserSettings* Settings = USurvivalUserSettings::Get())
|
||||
{
|
||||
Settings->SetVisualEffectQuality(NewIndex);
|
||||
ApplyAndRefreshOverall();
|
||||
}
|
||||
}
|
||||
|
||||
void USettingsGraphicsWidget::HandlePostProcessChanged(int32 NewIndex)
|
||||
{
|
||||
if (USurvivalUserSettings* Settings = USurvivalUserSettings::Get())
|
||||
{
|
||||
Settings->SetPostProcessingQuality(NewIndex);
|
||||
ApplyAndRefreshOverall();
|
||||
}
|
||||
}
|
||||
|
||||
void USettingsGraphicsWidget::HandleAntiAliasingChanged(int32 NewIndex)
|
||||
{
|
||||
if (USurvivalUserSettings* Settings = USurvivalUserSettings::Get())
|
||||
{
|
||||
Settings->SetAntiAliasingQuality(NewIndex);
|
||||
ApplyAndRefreshOverall();
|
||||
}
|
||||
}
|
||||
|
||||
void USettingsGraphicsWidget::HandleReflectionChanged(int32 NewIndex)
|
||||
{
|
||||
if (USurvivalUserSettings* Settings = USurvivalUserSettings::Get())
|
||||
{
|
||||
Settings->SetReflectionQuality(NewIndex);
|
||||
ApplyAndRefreshOverall();
|
||||
}
|
||||
}
|
||||
|
||||
void USettingsGraphicsWidget::HandleGlobalIlluminationChanged(int32 NewIndex)
|
||||
{
|
||||
if (USurvivalUserSettings* Settings = USurvivalUserSettings::Get())
|
||||
{
|
||||
Settings->SetGlobalIlluminationQuality(NewIndex);
|
||||
ApplyAndRefreshOverall();
|
||||
}
|
||||
}
|
||||
|
||||
void USettingsGraphicsWidget::HandleShadingChanged(int32 NewIndex)
|
||||
{
|
||||
if (USurvivalUserSettings* Settings = USurvivalUserSettings::Get())
|
||||
{
|
||||
Settings->SetShadingQuality(NewIndex);
|
||||
ApplyAndRefreshOverall();
|
||||
}
|
||||
}
|
||||
|
||||
#undef LOCTEXT_NAMESPACE
|
||||
Reference in New Issue
Block a user