38 void StartTicking(UWorld* World);
39 void StopTicking(UWorld* World);
44 void ApplyBuff(APlayerController* TargetPC);
48 void RefreshForWeapon(
const APlayerController* TargetPC);
51 void RemoveBuff(APlayerController* TargetPC);
54 float GetBuffRemainingTime(
const APlayerController* TargetPC)
const;
58 float GetBuffDuration(
const APlayerController* TargetPC)
const;
64 FText BuildBuffDescription(
const APlayerController* TargetPC)
const;
84 return SituationData.Situation_ID;
89 return SituationData.ParsedTags;
94 int32 Result = 0, Value =
static_cast<int32
>(GetSituationTags());
95 while (Value) ++Result, Value &= (Value - 1);
101 return AppliedHandle.IsValid();
107 const FName Path = FName(GetSituationTagCount() > 1 ?
"Complex" : Utils::EnumToString(GetSituationTags()));
108 UTexture2D* IconTextureLocal = GetEnvironmentAssetByKey<UTexture2D>(Path);
109 return IconTextureLocal;
114 UFUNCTION(BlueprintImplementableEvent, Category =
"Situation")
117 void HandleIntervalElapsed();
121 FSimpleMulticastDelegate OnSituationTriggered;
124 FSimpleMulticastDelegate OnBuffExpired;
127 static UAbilitySystemComponent* ResolveASC(const APlayerController* TargetPC);
130 static FGameplayTag ResolveCurrentWeaponTag(const UAbilitySystemComponent* ASC);
134 static
bool ResolveModifierMagnitude(const FGameplayModifierInfo& Modifier, const
FConstellationWeaponMagnitude* ActiveEntry,
float& OutMagnitude,
float SituationRank = 1.0f);
138 void HandleEffectRemoved(const FGameplayEffectRemovalInfo& RemovalInfo);
141 void ClearAppliedEffect(UAbilitySystemComponent* ASC);
144 void ApplyBuffEffect(UAbilitySystemComponent* ASC,
float OverrideDuration);
147 void InjectWeaponMagnitudes(const UAbilitySystemComponent* ASC, const UClass* EffectClass, const FGameplayEffectSpecHandle& SpecHandle) const;
150 void FillMagnitudeTokens(const APlayerController* TargetPC, FString& InOutText) const;
153 UPROPERTY(Transient, BlueprintReadOnly, Category = "Situation")
156 UPROPERTY(Transient, BlueprintReadOnly, Category = "Situation")
159 UPROPERTY(Transient, BlueprintReadOnly, Category = "Situation")
164 FActiveGameplayEffectHandle AppliedHandle;
167 FTimerHandle IntervalTimerHandle;