2022-05-23 18:41:30 +00:00
|
|
|
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
|
|
|
|
|
|
#pragma once
|
|
|
|
|
2022-09-13 07:18:28 +00:00
|
|
|
#include "GameSettingFilterState.h"
|
2022-05-23 18:41:30 +00:00
|
|
|
#include "GameSettingValueScalar.h"
|
2022-09-13 07:18:28 +00:00
|
|
|
#include "Internationalization/Text.h"
|
|
|
|
#include "Math/Range.h"
|
|
|
|
#include "Misc/Optional.h"
|
|
|
|
#include "Templates/Function.h"
|
|
|
|
#include "Templates/SharedPointer.h"
|
|
|
|
#include "UObject/UObjectGlobals.h"
|
2022-05-23 18:41:30 +00:00
|
|
|
|
|
|
|
#include "GameSettingValueScalarDynamic.generated.h"
|
|
|
|
|
2022-09-13 07:18:28 +00:00
|
|
|
class FGameSettingDataSource;
|
|
|
|
class UObject;
|
2022-05-23 18:41:30 +00:00
|
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
// UGameSettingValueScalarDynamic
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
typedef TFunction<FText(double SourceValue, double NormalizedValue)> FSettingScalarFormatFunction;
|
|
|
|
|
|
|
|
UCLASS()
|
|
|
|
class GAMESETTINGS_API UGameSettingValueScalarDynamic : public UGameSettingValueScalar
|
|
|
|
{
|
|
|
|
GENERATED_BODY()
|
|
|
|
|
|
|
|
public:
|
|
|
|
static FSettingScalarFormatFunction Raw;
|
|
|
|
static FSettingScalarFormatFunction RawOneDecimal;
|
|
|
|
static FSettingScalarFormatFunction RawTwoDecimals;
|
|
|
|
static FSettingScalarFormatFunction ZeroToOnePercent;
|
|
|
|
static FSettingScalarFormatFunction ZeroToOnePercent_OneDecimal;
|
|
|
|
static FSettingScalarFormatFunction SourceAsPercent1;
|
|
|
|
static FSettingScalarFormatFunction SourceAsPercent100;
|
|
|
|
static FSettingScalarFormatFunction SourceAsInteger;
|
|
|
|
private:
|
|
|
|
static const FNumberFormattingOptions& GetOneDecimalFormattingOptions();
|
|
|
|
|
|
|
|
public:
|
|
|
|
UGameSettingValueScalarDynamic();
|
|
|
|
|
|
|
|
/** UGameSettingValue */
|
|
|
|
virtual void Startup() override;
|
|
|
|
virtual void StoreInitial() override;
|
|
|
|
virtual void ResetToDefault() override;
|
|
|
|
virtual void RestoreToInitial() override;
|
|
|
|
|
|
|
|
/** UGameSettingValueScalar */
|
|
|
|
virtual TOptional<double> GetDefaultValue() const override;
|
|
|
|
virtual void SetValue(double Value, EGameSettingChangeReason Reason = EGameSettingChangeReason::Change) override;
|
|
|
|
virtual double GetValue() const override;
|
|
|
|
virtual TRange<double> GetSourceRange() const override;
|
|
|
|
virtual double GetSourceStep() const override;
|
|
|
|
virtual FText GetFormattedText() const override;
|
|
|
|
|
|
|
|
/** UGameSettingValueDiscreteDynamic */
|
|
|
|
void SetDynamicGetter(const TSharedRef<FGameSettingDataSource>& InGetter);
|
|
|
|
void SetDynamicSetter(const TSharedRef<FGameSettingDataSource>& InSetter);
|
|
|
|
void SetDefaultValue(double InValue);
|
|
|
|
|
|
|
|
/** */
|
|
|
|
void SetDisplayFormat(FSettingScalarFormatFunction InDisplayFormat);
|
|
|
|
|
|
|
|
/** */
|
|
|
|
void SetSourceRangeAndStep(const TRange<double>& InRange, double InSourceStep);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* The SetSourceRangeAndStep defines the actual range the numbers could move in, but often
|
|
|
|
* the true minimum for the user is greater than the minimum source range, so for example, the range
|
|
|
|
* of some slider might be 0..100, but you want to restrict the slider so that while it shows
|
|
|
|
* a bar that travels from 0 to 100, the user can't set anything lower than some minimum, e.g. 1.
|
|
|
|
* That is the Minimum Limit.
|
|
|
|
*/
|
|
|
|
void SetMinimumLimit(const TOptional<double>& InMinimum);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* The SetSourceRangeAndStep defines the actual range the numbers could move in, but rarely
|
|
|
|
* the true maximum for the user is less than the maximum source range, so for example, the range
|
|
|
|
* of some slider might be 0..100, but you want to restrict the slider so that while it shows
|
|
|
|
* a bar that travels from 0 to 100, the user can't set anything lower than some maximum, e.g. 95.
|
|
|
|
* That is the Maximum Limit.
|
|
|
|
*/
|
|
|
|
void SetMaximumLimit(const TOptional<double>& InMaximum);
|
|
|
|
|
|
|
|
protected:
|
|
|
|
/** UGameSettingValue */
|
|
|
|
virtual void OnInitialized() override;
|
|
|
|
|
|
|
|
void OnDataSourcesReady();
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
|
|
|
TSharedPtr<FGameSettingDataSource> Getter;
|
|
|
|
TSharedPtr<FGameSettingDataSource> Setter;
|
|
|
|
|
|
|
|
TOptional<double> DefaultValue;
|
|
|
|
double InitialValue = 0;
|
|
|
|
|
|
|
|
TRange<double> SourceRange = TRange<double>(0, 1);
|
|
|
|
double SourceStep = 0.01;
|
|
|
|
TOptional<double> Minimum;
|
|
|
|
TOptional<double> Maximum;
|
|
|
|
|
|
|
|
FSettingScalarFormatFunction DisplayFormat;
|
|
|
|
};
|