Payback 0.0.1
CK Graduation Project
로딩중...
검색중...
일치하는것 없음
MainPlayerCharacter.h
이 파일의 문서화 페이지로 가기
1// Fill out your copyright notice in the Description page of Project Settings.
2
3#pragma once
4
7#include "GameplayTagContainer.h"
10#include "MainPlayerCharacter.generated.h"
11
12
14class UCharacterGhostEffectComponent;
16class APlayerController;
17class USkeletalMeshComponent;
18class UWeaponLoadoutComponent;
19class UWeaponManagementComponent;
20class UProjectileLauncherComponent;
21struct FInputActionValue;
22struct FGameplayAbilitySpec;
23struct FGameplayEffectSpec;
24struct FActiveGameplayEffectHandle;
25class UGameplayCameraComponent;
26class UPlayerMovementComponent;
27class UCameraZoomComponent;
28class UCameraTargetingComponent;
29class UPlayerMotionWarpingComponent;
30class UTargetingComponent;
31class UChargeStateComponent;
32class UInputMappingContext;
33class UInputAction;
34class UAnimMontage;
35
36
37UCLASS()
39{
40 GENERATED_BODY()
41
42public:
43 AMainPlayerCharacter(const FObjectInitializer& ObjectInitializer = FObjectInitializer::Get());
44
45public:
46 // IChargeInterface
47 virtual void OnChargeBegin() override;
48 virtual void OnChargeEnd() override;
49 virtual void OnChargePhaseChanged(float RotSpeedMul) override;
50 virtual void CacheAttackContext() override;
51 virtual UChargeStateComponent* GetChargeStateComponent() const override;
52
53 virtual bool HasTargetingTarget(ETargetingMode) override;
54
55 UCameraZoomComponent* GetCameraDistanceComponent() const;
56 UCameraTargetingComponent* GetPlayerTargetingComponent() const;
57
58public:
59 UFUNCTION(BlueprintCallable, Category = "Player|Respawn")
60 void RespawnAtTransform(const FTransform& RespawnTransform);
61
62public:
63 FORCEINLINE UTargetingComponent* GetTargetingComponent() const
64 {
65 return TargetingComponent;
66 }
67
68 FORCEINLINE UPlayerMotionWarpingComponent* GetMotionWarpingComponent() const
69 {
70 return MotionWarpingComponent;
71 }
72
74 FORCEINLINE FVector GetRawMovementInputDirection() const
75 {
76 return GFrameCounter - RawMovementInputFrame <= 1 ? RawMovementInputDirection : FVector::ZeroVector;
77 }
78
79 FORCEINLINE UInputMappingContext* GetDefaultMappingContext() const
80 {
81 return PlayerExtendedData ? PlayerExtendedData->DefaultMappingContext : nullptr;
82 }
83
84 FORCEINLINE UPlayerMovementComponent* GetPlayerMovementComponent() const
85 {
86 return PlayerMovementComponent;
87 }
88
89 FORCEINLINE UProjectileLauncherComponent* GetProjectileLauncherComponent() const
90 {
91 return ProjectileLauncherComponent;
92 }
93
94 FORCEINLINE UWeaponLoadoutComponent* GetWeaponLoadoutComponent() const
95 {
96 return WeaponLoadoutComponent;
97 }
98
99 FORCEINLINE FGameplayTag GetDefaultWeaponTag() const
100 {
101 return PlayerExtendedData->DefaultWeaponTag;
102 }
103
104 FORCEINLINE USkeletalMeshComponent* GetWeaponMeshComponent() const
105 {
106 return WeaponMesh;
107 }
108
109 FORCEINLINE APlayerController* GetPlayerController() const
110 {
111 return Controller ? Cast<APlayerController>(Controller) : nullptr;
112 }
113
114 FORCEINLINE UCharacterGhostEffectComponent* GetCharacterGhostWarpEffectComponent() const
115 {
116 return CharacterGhostEffectComponent;
117 }
118
119protected:
120 virtual void SetupPlayerInputComponent(UInputComponent* PlayerInputComponent) override;
121 virtual void PossessedBy(AController* NewController) override;
122 virtual void PostInitializeComponents() override;
123 virtual void BeginPlay() override;
124 virtual void EndPlay(const EEndPlayReason::Type EndPlayReason) override;
125
126 void InitializePlayerControllerDependencies(APlayerController* PlayerController);
127 void GASInputPressed(FGameplayTag InputTag);
128 void GASInputReleased(FGameplayTag InputTag);
129
130 FGameplayAbilitySpec* FindAbilitySpecByInputTag(const FGameplayTag& InputTag) const;
131
132 void RotateCamera(const FInputActionValue& Value);
133 void OnMouseWheel(const FInputActionValue& Value);
134 void ToggleLockOn();
135 void Move(const FInputActionValue& Value);
136 void OnMoveStarted(const FInputActionValue& Value);
137 bool CanMove() const;
138
139 // 락온 여부에 따른 린(Lean) 토글 관리
140 void OnTargetingChanged(bool bActive);
141 void ChangeAimState();
142
143 // 차지 시작 시 목표 방향(락온 타겟 또는 카메라 정면)으로 1회 회전 후 고정
144 void BeginChargeFacingTurn();
145 void UpdateChargeFacingTurn();
146
147 // --- 죽음 처리 ---
148 UFUNCTION()
149 virtual void OnDeath();
150 virtual void SetDead() override;
151
152 // --- 스탯 초기화 ---
153 virtual void InitializeAttributes() override;
154
155 // --- 피격 처리 ---
156 virtual void OnDamageTaken(const FDamageResultData& DamageResult) override;
157
158 // 현재 무기 + Attack Idle 상태에 따라 히트 몽타주 분류.
159 virtual UAnimMontage* GetHitReactMontage() const override;
160
161 // 피격 시 GE(Attack Idle 태그) 적용 함수
162 void ApplyDamageTakenEffect();
163
164 // 플레이어가 GE를 받게 되면 호출되는 바인딩 함수
165 void OnAnyGameplayEffectApplied(UAbilitySystemComponent* SourceASC, const FGameplayEffectSpec& Spec, FActiveGameplayEffectHandle);
166
167 // 히트 -> 강 경직(KnockDown)
168 bool RecordHitStun();
169 void TriggerKnockDown(UAbilitySystemComponent* SourceASC, const FGameplayEffectSpec& Spec);
170 void ResetHitStunTimes();
171
172 void OnHitStunTagChanged(const FGameplayTag CallbackTag, int32 NewCount);
173
174public:
175 // 캐싱용 멤버 변수
176 const FPlayerExtendedData* PlayerExtendedData = nullptr;
177
178protected:
179 UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "MotionWarping")
180 TObjectPtr<UPlayerMotionWarpingComponent> MotionWarpingComponent;
181
182 UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Targeting")
183 TObjectPtr<UTargetingComponent> TargetingComponent;
184
185 UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Movement")
186 TObjectPtr<UPlayerMovementComponent> PlayerMovementComponent;
187
188 UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Charge")
189 TObjectPtr<UChargeStateComponent> ChargeStateComponent;
190
191 UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Projectile")
192 TObjectPtr<UProjectileLauncherComponent> ProjectileLauncherComponent;
193
194 UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Weapon")
195 TObjectPtr<UWeaponLoadoutComponent> WeaponLoadoutComponent;
196
197 UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Weapon")
198 TObjectPtr<USkeletalMeshComponent> WeaponMesh;
199
200 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Camera")
201 TObjectPtr<UCharacterGhostEffectComponent> CharacterGhostEffectComponent;
202
203 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Data)
204 TObjectPtr<UCharacterControlData> CharacterControlData;
205
206 UPROPERTY(Transient)
207 bool bPlayerControllerDependenciesInitialized = false;
208
209private:
210 float LookSensitivity = 1.0f;
211
212 bool bIsCharging = false;
213 bool bIsLockedOn = false;
214
215 float ChargeFacingTargetYaw = 0.0f;
216 float ChargeFacingTurnTolerance = 1.0f;
217 FTimerHandle ChargeFacingTurnTimerHandle;
218
219 FVector RawMovementInputDirection = FVector::ZeroVector;
220 uint64 RawMovementInputFrame = 0;
221 TArray<double> RecentHitStunTimes;
222
223 FDelegateHandle HitStunTagDelegateHandle;
224 FDelegateHandle GEAppliedDelegateHandle;
225};
ETargetingMode
Definition TargetingComponent.h:18
Definition CharacterBase.h:21
Definition GameCameraManager.h:28
Definition MainPlayerCharacter.h:39
FORCEINLINE UPlayerMotionWarpingComponent * GetMotionWarpingComponent() const
Definition MainPlayerCharacter.h:68
FORCEINLINE USkeletalMeshComponent * GetWeaponMeshComponent() const
Definition MainPlayerCharacter.h:104
FORCEINLINE UTargetingComponent * GetTargetingComponent() const
Definition MainPlayerCharacter.h:63
FORCEINLINE UWeaponLoadoutComponent * GetWeaponLoadoutComponent() const
Definition MainPlayerCharacter.h:94
FORCEINLINE UCharacterGhostEffectComponent * GetCharacterGhostWarpEffectComponent() const
Definition MainPlayerCharacter.h:114
FORCEINLINE UPlayerMovementComponent * GetPlayerMovementComponent() const
Definition MainPlayerCharacter.h:84
FORCEINLINE FGameplayTag GetDefaultWeaponTag() const
Definition MainPlayerCharacter.h:99
FORCEINLINE UProjectileLauncherComponent * GetProjectileLauncherComponent() const
Definition MainPlayerCharacter.h:89
FORCEINLINE APlayerController * GetPlayerController() const
Definition MainPlayerCharacter.h:109
FORCEINLINE FVector GetRawMovementInputDirection() const
Definition MainPlayerCharacter.h:74
FORCEINLINE UInputMappingContext * GetDefaultMappingContext() const
Definition MainPlayerCharacter.h:79
Definition TargetableWeapon.h:20
Definition AttackableInterface.h:21
Definition ChargeInterface.h:21
Definition CharacterControlData.h:182
Definition BaseAttributeSet.h:15
Definition CharacterControlData.h:82