Payback 0.0.1
CK Graduation Project
로딩중...
검색중...
일치하는것 없음
SituationManagementSubsystem.h
이 파일의 문서화 페이지로 가기
1// Fill out your copyright notice in the Description page of Project Settings.
2
3#pragma once
4
5#include "CoreMinimal.h"
6#include "GameplayTagContainer.h"
7#include "Subsystems/WorldSubsystem.h"
9#include "SituationManagementSubsystem.generated.h"
10
12class APlayerController;
14class USituationBase;
15class UStageManifest;
17class UWeaponLoadoutComponent;
18enum class EPopupResult : uint8;
19
20// 상황을 실제로 장착했을 때. 장착 목록 UI 가 구독한다.
21DECLARE_MULTICAST_DELEGATE_OneParam(FOnSituationEquipped, USituationBase* /*Situation*/);
22
23// 상황의 버프가 실제로 걸리거나 풀릴 때. 활성 버프 HUD 가 구독한다.
24DECLARE_MULTICAST_DELEGATE_OneParam(FOnSituationBuffChanged, USituationBase* /*Situation*/);
25
26
34UCLASS(Blueprintable)
35class CK_UE_API USituationManagementSubsystem : public UWorldSubsystem
36{
37 GENERATED_BODY()
38
39public:
40 virtual void OnWorldBeginPlay(UWorld& InWorld) override;
41 virtual void Deinitialize() override;
42
43public:
44 // 카드 선택창에서 고른 결과를 넘긴다.
45 UFUNCTION(BlueprintCallable, Category = "Situation")
46 void EquipSituation(const FName& SituationID);
47
48 // 지금 장착 중인 상황 전체.
49 UFUNCTION(BlueprintCallable, Category = "Situation")
50 TArray<USituationBase*> GetEquippedSituations() const;
51
52 // 지금 버프가 걸려 있는 상황만. 활성 버프 HUD 의 초기 채우기에 쓴다.
53 UFUNCTION(BlueprintCallable, Category = "Situation")
54 TArray<USituationBase*> GetActiveSituations() const;
55
56 // 선택창이 활성화된 동안 시간을 멈춘다.
57 // 팝업이 연달아 뜰 때 새 팝업 활성화와 이전 팝업 비활성화가 겹치므로 참조 카운트로 센다.
58 // 마지막 하나가 비활성화될 때만 원래 속도로 되돌린다.
59 void PushTimeFreeze();
60 void PopTimeFreeze();
61
62public:
63 FOnSituationEquipped OnSituationEquipped;
64 FOnSituationBuffChanged OnSituationBuffApplied;
65 FOnSituationBuffChanged OnSituationBuffRemoved;
66
67protected:
68 // 플레이어 스폰 이후 최초 1회 레벨업 델리게이트를 바인딩한다.
69 void EnsurePlayerBinding();
70
71 void HandleLevelUp(int32 NewLevel);
72
73 // 대기 중인 레벨업이 있고 팝업이 닫혀 있으면 다음 선택창을 연다.
74 void TryOpenNextSelection();
75
76 // 뽑아둔 선택지를 담아 팝업 레이어에 띄운다.
77 void OpenSelectPopup();
78
79 UFUNCTION()
80 void HandleSelectPopupClosed(UPopupWidgetBase* Popup, EPopupResult Result);
81
82 // 상황이 발동했을 때. 카드의 버프를 적용하고 성좌 채팅을 요청한다.
83 void HandleSituationTriggered(USituationBase* Situation);
84
85 // 상황의 GE 가 스스로 만료됐을 때 UI 로 흘린다.
86 void HandleBuffExpired(USituationBase* Situation);
87
88 // 무기 교체 시 장착 상황 전체를 돌며 현재 무기에 맞는 버프를 다시 맞춘다.
89 void HandleWeaponChanged(const FGameplayTag& PreviousWeaponTag, const FGameplayTag& NewWeaponTag);
90
91 // 플레이어가 스폰된 뒤 최초 1회 무기 교체 델리게이트를 바인딩한다.
92 void EnsureWeaponBinding(APlayerController* PlayerController);
93
94 APlayerController* ResolvePlayerController();
95
96 // 표 행 하나로 상황 인스턴스를 만든다. 주기 발동과 델리게이트 바인딩은 장착 시점에 붙는다.
97 USituationBase* CreateSituation(UStageManifest* Manifest, const FDT_SituationTable& SituationRow);
98
99protected:
100 UPROPERTY(Transient)
101 TArray<TObjectPtr<USituationBase>> EquippedSituations;
102
103 // 팝업이 떠 있는 동안 유효한 선택지. 고르면 비운다.
104 // 카드 위젯이 버프 수치까지 직접 물어볼 수 있게 후보 단계부터 인스턴스로 든다.
105 UPROPERTY(Transient)
106 TArray<TObjectPtr<USituationBase>> PendingChoices;
107
108 // 한 프레임에 여러 레벨이 오를 수 있어 선택창을 순차로 처리한다.
109 int32 PendingSelectionCount = 0;
110
111 // 시간 정지를 요청 중인 선택창 수.
112 int32 TimeFreezeCount = 0;
113
114 TWeakObjectPtr<UCardSelectionWidget> ActivePopup;
115
116 TWeakObjectPtr<AMainPlayerState> BoundPlayerState;
117
118 TWeakObjectPtr<APlayerController> CachedPlayerController;
119
120 TWeakObjectPtr<UWeaponLoadoutComponent> BoundWeaponLoadout;
121
122 // PlayerState 가 아직 스폰되지 않았을 수 있어 바인딩될 때까지 재시도한다.
123 FTimerHandle PlayerBindRetryTimerHandle;
124};
EPopupResult
Definition EPopupResult.h:8
DECLARE_MULTICAST_DELEGATE_OneParam(FOnSituationEquipped, USituationBase *)
Definition MainPlayerState.h:23
Definition CardSelectionWidget.h:20
Definition PopupWidgetBase.h:25
Definition SituationBase.h:31
Definition SituationManagementSubsystem.h:36
FOnSituationBuffChanged OnSituationBuffApplied
Definition SituationManagementSubsystem.h:64
FOnSituationBuffChanged OnSituationBuffRemoved
Definition SituationManagementSubsystem.h:65
FOnSituationEquipped OnSituationEquipped
Definition SituationManagementSubsystem.h:63
Definition StageManifest.h:161
Definition DT_SituationTable.h:20