#pragma once #include "SkillTreeState.h" #include "PlayerSetupState.generated.h" // Properties belonging to a character class USTRUCT() struct FCharacterClassProperty { GENERATED_BODY() public: UPROPERTY(BlueprintReadOnly, EditAnywhere) FString name; UPROPERTY(BlueprintReadOnly, EditAnywhere) class UAbilityInfo* basicAttack; UPROPERTY(BlueprintReadOnly, EditAnywhere) TArray> classItems; // Class Specific Curves, if these are not set the character defaults are used UPROPERTY(BlueprintReadOnly, EditAnywhere) UCurveFloat* healthCurve; UPROPERTY(BlueprintReadOnly, EditAnywhere) UCurveFloat* manaCurve; UPROPERTY(BlueprintReadOnly, EditAnywhere) UCurveFloat* armorCurve; UPROPERTY(BlueprintReadOnly, EditAnywhere) UCurveFloat* attackSpeedCurve; }; // A data asset that provides a list of character classes UCLASS() class UCharacterClassPropertySet : public UDataAsset { GENERATED_BODY() public: UPROPERTY(BlueprintReadOnly, EditAnywhere) TArray classes; UFUNCTION(BlueprintCallable, Category = "Character Class") FCharacterClassProperty GetCharacterClass(int32 classID) const; }; // Setings for character bone scales USTRUCT(BlueprintType) struct FCharacterCustomization { GENERATED_BODY() public: UPROPERTY(BlueprintReadWrite, Category = "Save") float overallScale = 1.0f; UPROPERTY(BlueprintReadWrite, Category = "Save") float headScale = 1.0f; UPROPERTY(BlueprintReadWrite, Category = "Save") float torsoScale = 1.0f; UPROPERTY(BlueprintReadWrite, Category = "Save") float leftArmScale = 1.0f; UPROPERTY(BlueprintReadWrite, Category = "Save") float rightArmScale = 1.0f; UPROPERTY(BlueprintReadWrite, Category = "Save") float legThicknessYScale = 1.0f; UPROPERTY(BlueprintReadWrite, Category = "Save") float legThicknessZScale = 1.0f; }; // All player settings, from the lobby // this includes selected skill set and character customizations USTRUCT() struct FPlayerSetupState { GENERATED_BODY() public: UPROPERTY() FSkillTreeState skills; UPROPERTY() FCharacterCustomization customizations; UPROPERTY() int32 characterClass; };