Payback 0.0.1
CK Graduation Project
로딩중...
검색중...
일치하는것 없음
EncounterField.h
이 파일의 문서화 페이지로 가기
1// Fill out your copyright notice in the Description page of Project Settings.
2
3#pragma once
4
5#include "CK_UE.h"
8#include "EncounterField.generated.h"
9
10class UStageEventSenderComponent;
11class UStageEventListenerComponent;
13class UEnemySpawnerComponent;
15struct FWaveSpawnData;
16
17
25UCLASS(Blueprintable, BlueprintType)
26class CK_UE_API AEncounterField : public AActor, public IStageEventListenerInterface
27{
28 GENERATED_BODY()
29
30public:
32
33public:
34 UFUNCTION(BlueprintCallable, Category = "EncounterField")
35 void StartEncounter();
36
37 UFUNCTION(BlueprintCallable, Category = "EncounterField")
38 void DeactivateEncounter();
39
40public:
41 UFUNCTION(BlueprintPure, Category = "EncounterField")
42 virtual UStageEventListenerComponent* GetEventListenerComponent() const override
43 {
44 return EventListenerComponent;
45 }
46
47 UFUNCTION(BlueprintPure, Category = "EncounterField")
48 virtual EStageEvent GetStageEvent() const override
49 {
51 }
52
53 UFUNCTION(BlueprintPure, Category = "EncounterField")
54 FORCEINLINE bool IsEncounterActive() const
55 {
56 return bActivated;
57 }
58
59protected:
60 virtual void EndPlay(const EEndPlayReason::Type EndPlayReason) override;
61
62private:
63 void SpawnNextWave();
64 void ScheduleNextWave(float Interval);
65 int32 CalculateExpectedEnemyCount(UEnemySpawnDirectorSystemComponent* EnemySys, const FWaveSpawnData& SpawnTables) const;
66 void TrySendClearEvent();
67 void ResetEncounterState();
68
69private:
70 UFUNCTION()
71 void OnEnemyKilled(const AEnemyCharacterBase* DiedEnemy);
72
73 UFUNCTION()
74 void OnEnemySpawned(AEnemyCharacterBase* SpawnedEnemy);
75
76protected:
77 UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "EncounterField")
78 TObjectPtr<UStageEventListenerComponent> EventListenerComponent;
79
80 // 모든 웨이브 몬스터가 처치되면 이 컴포넌트가 완료 이벤트를 전송한다.
81 UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "EncounterField")
82 TObjectPtr<UStageEventSenderComponent> ClearEventSender;
83
84 // 몬스터가 한 마리 처치될 때마다 이 컴포넌트가 이벤트를 전송한다.
85 UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "EncounterField")
86 TObjectPtr<UStageEventSenderComponent> EnemyKilledEventSender;
87
88 // StageManifest에서 참조할 섹션 ID.
89 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "EncounterField")
90 FName SectionID;
91
92private:
93 UPROPERTY(Transient)
94 TObjectPtr<UEnemySpawnDirectorSystemComponent> EnemySpawnSystem;
95
96 UPROPERTY(Transient)
97 FName CurrentWaveID;
98
99 // 섹션 시작부터 0-based 로 누적되는 웨이브 인덱스. 위젯/디버그에선 +1 해서 1-based 로 표시.
100 UPROPERTY(Transient)
101 int32 CurrentWaveIndex = 0;
102
103 UPROPERTY(Transient)
104 int32 AliveEnemyCount = 0;
105
106 UPROPERTY(Transient)
107 int32 PendingSpawnCount = 0;
108
109 UPROPERTY(Transient)
110 int32 CurrentWavePendingSpawnCount = 0;
111
112 UPROPERTY(Transient)
113 bool bAllWavesSpawned = false;
114
115 UPROPERTY(Transient)
116 bool bActivated = false;
117
118 UPROPERTY(Transient)
119 bool bClearEventSent = false;
120
121private:
122 FTimerHandle WaveTimerHandle;
123};
EStageEvent
Definition EStageEventEnums.h:5
Definition EncounterField.h:27
Definition EnemyCharacterBase.h:49
Definition StageEventListenerInterface.h:24
Definition EnemySpawnDirectorSystemComponent.h:75
Definition StageManifest.h:47