Payback 0.0.1
CK Graduation Project
로딩중...
검색중...
일치하는것 없음
GA_Skill_StrikeBase.h
이 파일의 문서화 페이지로 가기
1// Fill out your copyright notice in the Description page of Project Settings.
2
3#pragma once
4
6#include "GA_Skill_StrikeBase.generated.h"
7
8class ACharacter;
11class UAbilityTask_PlayMontageAndWait;
12class UAbilityTask_WaitDelay;
13class UAnimMontage;
14class UCurveFloat;
16
22UCLASS(Abstract)
23class CK_UE_API UGA_Skill_StrikeBase : public UGA_SkillBase
24{
25 GENERATED_BODY()
26
27public:
28 virtual void EndAbility(const FGameplayAbilitySpecHandle Handle, const FGameplayAbilityActorInfo* ActorInfo, const FGameplayAbilityActivationInfo ActivationInfo, bool bReplicateEndAbility, bool bWasCancelled) override;
29
30protected:
31 virtual void ApplyCombatData() override;
32
33 // 이 클래스(및 자식)가 실제로 사용하는 Strike 계열 확장 데이터를 조회하는 지점.
34 // 기본은 FSkillStrikeBaseData 자신이며, 자식은 이를 상속한 고유 구조체(FSkillStrikeData, FSkillStarFallData 등)로 오버라이드해 조회한다.
35 virtual const FSkillStrikeBaseData* FindStrikeData() const;
36
37protected:
38 // 자식 ActivateAbility에서 고유 준비/검증을 마친 뒤 호출하는 공통 시동부.
39 // 섹션/페이즈 길이 검증 → CommitAbility → Preparing 몽타주 → 섹션 체이닝 순서로 진행하며,
40 // 실패 시 내부에서 EndAbility까지 처리하고 false를 반환한다.
41 bool StartStrikePhaseChain(AMainPlayerCharacter* Player, const FGameplayAbilitySpecHandle Handle, const FGameplayAbilityActorInfo* ActorInfo, const FGameplayAbilityActivationInfo ActivationInfo);
42
43protected:
44 UFUNCTION()
45 virtual void OnPreparingCompleted();
46
47 UFUNCTION()
48 virtual void OnHoldingCompleted();
49
50 UFUNCTION()
51 virtual void OnStrikeMoveCompleted();
52
53 UFUNCTION()
54 virtual void OnStrikeMotionWarpDelayCompleted();
55
56 // Strike 몽타주 완료 콜백. 기본 구현은 OnAbilityMontageCompleted에 위임.
57 UFUNCTION()
58 virtual void OnStrikeMontageCompleted();
59
60protected:
61 // 이동 목적지 계산. 자식별 사전 재검증을 포함하며, 실패 시 베이스가 취소 종료한다.
62 virtual bool ComputeStrikeMoveTarget(AMainPlayerCharacter* Player, FVector& OutMoveTarget) PURE_VIRTUAL(UGA_Skill_StrikeBase::ComputeStrikeMoveTarget, return false;);
63
64 // Strike 섹션 중 모션워프 타겟 갱신. 실패 시 베이스가 취소 종료한다.
65 virtual bool UpdateStrikeWarpTarget() PURE_VIRTUAL(UGA_Skill_StrikeBase::UpdateStrikeWarpTarget, return false;);
66
67 // 이동 완료 직후 호출. false 반환 시 자식이 흐름 종료를 직접 처리한 것으로 보고 Strike 몽타주를 진행하지 않는다.
68 virtual bool OnStrikeArrived(AMainPlayerCharacter* Player);
69
70 // Strike 몽타주 태스크 생성 직후 알림.
71 virtual void OnStrikeMontageStarted();
72
73 // CommitAbility 직후 자식 고유 이벤트 리스너 등록 지점.
74 virtual void SetupStrikeEventListeners();
75
76 // EndAbility 공통 정리 후, 무브먼트 모드 복원 전에 호출되는 자식 정리 지점.
77 virtual void OnStrikeCleanup(ACharacter* Character, bool bWasCancelled);
78
79 // 활성화 시점에 몽타주에 존재해야 하는 섹션 목록.
80 virtual TArray<FName> GetRequiredMontageSections() const;
81
82protected:
83 float GetEffectiveHoldingDuration() const;
84 bool PlayHoldingSection(float DesiredHoldingDuration) const;
85 void SetCurrentWeaponHidden(bool bHidden) const;
86
87protected:
88 FORCEINLINE float GetStrikeMoveNormalizationFactor(const float Duration, const float Distance) const
89 {
90 //Normalizer는 0 ~ Distance 이동 범위를 0 ~ 1로 정규화시키는 값임.
91 const float Normalizer = Duration * TotalMoveCurveIntegral;
92 return Normalizer < KINDA_SMALL_NUMBER ? 0.0f : Distance / Normalizer;
93 }
94
96 {
97 SetAvatarMeshHidden(false);
98 SetCurrentWeaponHidden(false);
99 bCurrentWeaponHiddenBySkill = false;
100 }
101
102protected:
103 // 몽타주의 Preparing 섹션 이름
104 UPROPERTY(Transient)
106
107 // 이동 중 재생할 몽타주 섹션 이름
108 UPROPERTY(Transient)
110
111 // 몽타주의 Strike 섹션 이름
112 UPROPERTY(Transient)
114
115 // 워프 도중 다른 폰을 통과하도록 충돌 무시 처리할지 여부
116 UPROPERTY(Transient)
118
119 UPROPERTY(Transient)
120 TObjectPtr<UCurveFloat> StrikeMoveProgressCurve;
121
122 UPROPERTY(Transient)
123 float StrikeMoveDuration = 0.25f;
124
125 // Holding 섹션에서 이동 시작 전 대기할 시간
126 UPROPERTY(Transient)
127 float HoldingDuration = 0.1f;
128
129 // Strike 섹션 시작 후 MotionWarping Target을 갱신하기까지의 지연 시간
130 UPROPERTY(Transient)
132
133 // 자식이 ActivateAbility에서 결정해 대입하는 스킬 몽타주
134 UPROPERTY(Transient)
135 TObjectPtr<UAnimMontage> SkillActionMontage;
136
137protected:
138 UPROPERTY(Transient)
139 TObjectPtr<UAbilityTask_PlayMontageAndWait> ActivePreparingTask;
140
141 UPROPERTY(Transient)
142 TObjectPtr<UAbilityTask_WaitDelay> ActiveHoldingTask;
143
144 UPROPERTY(Transient)
145 TObjectPtr<UAT_MoveToLocationCurve> ActiveMoveTask;
146
147 UPROPERTY(Transient)
148 TObjectPtr<UAbilityTask_WaitDelay> ActiveStrikeMotionWarpDelayTask;
149
150protected:
151 FRotator CachedStrikeFacingRotation = FRotator::ZeroRotator;
152 bool bStrikeStarted = false;
153 bool bCurrentWeaponHiddenBySkill = false;
154 float TotalMoveCurveIntegral = 0.0f;
155};
Definition MainPlayerCharacter.h:39
Definition AT_MoveToLocationCurve.h:16
Definition GA_SkillBase.h:14
Definition GA_Skill_StrikeBase.h:24
virtual bool ComputeStrikeMoveTarget(AMainPlayerCharacter *Player, FVector &OutMoveTarget) PURE_VIRTUAL(UGA_Skill_StrikeBase
Definition GA_Skill_StrikeBase.h:62
FORCEINLINE void RestorePlayerAndWeaponForStrike()
Definition GA_Skill_StrikeBase.h:95
virtual bool UpdateStrikeWarpTarget() PURE_VIRTUAL(UGA_Skill_StrikeBase
Definition GA_Skill_StrikeBase.h:65
Definition ExtendedDatas.h:224
float StrikeMotionWarpDelay
Definition ExtendedDatas.h:256
FName PreparingSectionName
Definition ExtendedDatas.h:230
float StrikeMoveDuration
Definition ExtendedDatas.h:248
bool bIgnorePawnCollisionDuringWarp
Definition ExtendedDatas.h:242
TObjectPtr< UCurveFloat > StrikeMoveProgressCurve
Definition ExtendedDatas.h:245
float HoldingDuration
Definition ExtendedDatas.h:252
FName HoldingSectionName
Definition ExtendedDatas.h:234
FName StrikeSectionName
Definition ExtendedDatas.h:238