From 5fac9c7f73513af044c65faa1e8dd3e2795cc808 Mon Sep 17 00:00:00 2001 From: baz Date: Tue, 15 Jul 2025 18:31:03 +0100 Subject: [PATCH] Switch Incrementing Level over to datatable --- Content/Player/BP_PlayerCharacter.uasset | 4 +- Content/Player/DT_PlayerLevels.uasset | 3 ++ Content/Player/DT_PlayerLevelsTest.uasset | 3 ++ Source/vampires/EXPComponent.cpp | 55 ++++++++++++++++++++--- Source/vampires/EXPComponent.h | 10 +++++ Source/vampires/TableRows/ExpTableRow.cpp | 4 ++ Source/vampires/TableRows/ExpTableRow.h | 27 +++++++++++ 7 files changed, 98 insertions(+), 8 deletions(-) create mode 100644 Content/Player/DT_PlayerLevels.uasset create mode 100644 Content/Player/DT_PlayerLevelsTest.uasset create mode 100644 Source/vampires/TableRows/ExpTableRow.cpp create mode 100644 Source/vampires/TableRows/ExpTableRow.h diff --git a/Content/Player/BP_PlayerCharacter.uasset b/Content/Player/BP_PlayerCharacter.uasset index a0dca8e..052cce6 100644 --- a/Content/Player/BP_PlayerCharacter.uasset +++ b/Content/Player/BP_PlayerCharacter.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6b39c5bc00aaf3367844a18035c0f953b1d689f81dba5e19f088314db6ec3e0f -size 58854 +oid sha256:b27dd170615e3d0a8a1839cdb16fed3e814073d3ce135af0ffd2e9108c3df366 +size 59062 diff --git a/Content/Player/DT_PlayerLevels.uasset b/Content/Player/DT_PlayerLevels.uasset new file mode 100644 index 0000000..185ec27 --- /dev/null +++ b/Content/Player/DT_PlayerLevels.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7b3e4c65aa73023391459a0624874b283b3a619409721683f09588254b958908 +size 11774 diff --git a/Content/Player/DT_PlayerLevelsTest.uasset b/Content/Player/DT_PlayerLevelsTest.uasset new file mode 100644 index 0000000..e0c9f7d --- /dev/null +++ b/Content/Player/DT_PlayerLevelsTest.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dc0d626f32b0908ea492bc7bce3103eb2a0f7c860285d6ea980800e8a0944aa1 +size 2936 diff --git a/Source/vampires/EXPComponent.cpp b/Source/vampires/EXPComponent.cpp index 72b38c5..db171f1 100644 --- a/Source/vampires/EXPComponent.cpp +++ b/Source/vampires/EXPComponent.cpp @@ -3,6 +3,8 @@ #include "EXPComponent.h" +#include "TableRows/ExpTableRow.h" + // Sets default values for this component's properties UEXPComponent::UEXPComponent() { @@ -19,14 +21,39 @@ void UEXPComponent::IncrementEXP(int value) int oldLevel = CurrentLevel; CurrentEXP += value; - OnEXPGained.Broadcast(CurrentEXP, GetCurrentLevelPercent()); - - CurrentLevel = FMath::Floor(CurrentEXP / 100.0f); - if (CurrentLevel != oldLevel) + if (NextLevelRow.Level >= 0) { - OnEXPLevelUp.Broadcast(CurrentLevel); + if (CurrentEXP >= NextLevelRow.CumulativeExpForNextLevel) + { + CurrentLevel = NextLevelRow.Level; + + if (FExpTableRow* newRow = LevelsTable->FindRow(FName(*FString::FromInt(NextLevelRow.Level + 1)),"", true)) + { + NextLevelRow = *newRow; + } + else + { + NextLevelRow.Level++; + NextLevelRow.CumulativeExpForPreviousLevel = NextLevelRow.CumulativeExpForNextLevel; + NextLevelRow.ExpRequiredForNextLevel += 16; + NextLevelRow.CumulativeExpForNextLevel += NextLevelRow.ExpRequiredForNextLevel; + } + + OnEXPLevelUp.Broadcast(CurrentLevel); + } } + else + { + CurrentLevel = FMath::Floor(CurrentEXP / 100.0f); + + if (CurrentLevel != oldLevel) + { + OnEXPLevelUp.Broadcast(CurrentLevel); + } + } + + OnEXPGained.Broadcast(CurrentEXP, GetCurrentLevelPercent()); } void UEXPComponent::SetCurrentEXP(int value) @@ -58,6 +85,14 @@ int UEXPComponent::GetCurrentLevel() void UEXPComponent::Reset() { + if (LevelsTable) + { + if (FExpTableRow* newRow = LevelsTable->FindRow(FName("1"), "", true)) + { + NextLevelRow = *newRow; + } + } + CurrentEXP = 0; CurrentLevel = 0; OnEXPGained.Broadcast(CurrentEXP, GetCurrentLevelPercent()); @@ -66,7 +101,15 @@ void UEXPComponent::Reset() float UEXPComponent::GetCurrentLevelPercent() { - return (CurrentEXP % 100) / 100.0f; + int adjustedCurrentExp = CurrentEXP - NextLevelRow.CumulativeExpForPreviousLevel; + float res = static_cast(adjustedCurrentExp) / static_cast(NextLevelRow.ExpRequiredForNextLevel); + + if (FMath::IsNaN(res)) + { + return 0.0f; + } + + return res; } // Called when the game starts diff --git a/Source/vampires/EXPComponent.h b/Source/vampires/EXPComponent.h index af692c5..af0ab55 100644 --- a/Source/vampires/EXPComponent.h +++ b/Source/vampires/EXPComponent.h @@ -4,6 +4,7 @@ #include "CoreMinimal.h" #include "Components/ActorComponent.h" +#include "TableRows/ExpTableRow.h" #include "EXPComponent.generated.h" DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FOnEXPGainedDelegate, int, exp, float, currentLevelPercent); @@ -21,11 +22,16 @@ public: UPROPERTY(BlueprintAssignable, Category="EXP") FOnEXPLevelUpDelegate OnEXPLevelUp; + UPROPERTY(EditDefaultsOnly, Category="EXP") + TObjectPtr LevelsTable; + protected: int CurrentEXP = 0; int CurrentLevel = 0; + FExpTableRow NextLevelRow; + public: // Sets default values for this component's properties UEXPComponent(); @@ -51,4 +57,8 @@ public: protected: // Called when the game starts virtual void BeginPlay() override; + +private: + + void ProcessExp(int oldEXP, int oldLevel, int newEXP); }; diff --git a/Source/vampires/TableRows/ExpTableRow.cpp b/Source/vampires/TableRows/ExpTableRow.cpp new file mode 100644 index 0000000..25f9536 --- /dev/null +++ b/Source/vampires/TableRows/ExpTableRow.cpp @@ -0,0 +1,4 @@ +// Louis Hobbs | 2024-2025 + + +#include "ExpTableRow.h" diff --git a/Source/vampires/TableRows/ExpTableRow.h b/Source/vampires/TableRows/ExpTableRow.h new file mode 100644 index 0000000..bf57827 --- /dev/null +++ b/Source/vampires/TableRows/ExpTableRow.h @@ -0,0 +1,27 @@ +// Louis Hobbs | 2024-2025 + +#pragma once + +#include "CoreMinimal.h" +#include "ExpTableRow.generated.h" + +/** + * + */ +USTRUCT(BlueprintType) +struct FExpTableRow : public FTableRowBase +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite) + int Level; + + UPROPERTY(EditAnywhere, BlueprintReadWrite) + int ExpRequiredForNextLevel; + + UPROPERTY(EditAnywhere, BlueprintReadWrite) + int CumulativeExpForNextLevel; + + UPROPERTY(EditAnywhere, BlueprintReadWrite) + int CumulativeExpForPreviousLevel; +};