Payback 0.0.1
CK Graduation Project
로딩중...
검색중...
일치하는것 없음
TA_Trace.h
이 파일의 문서화 페이지로 가기
1// Fill out your copyright notice in the Description page of Project Settings.
2
3#pragma once
4
5#include "Abilities/GameplayAbilityTargetActor.h"
6#include "TA_Trace.generated.h"
7
8class ACharacter;
9class USkeletalMeshComponent;
11
12
13// 타겟별 적중 누적 상태 — 카운트, 마지막 적중 시간 추적용.
15{
16 int32 Count = 0;
17 float LastHitTime = -1.0f;
18};
19
20
21// Finisher 적중 핸들 — Normal과 분리해서 broadcast (TargetDataReadyDelegate와 동일한 multicast 패턴).
22DECLARE_MULTICAST_DELEGATE_OneParam(FFinisherTargetDataDelegate, const FGameplayAbilityTargetDataHandle&);
23
27UCLASS(abstract)
28class CK_UE_API ATA_Trace : public AGameplayAbilityTargetActor
29{
30 GENERATED_BODY()
31
32public:
33 ATA_Trace();
34
35 virtual void StartTargeting(UGameplayAbility* Ability) override;
36 virtual void ConfirmTargetingAndContinue() override;
37 virtual void StopTargeting();
38 virtual void Tick(float DeltaSeconds) override;
39
40 FORCEINLINE void SetCombatDataLevel(float InCombatDataLevel)
41 {
42 CombatDataLevel = InCombatDataLevel;
43 }
44
45 FORCEINLINE void SetTraceChannel(ECollisionChannel InChannel)
46 {
47 TraceChannel = InChannel;
48 }
49
50 FORCEINLINE void SetSingleTrace(bool bInSingleTrace)
51 {
52 bSingleTrace = bInSingleTrace;
53 }
54
55 FORCEINLINE void SetMaxHitCountPerTarget(int32 InCount)
56 {
57 MaxHitCountPerTarget = FMath::Max(1, InCount);
58 }
59
60 FORCEINLINE void SetMultiHitProfile(UDA_MultiHitProfile* InProfile)
61 {
62 MultiHitProfile = InProfile;
63 }
64
65 FORCEINLINE void SetOverrideTraceTransform(const FTransform& InTraceTransform)
66 {
67 OverrideTraceTransform = InTraceTransform;
68 bHasOverrideTraceTransform = true;
69 }
70
71protected:
72 virtual void PerformTrace(TArray<FHitResult>& OutHits) PURE_VIRTUAL(ATA_Trace::PerformTrace,);
73
75
76 FTransform ResolveTraceTransform() const;
77 bool IsDebugEnabled() const;
78
79
80
81public:
82 FFinisherTargetDataDelegate OnFinisherTargetDataDelegate;
83
84protected:
85 float CombatDataLevel = 1.0f;
86 ECollisionChannel TraceChannel;
87 bool bSingleTrace = false;
88
89 // 다단히트 — State 동안 같은 타겟에 적중 가능한 최대 횟수. 1이면 단발(기존 동작).
90 int32 MaxHitCountPerTarget = 1;
91
92 UPROPERTY(Transient)
93 TObjectPtr<UDA_MultiHitProfile> MultiHitProfile;
94
95 // 타겟별 적중 카운트/시간 추적. 기존 HitActors(TSet)를 대체.
96 TMap<TWeakObjectPtr<AActor>, FMultiHitTargetState> HitMap;
97
99 UPROPERTY(Transient)
100 TObjectPtr<ACharacter> Character;
101
103 UPROPERTY(Transient)
104 TObjectPtr<USkeletalMeshComponent> CharacterMesh;
105
106 UPROPERTY(Transient)
107 FTransform OverrideTraceTransform = FTransform::Identity;
108
109 UPROPERTY(Transient)
110 uint8 bHasOverrideTraceTransform : 1 = false;
111};
DECLARE_MULTICAST_DELEGATE_OneParam(FFinisherTargetDataDelegate, const FGameplayAbilityTargetDataHandle &)
Definition TA_Trace.h:29
FORCEINLINE void SetMaxHitCountPerTarget(int32 InCount)
Definition TA_Trace.h:55
FFinisherTargetDataDelegate OnFinisherTargetDataDelegate
Definition TA_Trace.h:82
FORCEINLINE void SetTraceChannel(ECollisionChannel InChannel)
Definition TA_Trace.h:45
FORCEINLINE void SetSingleTrace(bool bInSingleTrace)
Definition TA_Trace.h:50
FORCEINLINE void SetOverrideTraceTransform(const FTransform &InTraceTransform)
Definition TA_Trace.h:65
virtual void PerformTrace(TArray< FHitResult > &OutHits) PURE_VIRTUAL(ATA_Trace bool ProcessTraceResults()
Definition TA_Trace.h:74
ECollisionChannel TraceChannel
Definition TA_Trace.h:86
FORCEINLINE void SetCombatDataLevel(float InCombatDataLevel)
Definition TA_Trace.h:40
FORCEINLINE void SetMultiHitProfile(UDA_MultiHitProfile *InProfile)
Definition TA_Trace.h:60
Definition MultiHitProfile.h:23
Definition TA_Trace.h:15
int32 Count
Definition TA_Trace.h:16
float LastHitTime
Definition TA_Trace.h:17