Files
Aura-TopDownRPG-GAS/Source/Aura/Public/Character/AuraCharacterBase.h

94 lines
2.5 KiB
C++

// Copyright Echo Devgroup
#pragma once
#include "CoreMinimal.h"
#include "AbilitySystemComponent.h"
#include "AbilitySystemInterface.h"
#include "GameFramework/Character.h"
#include "Interact/CombatInterface.h"
#include "AuraCharacterBase.generated.h"
class UAbilitySystemComponent;
class UAttributeSet;
class UGameplayEffect;
class UGameplayAbility;
class UAnimMontage;
UCLASS(Abstract)
class AURA_API AAuraCharacterBase : public ACharacter, public IAbilitySystemInterface, public ICombatInterface
{
GENERATED_BODY()
public:
AAuraCharacterBase();
virtual UAbilitySystemComponent* GetAbilitySystemComponent() const override;
UAttributeSet* GetAttributeSet() const { return AttributeSet; }
virtual UAnimMontage* GetHitReactMontage_Implementation() override;
virtual void Die() override;
UFUNCTION(NetMulticast, reliable)
virtual void MulticastHandleDeath();
protected:
virtual void BeginPlay() override;
//Weapon
UPROPERTY(EditAnywhere, Category = Combat)
TObjectPtr<USkeletalMeshComponent> Weapon;
UPROPERTY(EditAnywhere, Category = Combat)
FName WeaponTipSocketName;
virtual FVector GetCombatSocketLocation() override;
UPROPERTY()
TObjectPtr<UAbilitySystemComponent> AbilitySystemComponent;
UPROPERTY()
TObjectPtr<UAttributeSet> AttributeSet;
virtual void InitAbilityActorInfo();
UPROPERTY(BlueprintReadOnly, EditAnywhere, Category="Attributes")
TSubclassOf<UGameplayEffect> DefaultPrimaryAttributes;
UPROPERTY(BlueprintReadOnly, EditAnywhere, Category="Attributes")
TSubclassOf<UGameplayEffect> DefaultSecondaryAttributes;
UPROPERTY(BlueprintReadOnly, EditAnywhere, Category="Attributes")
TSubclassOf<UGameplayEffect> DefaultVitalAttributes;
void ApplyEffectToSelf(TSubclassOf<UGameplayEffect> GameplayEffectClass, float Level) const;
virtual void InitializeDefaultAttributes() const;
void AddCharacterAbilities();
/* Dissolve Effects */
void Dissolve();
UFUNCTION(BlueprintImplementableEvent)
void StartDissolveTimeline(UMaterialInstanceDynamic* DynamicMaterialInstance);
UFUNCTION(BlueprintImplementableEvent)
void StartWeaponDissolveTimeline(UMaterialInstanceDynamic* DynamicMaterialInstance);
UPROPERTY(EditAnywhere, BlueprintReadOnly)
TObjectPtr<UMaterialInstance> WeaponDissolveMaterialInstance;
UPROPERTY(EditAnywhere, BlueprintReadOnly)
TObjectPtr<UMaterialInstance> DissolveMaterialInstance;
private:
UPROPERTY(EditAnywhere, Category="Abilities")
TArray<TSubclassOf<UGameplayAbility>> StartupAbilities;
UPROPERTY(EditAnywhere, Category = "Combat")
TObjectPtr<UAnimMontage> HitReactMontage;
};