File SFSettingDefinition.h
File List > Definitions > SFSettingDefinition.h
Go to the documentation of this file
// Copyright 2026 Anh Pham. All Rights Reserved.
#pragma once
#include "CoreMinimal.h"
#include "Engine/DataAsset.h"
#include "GameplayTagContainer.h"
#include "Core/SFSettingValue.h"
#include "SFSettingDefinition.generated.h"
UCLASS(Abstract, BlueprintType)
class SETTINGSFRAMEWORK_API USFSettingDefinition : public UDataAsset
{
GENERATED_BODY()
public:
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "SFSettingDefinition")
FGameplayTag SettingTag;
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "SFSettingDefinition|Display")
FText DisplayName;
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "SFSettingDefinition|Display", meta = (MultiLine = true))
FText Description;
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "SFSettingDefinition|Behavior")
TArray<TObjectPtr<class USFSettingCondition>> VisibilityConditions;
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "SFSettingDefinition|Behavior")
TArray<TObjectPtr<class USFSettingCondition>> EditabilityConditions;
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "SFSettingDefinition|Behavior")
bool bRevertToDefaultOnDisable = false;
public:
virtual TSubclassOf<USFSettingValue> GetValueClass() const { PURE_VIRTUAL(USFSettingDefinition::GetValueClass, return nullptr;); }
UFUNCTION(BlueprintPure, Category = "SFSettingDefinition|Value", meta = (WorldContext="WorldContextObject"))
virtual class USFSettingValue* GetDefaultValue(const UObject* WorldContextObject) const { return DefaultValue; };
protected:
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "SFSettingDefinition|Value")
TObjectPtr<class USFSettingValue> DefaultValue;
};
UCLASS(DisplayName = "SF Scalar Setting")
class SETTINGSFRAMEWORK_API USFSettingDefinition_Scalar : public USFSettingDefinition
{
GENERATED_BODY()
public:
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "SFSettingDefinition|Value|Scalar")
float MinValue = 0.0f;
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "SFSettingDefinition|Value|Scalar")
float MaxValue = 100.0f;
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "SFSettingDefinition|Value|Scalar")
float StepSize = 1.0f;
public:
virtual TSubclassOf<USFSettingValue> GetValueClass() const override
{
return USFSettingValue_Scalar::StaticClass();
}
};
UCLASS(DisplayName = "SF Bool Setting")
class SETTINGSFRAMEWORK_API USFSettingDefinition_Bool : public USFSettingDefinition
{
GENERATED_BODY()
public:
virtual TSubclassOf<USFSettingValue> GetValueClass() const override
{
return USFSettingValue_Bool::StaticClass();
}
};
UCLASS(DisplayName = "SF Discrete Setting")
class SETTINGSFRAMEWORK_API USFSettingDefinition_Discrete : public USFSettingDefinition
{
GENERATED_BODY()
public:
UPROPERTY(EditDefaultsOnly, Category = "SFSettingDefinition|Value|Discrete")
TSubclassOf<USFSettingValue> ValueWrapperClass;
UPROPERTY(EditDefaultsOnly, Category = "SFSettingDefinition|Value|Discrete")
bool bUseDynamicOptions = false;
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "SFSettingDefinition|Value|Discrete", meta = (EditCondition = "!bUseDynamicOptions"))
TArray<struct FSFSettingOption> StaticOptions;
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "SFSettingDefinition|Value|Discrete", meta = (EditCondition = "bUseDynamicOptions"))
TSubclassOf<class USFSettingOptionSource> OptionSource;
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "SFSettingDefinition|Value|Discrete", meta = (EditCondition = "bUseDynamicOptions"))
FGameplayTagContainer DeterminantSettingTags;
public:
virtual TSubclassOf<USFSettingValue> GetValueClass() const override;
virtual class USFSettingValue* GetDefaultValue(const UObject* WorldContextObject) const override;
UFUNCTION(BlueprintPure, Category = "SFSettingDefinition|Value", meta = (WorldContext="WorldContextObject"))
TArray<struct FSFSettingOption> GetSettingOptions(const UObject* WorldContextObject) const;
};
UCLASS(DisplayName = "SF Keybind Setting")
class SETTINGSFRAMEWORK_API USFSettingDefinition_Key : public USFSettingDefinition
{
GENERATED_BODY()
public:
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "SFSettingDefinition|Value|Keybind")
FName KBMPrimaryName;
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "SFSettingDefinition|Value|Keybind")
FName KBMSecondaryName;
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "SFSettingDefinition|Value|Keybind")
FName GamepadName;
UPROPERTY(EditDefaultsOnly, Category = "SFSettingDefinition|Behavior")
FGameplayTagContainer CollisionChannels;
public:
virtual TSubclassOf<USFSettingValue> GetValueClass() const override
{
return USFSettingValue_Key::StaticClass();
}
};