20 virtual void ActivateAbility(
const FGameplayAbilitySpecHandle Handle,
const FGameplayAbilityActorInfo* ActorInfo,
const FGameplayAbilityActivationInfo ActivationInfo,
const FGameplayEventData* TriggerEventData)
override;
21 virtual void InputReleased(
const FGameplayAbilitySpecHandle Handle,
const FGameplayAbilityActorInfo* ActorInfo,
const FGameplayAbilityActivationInfo ActivationInfo)
override;
22 virtual void EndAbility(
const FGameplayAbilitySpecHandle Handle,
const FGameplayAbilityActorInfo* ActorInfo,
const FGameplayAbilityActivationInfo ActivationInfo,
bool bReplicateEndAbility,
bool bWasCancelled)
override;
25 virtual void ApplyCombatData()
override;
26 virtual void ApplyCooldown(
const FGameplayAbilitySpecHandle Handle,
const FGameplayAbilityActorInfo* ActorInfo,
const FGameplayAbilityActivationInfo ActivationInfo)
const override;
28 void OnPhaseReached(int32 InPhase);
30 void ApplyChargePhaseEffects(int32 PhaseIndex);
32 void ExecuteInstantAttack();
36 void ClearChargeState();
38 void StartChargeLoopAudio();
40 void StopChargeLoopAudio();
42 void ToNextPhaseState(int32 InPhase);
44 void OnMaxPhaseTimeout();
47 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category =
"Charge")
48 TSubclassOf<UGameplayEffect> ChargeSlowEffectClass;
50 UPROPERTY(EditDefaultsOnly, Category = "Charge", meta = (ClampMin = "0.0"))
51 float MaxPhaseDuration = 5.0f;
53 FTimerHandle MaxPhaseTimeoutTimer;
55 FActiveGameplayEffectHandle ActiveSlowEffectHandle;
59 TObjectPtr<UDataTable> ChargePhaseTable;
62 TArray<TObjectPtr<UAnimMontage>> AttackMontages;
65 FGameplayTag ChargeLoopAudioTag;
70 int32 CurrentPhase = 0;
72 TArray<FTimerHandle> PhaseDelayTimers;
75 bool bChargeStateActive = false;
78 bool bShouldApplyCooldownOnEnd = false;