Payback 0.0.1
CK Graduation Project
로딩중...
검색중...
일치하는것 없음
ULevelPlayerPlacer 클래스 참조

#include <LevelPlayerPlacer.h>

ULevelPlayerPlacer에 대한 상속 다이어그램 :
Inheritance graph
ULevelPlayerPlacer에 대한 협력 다이어그램:
Collaboration graph

Protected 멤버 함수

void PlacePlayerAtTransform (UWorld *InWorld, const FPrimaryAssetId &LevelAssetID, const FTransform &SpawnTransform)
 
APawn * EnsurePlayerPawn (UWorld *InWorld, const FPrimaryAssetId &LevelAssetID, const FTransform &SpawnTransform, bool &bOutSpawned)
 
bool CanPlacePlayerAtTransform (UWorld *InWorld, const FTransform &SpawnTransform) const
 
void SchedulePlacementRetry (UWorld *InWorld, const FPrimaryAssetId &LevelAssetID, const FTransform &SpawnTransform)
 

Protected 속성

float PlacementTraceStartOffsetZ = 0.0f
 
float PlacementTraceEndOffsetZ = 150.0f
 
float PlacementRetryInterval = 0.1f
 

상세한 설명

플레이어 배치 전략의 기반 클래스.

멤버 함수 문서화

◆ CanPlacePlayerAtTransform()

bool ULevelPlayerPlacer::CanPlacePlayerAtTransform ( UWorld *  InWorld,
const FTransform &  SpawnTransform 
) const
protected
49{
50 if (InWorld == nullptr)
51 {
52 return false;
53 }
54
55 const FVector SpawnLocation = SpawnTransform.GetLocation();
56 const FVector TraceStart = SpawnLocation + FVector::UpVector * PlacementTraceStartOffsetZ;
57 const FVector TraceEnd = SpawnLocation - FVector::UpVector * PlacementTraceEndOffsetZ;
58
59 FHitResult Hit;
60 FCollisionObjectQueryParams ObjectQueryParams;
61 ObjectQueryParams.AddObjectTypesToQuery(ECC_WorldStatic);
62 const FCollisionQueryParams QueryParams(SCENE_QUERY_STAT(PlayerPlacementTrace), false);
63
64 return InWorld->LineTraceSingleByObjectType(Hit, TraceStart, TraceEnd, ObjectQueryParams, QueryParams);
65}
float PlacementTraceEndOffsetZ
Definition LevelPlayerPlacer.h:38
float PlacementTraceStartOffsetZ
Definition LevelPlayerPlacer.h:35
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ EnsurePlayerPawn()

APawn * ULevelPlayerPlacer::EnsurePlayerPawn ( UWorld *  InWorld,
const FPrimaryAssetId &  LevelAssetID,
const FTransform &  SpawnTransform,
bool &  bOutSpawned 
)
protected
104{
105 bOutSpawned = false;
106
107 if (InWorld == nullptr)
108 {
109 LOG_ERROR(LogCK, "World가 유효하지 않습니다.");
110 return nullptr;
111 }
112
113 APlayerController* PC = InWorld->GetFirstPlayerController();
114
115 if (PC == nullptr)
116 {
117 LOG_ERROR(LogCK, "PlayerController를 찾을 수 없습니다.");
118 return nullptr;
119 }
120
121 APawn* ExistingPawn = PC->GetPawn();
122
123 if (ExistingPawn)
124 {
125 return ExistingPawn;
126 }
127
128 AGameModeBase* GameMode = InWorld->GetAuthGameMode();
129
130 if (GameMode == nullptr)
131 {
132 LOG_ERROR(LogCK, "GameMode를 가져올 수 없어 플레이어 Pawn을 스폰할 수 없습니다.");
133 return nullptr;
134 }
135
136 GameMode->RestartPlayerAtTransform(PC, SpawnTransform);
137 APawn* NewPawn = PC->GetPawn();
138
139 if (NewPawn == nullptr)
140 {
141 LOG_ERROR(LogCK, "플레이어 Pawn 스폰에 실패했습니다.");
142 return nullptr;
143 }
144
145 bOutSpawned = true;
146
147 UGameInstance* GameInstance = InWorld->GetGameInstance();
148
149 if (GameInstance == nullptr)
150 {
151 LOG_WARNING(LogCK, "GameInstance가 유효하지 않아 PlayerManagementSubsystem에 스폰을 알릴 수 없습니다.");
152 return NewPawn;
153 }
154
155 ULocalPlayer* LocalPlayer = GameInstance->GetFirstGamePlayer();
156
157 if (LocalPlayer == nullptr)
158 {
159 LOG_WARNING(LogCK, "LocalPlayer가 유효하지 않아 PlayerManagementSubsystem에 스폰을 알릴 수 없습니다.");
160 return NewPawn;
161 }
162
163 if (UPlayerManagementSubsystem* PlayerManagement = LocalPlayer->GetSubsystem<UPlayerManagementSubsystem>())
164 {
165 PlayerManagement->HandlePlayerSpawn(NewPawn, LevelAssetID, InWorld);
166 }
167 else
168 {
169 LOG_ERROR(LogCK, "PlayerManagementSubsystem을 가져올 수 없습니다.");
170 }
171
172 return NewPawn;
173}
#define LOG_ERROR(Category, Format,...)
Definition CK_UE.h:40
#define LOG_WARNING(Category, Format,...)
Definition CK_UE.h:39
Definition PlayerManagementSubsystem.h:42
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ PlacePlayerAtTransform()

void ULevelPlayerPlacer::PlacePlayerAtTransform ( UWorld *  InWorld,
const FPrimaryAssetId &  LevelAssetID,
const FTransform &  SpawnTransform 
)
protectedvirtual
18{
19 if (InWorld == nullptr)
20 {
21 LOG_ERROR(LogCK, "World가 유효하지 않습니다.");
22 return;
23 }
24
25 if (CanPlacePlayerAtTransform(InWorld, SpawnTransform) == false)
26 {
27 SchedulePlacementRetry(InWorld, LevelAssetID, SpawnTransform);
28 return;
29 }
30
31 bool bSpawned = false;
32 APawn* Pawn = EnsurePlayerPawn(InWorld, LevelAssetID, SpawnTransform, bSpawned);
33
34 if (Pawn == nullptr)
35 {
36 return;
37 }
38
39 if (bSpawned)
40 {
41 return;
42 }
43
44 Pawn->SetActorLocationAndRotation(SpawnTransform.GetLocation(), SpawnTransform.GetRotation().Rotator(), true, nullptr, ETeleportType::TeleportPhysics);
45}
APawn * EnsurePlayerPawn(UWorld *InWorld, const FPrimaryAssetId &LevelAssetID, const FTransform &SpawnTransform, bool &bOutSpawned)
Definition LevelPlayerPlacer.cpp:103
void SchedulePlacementRetry(UWorld *InWorld, const FPrimaryAssetId &LevelAssetID, const FTransform &SpawnTransform)
Definition LevelPlayerPlacer.cpp:68
bool CanPlacePlayerAtTransform(UWorld *InWorld, const FTransform &SpawnTransform) const
Definition LevelPlayerPlacer.cpp:48
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ SchedulePlacementRetry()

void ULevelPlayerPlacer::SchedulePlacementRetry ( UWorld *  InWorld,
const FPrimaryAssetId &  LevelAssetID,
const FTransform &  SpawnTransform 
)
protected
69{
70 if (InWorld == nullptr)
71 {
72 return;
73 }
74
75 TWeakObjectPtr<ULevelPlayerPlacer> WeakThis = this;
76 TWeakObjectPtr<UWorld> WeakWorld = InWorld;
77
78 auto RetryPlacement = [WeakThis, WeakWorld, LevelAssetID, SpawnTransform]()
79 {
80 ULevelPlayerPlacer* Placer = WeakThis.Get();
81 UWorld* World = WeakWorld.Get();
82
83 if (Placer == nullptr || World == nullptr)
84 {
85 return;
86 }
87
88 Placer->PlacePlayerAtTransform(World, LevelAssetID, SpawnTransform);
89 };
90
91 if (PlacementRetryInterval < KINDA_SMALL_NUMBER)
92 {
93 InWorld->GetTimerManager().SetTimerForNextTick(RetryPlacement);
94 return;
95 }
96
97 FTimerHandle RetryTimerHandle;
98 FTimerManager& TimeManager = InWorld->GetTimerManager();
99 TimeManager.SetTimer(RetryTimerHandle, RetryPlacement, PlacementRetryInterval, false);
100}
Definition LevelPlayerPlacer.h:17
void PlacePlayerAtTransform(UWorld *InWorld, const FPrimaryAssetId &LevelAssetID, const FTransform &SpawnTransform)
Definition LevelPlayerPlacer.cpp:17
float PlacementRetryInterval
Definition LevelPlayerPlacer.h:41
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

멤버 데이터 문서화

◆ PlacementRetryInterval

float ULevelPlayerPlacer::PlacementRetryInterval = 0.1f
protected

◆ PlacementTraceEndOffsetZ

float ULevelPlayerPlacer::PlacementTraceEndOffsetZ = 150.0f
protected

◆ PlacementTraceStartOffsetZ

float ULevelPlayerPlacer::PlacementTraceStartOffsetZ = 0.0f
protected

이 클래스에 대한 문서화 페이지는 다음의 파일들로부터 생성되었습니다.: