Improvements to watering and some stat forge fixes
This commit is contained in:
@@ -15,7 +15,7 @@ FActiveGameplayStatEffect FActiveGameplayStatEffect::CreateNew(UObject* SourceOb
|
||||
ActiveEffect.GameplayEffectClass = Effect->GetClass();
|
||||
ActiveEffect.StackCount = Stacks;
|
||||
ActiveEffect.GameplayEffectInstance = Effect;
|
||||
ActiveEffect.RemainingDuration = Effect->Duration;
|
||||
ActiveEffect.RemainingDuration = Effect->GetDuration();
|
||||
ActiveEffect.NextTickDuration = Effect->TickPeriod;
|
||||
ActiveEffect.bIsTicking = ActiveEffect.NextTickDuration > 0.f;
|
||||
ActiveEffect.Handle = FGuid::NewGuid();
|
||||
@@ -192,7 +192,7 @@ FGuid UStatForgeComponent::ApplyGameplayStatEffect(const TSubclassOf<UGameplaySt
|
||||
Effect->AppendDataValueMap(DataValueMap);
|
||||
FGuid GuidToReturn;
|
||||
|
||||
if (Effect->Duration == GameplayStatEffectDuration_Instant)
|
||||
if (Effect->DurationType == EDurationType::Instant)
|
||||
{
|
||||
Internal_ApplyGameplayStatEffect(Effect);
|
||||
}
|
||||
@@ -340,21 +340,24 @@ void UStatForgeComponent::TickEffects(float DeltaTime)
|
||||
for (int32 i = ActiveEffectsArray.Num() - 1; i >= 0; --i)
|
||||
{
|
||||
StatNames.Append(GetAffectedStatsFromEffect(ActiveEffectsArray[i].GameplayEffectInstance));
|
||||
|
||||
if (!CanTickEffect(ActiveEffectsArray[i].GameplayEffectInstance.Get()))
|
||||
{
|
||||
ActiveEffectsArray[i].RemainingDuration = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
ActiveEffectsArray[i].RemainingDuration -= DeltaTime;
|
||||
}
|
||||
|
||||
if (ActiveEffectsArray[i].RemainingDuration <= 0.f)
|
||||
if (ActiveEffectsArray[i].GameplayEffectInstance->DurationType == EDurationType::Duration)
|
||||
{
|
||||
RemoveGameplayStatEffect(ActiveEffectsArray[i].Handle);
|
||||
if (!CanTickEffect(ActiveEffectsArray[i].GameplayEffectInstance.Get()))
|
||||
{
|
||||
ActiveEffectsArray[i].RemainingDuration = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
ActiveEffectsArray[i].RemainingDuration -= DeltaTime;
|
||||
}
|
||||
|
||||
if (ActiveEffectsArray[i].RemainingDuration <= 0.f)
|
||||
{
|
||||
RemoveGameplayStatEffect(ActiveEffectsArray[i].Handle);
|
||||
|
||||
continue;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
if (ActiveEffectsArray[i].GameplayEffectInstance->TickPeriod > 0.f)
|
||||
|
||||
@@ -15,8 +15,18 @@ float UStatForgeFunctionLibrary::GetStatValue(const FName StatName, AActor* Acto
|
||||
return StatForgeComponent->GetStatValue(StatName);
|
||||
}
|
||||
|
||||
bool UStatForgeFunctionLibrary::HasTag(const FGameplayTag& Tag, AActor* Actor)
|
||||
{
|
||||
if (!Actor) return false;
|
||||
|
||||
const UStatForgeComponent* StatForgeComponent = Actor->GetComponentByClass<UStatForgeComponent>();
|
||||
if(!StatForgeComponent) return false;
|
||||
|
||||
return StatForgeComponent->GetGameplayTags().HasTagExact(Tag);
|
||||
}
|
||||
|
||||
FGuid UStatForgeFunctionLibrary::ApplyGameplayStatEffect(const TSubclassOf<UGameplayStatEffect> EffectClass,
|
||||
TMap<FName, float> DataValueMap, AActor* Actor, int32 Stacks)
|
||||
TMap<FName, float> DataValueMap, AActor* Actor, int32 Stacks)
|
||||
{
|
||||
if (!EffectClass || !Actor) return FGuid();
|
||||
|
||||
|
||||
@@ -9,6 +9,14 @@
|
||||
|
||||
class UGameplayStatEffect;
|
||||
|
||||
UENUM(BlueprintType)
|
||||
enum class EDurationType : uint8
|
||||
{
|
||||
Instant,
|
||||
Duration,
|
||||
Infinite
|
||||
};
|
||||
|
||||
UENUM(BlueprintType)
|
||||
enum class EModOperation : uint8
|
||||
{
|
||||
@@ -64,9 +72,12 @@ class STATFORGE_API UGameplayStatEffect : public UObject
|
||||
public:
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Duration")
|
||||
EDurationType DurationType;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Duration", meta=(EditCondition = "DurationType==EDurationType::Duration", EditConditionHides))
|
||||
float Duration = 0.f;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Duration")
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Duration", meta=(EditCondition = "DurationType==EDurationType::Duration", EditConditionHides))
|
||||
float TickPeriod = 0.f;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Modifiers")
|
||||
@@ -78,17 +89,30 @@ public:
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Tags")
|
||||
FGameplayTagContainer CharacterTags;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Tags|Requirements", meta = (EditCondition = "Duration==0"))
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Tags|Requirements", meta = (EditCondition = "DurationType!=EDurationType::Duration"))
|
||||
FGameplayTagContainer TagsRequiredToApply;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Tags|Requirements", meta = (EditCondition = "Duration!=0"))
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Tags|Requirements", meta = (EditCondition = "DurationType==EDurationType::Duration"))
|
||||
FGameplayTagContainer TagsRequiredToTick;
|
||||
|
||||
UFUNCTION(BlueprintCallable, Category = "Stat Forge|Effect")
|
||||
void AppendDataValueMap(TMap<FName, float> InDataValueMap) { DataValueMap.Append(InDataValueMap); }
|
||||
|
||||
const TMap<FName, float>& GetDataValueMap() { return DataValueMap; }
|
||||
|
||||
float GetDuration() const
|
||||
{
|
||||
switch (DurationType)
|
||||
{
|
||||
case EDurationType::Instant:
|
||||
return 0.f;
|
||||
case EDurationType::Duration:
|
||||
return Duration;
|
||||
case EDurationType::Infinite:
|
||||
return -1.f;
|
||||
}
|
||||
return 0.f;
|
||||
}
|
||||
|
||||
protected:
|
||||
|
||||
UPROPERTY()
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
#pragma once
|
||||
|
||||
#include "CoreMinimal.h"
|
||||
#include "GameplayTagContainer.h"
|
||||
#include "Kismet/BlueprintFunctionLibrary.h"
|
||||
#include "StatForgeFunctionLibrary.generated.h"
|
||||
|
||||
@@ -14,10 +15,13 @@ UCLASS()
|
||||
class STATFORGE_API UStatForgeFunctionLibrary : public UBlueprintFunctionLibrary
|
||||
{
|
||||
GENERATED_BODY()
|
||||
|
||||
public:
|
||||
UFUNCTION(BlueprintPure, Category = "Stat Forge")
|
||||
static float GetStatValue(UPARAM(meta = (GetOptions = "StatForgeDeveloperSettings.GetStatNames")) const FName StatName, AActor* Actor);
|
||||
|
||||
UFUNCTION(BlueprintPure, Category = "Stat Forge")
|
||||
static bool HasTag(UPARAM(ref) const FGameplayTag& Tag, AActor* Actor);
|
||||
|
||||
UFUNCTION(BlueprintCallable, Category = "Stat Forge", meta = (AutoCreateRefTerm = "DataValueMap"))
|
||||
static FGuid ApplyGameplayStatEffect(const TSubclassOf<UGameplayStatEffect> EffectClass, TMap<FName, float> DataValueMap, AActor* Actor, int32 Stacks = 1);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user