Payback 0.0.1
CK Graduation Project
로딩중...
검색중...
일치하는것 없음
EnemyCharacterBase.h
이 파일의 문서화 페이지로 가기
1// Fill out your copyright notice in the Description page of Project Settings.
2
3#pragma once
4
5#include "CoreMinimal.h"
11#include "EnemyCharacterBase.generated.h"
12
14class UStateTreeAIComponent;
15class AAIController;
19class UTargetingMarkerComponent;
20class UEnemyMotionWarpingComponent;
23class UEnemyGroggyComponent;
24enum class EEnemyGroggyState : uint8;
25
26namespace TypeTween
27{
28 class ITweenControl;
29}
30
32
33
34UENUM(BlueprintType)
35enum class EEnemyReachType : uint8
36{
37 None = 0,
38 Range = 1,
39 Melee = 2,
40 Both = 3
41};
42
43
47UCLASS(Abstract)
49{
50 GENERATED_BODY()
51
52public:
53 AEnemyCharacterBase(const FObjectInitializer& ObjectInitializer = FObjectInitializer::Get());
54
55protected:
56 virtual void PostInitializeComponents() override;
57 virtual void BeginPlay() override;
58 virtual void PossessedBy(AController* NewController) override;
59 virtual void EndPlay(const EEndPlayReason::Type EndPlayReason) override;
60
61public:
62 // 풀 반환 공통 진입점
63 virtual void ForceReturnToPool(bool bIsSpawnedEnemy = false);
64
65 //~ ITargetableInterface
66 virtual void ShowLockOnMarker() override;
67 virtual void HideLockOnMarker() override;
68 virtual void ShowTargetingMarker(float MarkerAlpha) override;
69 virtual void HideTargetingMarker() override;
70 virtual bool IsTargetable() const override;
71
72 //~ IConstellationInterface
73 virtual UConstellationBase* CreateConstellation() override;
74
75public:
77 {
78 return AttributeSet;
79 }
80
81 // 처치 시 합류할 성좌 ID. 스탯 테이블에서 캐싱된다.
82 FORCEINLINE FName GetConstellationID() const
83 {
84 return ConstellationID;
85 }
86
87 FORCEINLINE UTargetingMarkerComponent* GetTargetingMarkerComponent() const
88 {
89 return TargetingMarker;
90 }
91
92 FORCEINLINE UTargetingMarkerComponent* GetLockOnMarkerComponent() const
93 {
94 return LockOnMarker;
95 }
96
97 FORCEINLINE UEnemyMotionWarpingComponent* GetMotionWarpingComponent() const
98 {
99 return MotionWarpingComponent;
100 }
101
103 {
104 return CharacterControlData.Get();
105 }
106
107protected:
108 //~ 초기화
109 virtual void InitializeAttributes() override;
110 virtual void GiveDefaultAbilities();
111 virtual void RebindHpBarWidget();
112 virtual void BindCharacterDelegates();
113 virtual void UnbindCharacterDelegates();
114
115 // StateTree 시작 전 초기화 함수
116 virtual void OnBeforeStateTreeStart() {}
117
118 //~ AI
119 // StateTree Logic 시작 / 중지 함수
120 void StartAILogic();
121 void StopAILogic(const FString& Reason);
122
123 //~ 풀링
124 // 풀링 인터페이스 기본 구현 - 공통 헬퍼만 호출
125 virtual void OnSpawnFromPool_Implementation() override;
126 virtual void OnReturnToPool_Implementation() override;
127
128 // EnemyBehaviorComponent 공통 런타임 리셋 함수.
129 void ActivateEnemyState();
130 void DeactivateEnemyState();
131 virtual void ResetEnemyBehaviorComponents();
132
133 //~ 전투 / 사망
134 // 데미지 텍스트 / 히트 이펙트
135 virtual void OnDamageTaken(const FDamageResultData& DamageResult) override;
136
137 UFUNCTION()
138 virtual void OnDeath();
139
140 virtual void PlayDeadAnimation() override;
141
142 //~ UI
143 virtual IAbilityBasedWidgetInterface* GetAbilityBasedWidgetInterface() PURE_VIRTUAL(ACK_CharacterEnemy::GetAbilityBasedWidgetInterface, return nullptr;)
144
145private:
146 void RequestReturnToPool(float DeadEventDelayTime = 2.0f);
147 void OnGroggyStateChanged(EEnemyGroggyState NewState);
148
149 // 데미지 타입에 해당하는 피격 메시 확대 연출을 재생한다. 진행 중인 연출이 있으면 정리하고 새로 시작
150 void PlayMeshPulse(const FGameplayTag& DamageTypeTag);
151
152 // 연출을 중단하고 메시를 원본 크기로 되돌린다.
153 void StopMeshPulse();
154
155 // 처치 시 플레이어에게 방송 경험치를 넘긴다.
156 void GrantExpToPlayer() const;
157
158public:
159 FOnSpawnEnemyDead OnSpawnEnemyDead;
160 FTimerHandle DeadTimerHandle;
161
162protected:
163 UPROPERTY()
164 TObjectPtr<UEnemyAttributeSet> AttributeSet;
165
166 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Data")
167 TObjectPtr<UCharacterControlData> CharacterControlData;
168
169 UPROPERTY(EditAnywhere, BlueprintReadOnly, Instanced, Category = "Flow")
170 TObjectPtr<UEnemySpawnDefinition> EnemySpawnDefinition;
171
172 UPROPERTY(EditAnywhere, BlueprintReadOnly, Instanced, Category = "Flow")
173 TObjectPtr<UEnemyDespawnDefinition> EnemyDespawnDefinition;
174
175 UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "UI")
176 TObjectPtr<UTargetingMarkerComponent> LockOnMarker;
177
178 UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "UI")
179 TObjectPtr<UTargetingMarkerComponent> TargetingMarker;
180
181 UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Component")
182 TObjectPtr<UEnemyMotionWarpingComponent> MotionWarpingComponent;
183
184 UPROPERTY(Transient)
185 TObjectPtr<AAIController> CachedAIController;
186
187 UPROPERTY(Transient)
188 TObjectPtr<UStateTreeAIComponent> CachedStateTreeComp;
189
190protected:
191 const FEnemyExtendedData* EnemyExtendedData = nullptr;
192
193 FTransform InitialMeshRelativeTransform;
194
195 FName ConstellationID; // 캐싱용 성좌 ID
196
197 float EnemyExp = 0.0f; // 캐싱용 처치 경험치
198
199private:
200 TWeakObjectPtr<UEnemyGroggyComponent> CachedGroggyComponent;
201
202 // 피격 메시 확대 Tween의 타입 소거 핸들. TypeTween은 소유자 수명을 추적하지 않으므로 직접 정리해야 한다.
203 TSharedPtr<TypeTween::ITweenControl> MeshPulseTween;
204
205 FDelegateHandle MoveSpeedDelegateHandle;
206 FDelegateHandle GroggyStateDelegateHandle;
207};
EEnemyReachType
Definition EnemyCharacterBase.h:36
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnSpawnEnemyDead, AEnemyCharacterBase *, OnEnemySpawned)
EEnemyGroggyState
Definition EnemyGroggyComponent.h:14
Definition CharacterBase.h:21
Definition EnemyCharacterBase.h:49
FORCEINLINE UEnemyAttributeSet * GetEnemyAttributeSet() const
Definition EnemyCharacterBase.h:76
FORCEINLINE FName GetConstellationID() const
Definition EnemyCharacterBase.h:82
virtual void OnBeforeStateTreeStart()
Definition EnemyCharacterBase.h:116
FORCEINLINE UTargetingMarkerComponent * GetLockOnMarkerComponent() const
Definition EnemyCharacterBase.h:92
FORCEINLINE UCharacterControlData * GetCharacterControlData() const
Definition EnemyCharacterBase.h:102
FORCEINLINE UEnemyMotionWarpingComponent * GetMotionWarpingComponent() const
Definition EnemyCharacterBase.h:97
FORCEINLINE UTargetingMarkerComponent * GetTargetingMarkerComponent() const
Definition EnemyCharacterBase.h:87
Definition AbilityBasedWidgetInterface.h:20
Definition ConstellationInterface.h:21
Definition ObjectPoolingInterface.h:18
Definition TargetableInterface.h:20
Definition CharacterControlData.h:182
Definition ConstellationBase.h:35
Definition EnemyAttributeSet.h:12
Definition EnemyDespawnDefinition.h:26
Definition EnemySpawnDefinition.h:22
Definition EnemyCharacterBase.h:27
Definition BaseAttributeSet.h:15
Definition CharacterControlData.h:142