// Fill out your copyright notice in the Description page of Project Settings. #pragma once #include "CoreMinimal.h" #include "SettingsTabWidget.h" #include "SettingsGameplayWidget.generated.h" class USettingRowWidget; class USurvivalUserSettings; /** * L'onglet "Jeu & Controles". * * Il ne stocke rien : chaque ligne ecrit directement dans USurvivalUserSettings, * qui diffuse au pawn dans la foulee. C'est ce qui rend l'effet immediat sans * bouton "Appliquer". * * Classe Abstract : on cree un WBP_SettingsGameplay qui en herite, avec un * WBP_SettingRow par ligne, nomme exactement comme le BindWidget correspondant. */ UCLASS(Abstract) class EMBERWILD_API USettingsGameplayWidget : public USettingsTabWidget { GENERATED_BODY() public: virtual void NativeConstruct() override; virtual void RefreshFromSettings() override; virtual void ResetToDefaults() override; protected: UPROPERTY(meta = (BindWidget)) TObjectPtr SensitivityRow; UPROPERTY(meta = (BindWidget)) TObjectPtr SeparateVerticalRow; /** Masquee tant que la sensibilite verticale n'est pas separee. */ UPROPERTY(meta = (BindWidget)) TObjectPtr SensitivityVerticalRow; UPROPERTY(meta = (BindWidget)) TObjectPtr InvertLookRow; UPROPERTY(meta = (BindWidget)) TObjectPtr FieldOfViewRow; UPROPERTY(meta = (BindWidget)) TObjectPtr CameraShakeRow; UPROPERTY(meta = (BindWidget)) TObjectPtr SprintModeRow; UPROPERTY(meta = (BindWidget)) TObjectPtr CrouchModeRow; private: UFUNCTION() void HandleSensitivityChanged(int32 NewIndex); UFUNCTION() void HandleSeparateVerticalChanged(int32 NewIndex); UFUNCTION() void HandleSensitivityVerticalChanged(int32 NewIndex); UFUNCTION() void HandleInvertLookChanged(int32 NewIndex); UFUNCTION() void HandleFieldOfViewChanged(int32 NewIndex); UFUNCTION() void HandleCameraShakeChanged(int32 NewIndex); UFUNCTION() void HandleSprintModeChanged(int32 NewIndex); UFUNCTION() void HandleCrouchModeChanged(int32 NewIndex); /** Ecrit puis diffuse. Tous les handlers finissent ici. */ void PushToPawn(USurvivalUserSettings* Settings); /** Affiche ou masque la ligne de sensibilite verticale. */ void UpdateVerticalRowVisibility(bool bSeparate); };