Payback 0.0.1
CK Graduation Project
로딩중...
검색중...
일치하는것 없음
PlayerManagementSubsystem.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 "CK_GameplayTags.h"
7#include "Engine/EngineTypes.h"
8#include "GameplayTagContainer.h"
13#include "Subsystems/LocalPlayerSubsystem.h"
14#include "PlayerManagementSubsystem.generated.h"
15
16
18class AActor;
19class ACharacter;
21class ACheckPoint;
22class APawn;
23class APlayerController;
25class ULevelRuleData;
29class UAbilitySystemComponent;
30
31
32DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FPlayerWeaponChangedDelegate, FGameplayTag, PreviousWeaponTag, FGameplayTag, NewWeaponTag);
33
34
40UCLASS()
41class CK_UE_API UPlayerManagementSubsystem : public ULocalPlayerSubsystem, public IStreamingEventListenerInterface
42{
43 GENERATED_BODY()
44
45public:
46 virtual void Initialize(FSubsystemCollectionBase& Collection) override;
47 virtual void Deinitialize() override;
48 virtual void ChangeTargetingActor(ITargetableInterface* TargetableActor);
49 virtual void PlayerControllerChanged(APlayerController* NewPlayerController) override;
50
51 virtual void OnLevelStreamingEnded() override;
52 virtual void OnLevelStreamingStarted() override;
53
54 virtual void OnLevelLoaded(ULevel* NewLevel, const ULevelStreamingData* LevelStreamingData) override { }
55 virtual void OnLevelUnloaded() override { }
56
57public:
58 ATargetableWeapon* FindSpawnedWeapon(const FGameplayTag& WeaponTag);
59 void RegisterSpawnedWeapon(ATargetableWeapon* SpawnedWeapon);
60 void UnregisterSpawnedWeapon(const FGameplayTag& WeaponTag, const ATargetableWeapon* SpawnedWeapon = nullptr);
61 bool EquipWeapon(const FGameplayTag& NewWeaponTag);
62 bool SwapWeapon(const FGameplayTag& NewWeaponTag);
63 bool HandlePlayerSpawn(AActor* PlayerActor, const FPrimaryAssetId& LevelAssetID, const UObject* LevelContextObject);
64
65public:
66 UFUNCTION(BlueprintCallable, Category = "Player|Streaming")
67 void FreezePlayer();
68
69 UFUNCTION(BlueprintCallable, Category = "Player|Streaming")
70 void UnfreezePlayer();
71
72 UFUNCTION(BlueprintCallable, Category = "Player|Respawn")
73 void CacheCheckPoint(ACheckPoint* CheckPoint);
74
75 void CacheLastStageEventID(const FName StageEventID);
76
77 UFUNCTION(BlueprintCallable, Category = "Player|Respawn")
78 bool RespawnPlayer();
79
80 UFUNCTION(BlueprintCallable, Category = "Player|Death")
81 bool HandlePlayerDeath(AActor* PlayerActor);
82
83 UFUNCTION(BlueprintCallable, Category = "Player|Spawn")
84 bool HandlePlayerSpawn(AActor* PlayerActor, const UObject* LevelContextObject = nullptr);
85
86 UFUNCTION(BlueprintCallable, Category = "Player|UI")
87 void ApplyUILayerInputBlockOptions(bool bBlockPlayerMovement, bool bBlockPlayerInput);
88
89public:
90 FORCEINLINE FGameplayTag GetPreviousWeaponTag() const
91 {
92 return PreviousWeaponTag;
93 }
94
95 FORCEINLINE FGameplayTag GetCurrentWeaponTag() const
96 {
97 return CurrentWeaponTag;
98 }
99
100 FORCEINLINE AMainPlayerCharacter* GetPlayer() const
101 {
102 return ResolveOwningPlayer();
103 }
104
105 FORCEINLINE FGameplayTag GetWeaponTagToSwitchTo() const
106 {
107 return CurrentWeaponTag == TAG_WEAPON_SWORD ? TAG_WEAPON_STAFF : TAG_WEAPON_SWORD;
108 }
109
110 FORCEINLINE AMainPlayerState* GetPlayerState() const
111 {
112 return Cast<AMainPlayerState>(GetPlayer()->GetPlayerState());
113 }
114
115private:
116 bool ApplyWeapon(const FGameplayTag& NewWeaponTag, bool bActivateSwapInSkill);
117 void UpdateEquippedWeapon(const FGameplayTag& NewWeaponTag);
118 void BindControllerDelegates(APlayerController* PlayerController);
119 void UnbindControllerDelegates(APlayerController* PlayerController);
120 ACharacter* ResolveOwningCharacter() const;
121 AMainPlayerCharacter* ResolveOwningPlayer() const;
122 UAbilitySystemComponent* ResolveOwningAbilitySystemComponent() const;
123 ULevelRuleData* ResolveCurrentLevelRule(const UObject* LevelContextObject = nullptr) const;
124 ULevelRuleData* ResolveCurrentLevelRule(const FPrimaryAssetId& LevelAssetID, const UObject* LevelContextObject) const;
125 void RefreshUILayerInputBlockTags();
126 void AddUILayerInputBlockTag(UAbilitySystemComponent* AbilitySystemComponent, FGameplayTag Tag, bool& bAppliedFlag);
127 void RemoveUILayerInputBlockTag(FGameplayTag Tag, bool& bAppliedFlag);
128
129private:
130 UFUNCTION()
131 void OnPlayerWeaponChanged(FGameplayTag PrevWeaponTag, FGameplayTag NewWeaponTag);
132
133 UFUNCTION()
134 void HandlePossessedPawnChanged(APawn* OldPawn, APawn* NewPawn);
135
136public:
137 FPlayerWeaponChangedDelegate WeaponChangedDelegate;
138
139private:
140 UPROPERTY(Transient)
141 TWeakObjectPtr<ULevelStreamingSubsystem> StreamingSubsystem;
142
143 UPROPERTY(Transient)
144 TWeakObjectPtr<APlayerController> BoundPC;
145
146 UPROPERTY(Transient)
147 bool bFrozen = false;
148
149 UPROPERTY(Transient)
150 FGameplayTag PreviousWeaponTag;
151
152 UPROPERTY(Transient)
153 FGameplayTag CurrentWeaponTag;
154
155 UPROPERTY(Transient)
156 TMap<FGameplayTag, TWeakObjectPtr<ATargetableWeapon>> SpawnedWeaponMap;
157
158 UPROPERTY(Transient)
159 TWeakObjectPtr<ACheckPoint> CachedCheckPoint;
160
161 UPROPERTY(Transient)
162 FTransform CachedCheckPointTransform;
163
164 UPROPERTY(Transient)
165 bool bHasCachedCheckPoint = false;
166
167 UPROPERTY(Transient)
168 FName LastStageEventIDBeforeDeath = NAME_None;
169
170 UPROPERTY(Transient)
171 TWeakObjectPtr<UPlayerDeathFlowDefinition> ActivePlayerDeathFlowDefinition;
172
173 UPROPERTY(Transient)
174 TWeakObjectPtr<UPlayerSpawnFlowDefinition> ActivePlayerSpawnFlowDefinition;
175
176 UPROPERTY(Transient)
177 float CachedSpawnFlowGravityScale = 1.0f;
178
179 UPROPERTY(Transient)
180 bool bHasCachedSpawnFlowGravityScale = false;
181
182 UPROPERTY(Transient)
183 TWeakObjectPtr<UAbilitySystemComponent> UILayerBlockASC;
184
185 UPROPERTY(Transient)
186 bool bShouldBlockUILayerMovement = false;
187
188 UPROPERTY(Transient)
189 bool bShouldBlockUILayerInput = false;
190
191 UPROPERTY(Transient)
192 bool bAppliedUILayerMovementBlock = false;
193
194 UPROPERTY(Transient)
195 bool bAppliedUILayerInputBlock = false;
196
197private:
198 FName CachedRollbackPointID = NAME_None;
199 TEnumAsByte<ECollisionEnabled::Type> SavedCapsuleCollision = ECollisionEnabled::QueryAndPhysics;
200};
DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FPlayerWeaponChangedDelegate, FGameplayTag, PreviousWeaponTag, FGameplayTag, NewWeaponTag)
Definition CheckPoint.h:24
Definition MainPlayerCharacter.h:39
Definition MainPlayerState.h:23
Definition TargetableWeapon.h:20
Definition StreamingEventListenerInterface.h:23
Definition TargetableInterface.h:20
Definition LevelPlayerPlacer.h:17
Definition LevelRuleData.h:18
Definition LevelStreamingData.h:19
Definition LevelStreamingSubsystem.h:38
Definition PlayerDeathFlowDefinition.h:17
Definition PlayerManagementSubsystem.h:42
FORCEINLINE FGameplayTag GetCurrentWeaponTag() const
Definition PlayerManagementSubsystem.h:95
FORCEINLINE FGameplayTag GetWeaponTagToSwitchTo() const
Definition PlayerManagementSubsystem.h:105
FORCEINLINE AMainPlayerState * GetPlayerState() const
Definition PlayerManagementSubsystem.h:110
virtual void OnLevelLoaded(ULevel *NewLevel, const ULevelStreamingData *LevelStreamingData) override
Definition PlayerManagementSubsystem.h:54
virtual void OnLevelUnloaded() override
Definition PlayerManagementSubsystem.h:55
FORCEINLINE AMainPlayerCharacter * GetPlayer() const
Definition PlayerManagementSubsystem.h:100
Definition PlayerSpawnFlowDefinition.h:16