Payback 0.0.1
CK Graduation Project
로딩중...
검색중...
일치하는것 없음
CharacterBase.h
이 파일의 문서화 페이지로 가기
1// Fill out your copyright notice in the Description page of Project Settings.
2
3#pragma once
4
5#include "CoreMinimal.h"
6#include "GameFramework/Character.h"
7#include "AbilitySystemInterface.h"
8#include "CharacterBase.generated.h"
9
10class UAudioEmitterComponent;
11class UKnockbackComponent;
12class UAnimMontage;
14
15// ASC 준비(InitAbilityActorInfo) 완료 알림. 폰마다 준비 시점이 달라 폴링 대신 이 델리게이트로 통지한다.
16DECLARE_MULTICAST_DELEGATE_OneParam(FOnAbilitySystemReady, UAbilitySystemComponent*);
17
18
19UCLASS(Abstract)
20class CK_UE_API ACharacterBase : public ACharacter, public IAbilitySystemInterface
21{
22 GENERATED_BODY()
23
24public:
25 ACharacterBase(const FObjectInitializer& ObjectInitializer = FObjectInitializer::Get());
26
27public:
28 virtual void SetDead();
29 virtual bool IsDead() const;
30 virtual void PlayDeadAnimation();
31
32 // 슈퍼아머 또는 무적에 의한 경직 면역 여부 (히트스턴, 넉백 불가)
33 bool IsStaggerImmune() const;
34public:
35
36 virtual class UAbilitySystemComponent* GetAbilitySystemComponent() const override
37 {
38 return ASC;
39 }
40
41 FORCEINLINE FOnAbilitySystemReady& GetOnAbilitySystemReady()
42 {
43 return OnAbilitySystemReady;
44 }
45
46 FORCEINLINE UKnockbackComponent* GetKnockbackComponent() const
47 {
48 return KnockbackComponent;
49 }
50
51protected:
52 virtual void InitializeAttributes() PURE_VIRTUAL(ACK_CharacterBase::InitializeAttributes,);
53 virtual void OnMoveSpeedChanged(const struct FOnAttributeChangeData& Data);
54
55 // 피격 공통 처리 - 각 서브클래스가 자기 AttributeSet의 OnDamageDelegate에 바인딩한다.
56 virtual void OnDamageTaken(const FDamageResultData& DamageResult);
57
58 // 히트 리액션을 재생할 수 있는 상태인지(피격 대상 일치 + 생존 + 경직 면역 아님).
59 bool CanPlayHitReaction(const FDamageResultData& DamageResult) const;
60
61 // 히트 리액션 재생: 공격자가 있으면 그 방향으로 회전 후 히트 몽타주 재생.
62 void PlayHitReaction(AActor* Attacker);
63
64 // 재생할 히트 몽타주.
65 virtual UAnimMontage* GetHitReactMontage() const
66 {
67 return nullptr;
68 }
69
70 // 공격자 방향으로 즉시 회전. 회전 플래그는 건드리지 않는 1회성
71 virtual void RotateHitSource(const FVector& HitFromLocation);
72
73 // 히트 몽타주 종료 콜백.
74 virtual void OnHitReactMontageEnded(UAnimMontage* Montage, bool bInterrupted) { }
75
76protected:
77 FOnAbilitySystemReady OnAbilitySystemReady;
78
79 UPROPERTY(VisibleAnywhere, Category = GAS)
80 TObjectPtr<UAbilitySystemComponent> ASC;
81
82 UPROPERTY(VisibleAnywhere, Category = "Combat")
83 TObjectPtr<UKnockbackComponent> KnockbackComponent;
84
85 UPROPERTY(VisibleAnywhere, Category = "Audio")
86 TObjectPtr<UAudioEmitterComponent> AudioTagComponent;
87};
DECLARE_MULTICAST_DELEGATE_OneParam(FOnAbilitySystemReady, UAbilitySystemComponent *)
Definition CharacterBase.h:21
FORCEINLINE FOnAbilitySystemReady & GetOnAbilitySystemReady()
Definition CharacterBase.h:41
virtual void OnHitReactMontageEnded(UAnimMontage *Montage, bool bInterrupted)
Definition CharacterBase.h:74
virtual class UAbilitySystemComponent * GetAbilitySystemComponent() const override
Definition CharacterBase.h:36
FOnAbilitySystemReady OnAbilitySystemReady
Definition CharacterBase.h:77
FORCEINLINE UKnockbackComponent * GetKnockbackComponent() const
Definition CharacterBase.h:46
Definition BaseAttributeSet.h:15