第一次提交

This commit is contained in:
不明不惑
2026-03-03 01:23:02 +08:00
commit 3e434877e8
1053 changed files with 102411 additions and 0 deletions

View File

@@ -0,0 +1,30 @@
// Copyright 2025 https://yuewu.dev/en All Rights Reserved.
#pragma once
#include "CoreMinimal.h"
#include "GGA_GameplayAbility.h"
#include "GCS_CombatAbility.generated.h"
class IGCS_CombatEntityInterface;
class UGCS_CombatSystemComponent;
/**
* Base combat ability.
* 基础战斗能力。
*/
UCLASS(Abstract)
class GENERICCOMBATSYSTEM_API UGCS_CombatAbility : public UGGA_GameplayAbility
{
GENERATED_BODY()
protected:
UFUNCTION(BlueprintCallable, BlueprintPure, Category="GCS|Ability")
UGCS_CombatSystemComponent* GetCombatSystemFromActorInfo() const;
UFUNCTION(BlueprintCallable, BlueprintPure, Category="GCS|Ability")
UObject* GetCombatEntityFromActorInfo() const;
UFUNCTION(BlueprintCallable, BlueprintPure, Category="GCS|Ability")
TScriptInterface<IGCS_CombatEntityInterface> GetCombatEntityInterfaceFromActorInfo() const;
};

View File

@@ -0,0 +1,105 @@
// 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
};