106 lines
4.7 KiB
C++
106 lines
4.7 KiB
C++
// Copyright 2025 https://yuewu.dev/en All Rights Reserved.
|
|
|
|
#pragma once
|
|
|
|
#include "CoreMinimal.h"
|
|
#include "GCS_CombatAbility.h"
|
|
#include "Combo/GCS_ComboDefinition.h"
|
|
#include "GCS_ComboAbility.generated.h"
|
|
|
|
class UGCS_CombatSystemComponent;
|
|
class UAS_Combat;
|
|
|
|
/**
|
|
* This combo ability acted as manager of sub abilities.
|
|
*/
|
|
UCLASS(Abstract, HideCategories=(Cooldowns,Input,GampelayEffects))
|
|
class GENERICCOMBATSYSTEM_API UGCS_ComboAbility : public UGCS_CombatAbility
|
|
{
|
|
GENERATED_BODY()
|
|
|
|
public:
|
|
UGCS_ComboAbility();
|
|
|
|
virtual void PreActivate(const FGameplayAbilitySpecHandle Handle, const FGameplayAbilityActorInfo* ActorInfo, const FGameplayAbilityActivationInfo ActivationInfo,
|
|
FOnGameplayAbilityEnded::FDelegate* OnGameplayAbilityEndedDelegate, const FGameplayEventData* TriggerEventData = nullptr) override;
|
|
virtual void ActivateAbility(const FGameplayAbilitySpecHandle Handle, const FGameplayAbilityActorInfo* ActorInfo, const FGameplayAbilityActivationInfo ActivationInfo,
|
|
const FGameplayEventData* TriggerEventData) override;
|
|
virtual bool CanActivateAbility(const FGameplayAbilitySpecHandle Handle, const FGameplayAbilityActorInfo* ActorInfo, const FGameplayTagContainer* SourceTags = nullptr,
|
|
const FGameplayTagContainer* TargetTags = nullptr, FGameplayTagContainer* OptionalRelevantTags = nullptr) const override;
|
|
virtual void OnGiveAbility(const FGameplayAbilityActorInfo* ActorInfo, const FGameplayAbilitySpec& Spec) override;
|
|
virtual void OnRemoveAbility(const FGameplayAbilityActorInfo* ActorInfo, const FGameplayAbilitySpec& Spec) override;
|
|
|
|
virtual void EndAbility(const FGameplayAbilitySpecHandle Handle, const FGameplayAbilityActorInfo* ActorInfo, const FGameplayAbilityActivationInfo ActivationInfo, bool bReplicateEndAbility,
|
|
bool bWasCancelled) override;
|
|
|
|
protected:
|
|
UFUNCTION(BlueprintCallable, BlueprintNativeEvent, Category = "Combat Ability")
|
|
bool AllowAdvanceCombo() const;
|
|
|
|
UFUNCTION(BlueprintCallable, BlueprintNativeEvent, Category = "Combat Ability")
|
|
void StartCombo(const FGameplayEventData& ComboEvent);
|
|
virtual void StartCombo_Implementation(const FGameplayEventData& ComboEvent);
|
|
|
|
/**
|
|
* Advance combo with ComboEventData as context.
|
|
* @param ComboEventData The data used as combo context. 游戏事件数据作为连击上下文。
|
|
*/
|
|
UFUNCTION(BlueprintCallable, BlueprintNativeEvent, Category = "Combat Ability")
|
|
void AdvanceCombo(const FGameplayEventData& ComboEventData);
|
|
virtual void AdvanceCombo_Implementation(const FGameplayEventData& ComboEventData);
|
|
|
|
UFUNCTION(BlueprintCallable, BlueprintNativeEvent, Category = "Combat Ability")
|
|
void ResetCombo();
|
|
|
|
UFUNCTION()
|
|
virtual void HandleAbilityEnd(const FAbilityEndedData& AbilityEndedData);
|
|
|
|
virtual bool SelectComboDefinition(const FGameplayEventData& ComboEventData, int32 CurrentStep, FGCS_ComboDefinition& OutDefinition);
|
|
|
|
/**
|
|
* This is where you can use the extension filed within your combo definition to apply additional rules.
|
|
* 这里你可以使用连击定义中的自定义字段来添加额外的选择规则。
|
|
* @param ComboEvent The combo event data to provide as context.连击事件数据,用作上下文参考。
|
|
* @param CurrentStep The current combo step of combat system. 当前的连击步骤。
|
|
* @param ComboDefinition The combo definition you are checking. 正在检查的连击定义。
|
|
*/
|
|
UFUNCTION(BlueprintNativeEvent, Category = "Combat Ability")
|
|
bool CanSelectedComboDefinition(const FGameplayEventData& ComboEvent, int32 CurrentStep, const FGCS_ComboDefinition& ComboDefinition) const;
|
|
|
|
virtual void HandleComboExecution(const FGameplayEventData& ComboEventData);
|
|
|
|
// virtual void GiveSubAbilities(const FGameplayAbilitySpec& CurrentSpec);
|
|
// virtual void RemoveSubAbilities();
|
|
|
|
protected:
|
|
bool bCurrentAbilityEnded = false;
|
|
|
|
//The ability current combo step was executing.
|
|
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category="Combo")
|
|
FGameplayAbilitySpecHandle CurrentAbility;
|
|
|
|
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category="Combo")
|
|
TSubclassOf<UGameplayAbility> CurrentAbilityClass;
|
|
|
|
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category="Combo")
|
|
FGameplayAbilitySpecHandle NextAbility;
|
|
|
|
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category="Combo")
|
|
TSubclassOf<UGameplayAbility> NextAbilityAbilityClass;
|
|
|
|
int32 DesiredComboStep{INDEX_NONE};
|
|
|
|
/**
|
|
* Granted potential combo abilities.
|
|
* 赋予的潜在ComboAbilities.
|
|
*/
|
|
// UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category="Combo")
|
|
// TArray<FGameplayAbilitySpecHandle> AvailableAbilities;
|
|
|
|
FDelegateHandle AbilityEndedDelegateHandle;
|
|
|
|
#if WITH_EDITOR
|
|
virtual EDataValidationResult IsDataValid(class FDataValidationContext& Context) const override;
|
|
#endif
|
|
};
|