Oakfolks Gold_1.14
Oakfolks coop game
Loading...
Searching...
No Matches
QTE_Subsystem.h
1#pragma once
2
3#include "CoreMinimal.h"
4#include "Subsystems/GameInstanceSubsystem.h"
5#include "QTETypes.h"
6#include "BCR/Headers/System/QTE/QTEConfigurationTypes.h"
7#include "GameFramework/PlayerController.h"
8#include "QTE_Subsystem.generated.h"
9
12class AMiniGameSystem;
13class AMainPlayer;
14
17DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnSnapPointQTEResult, EQTEResult, Result);
18DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnQTEComplete, bool, bSuccess);
19DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnQTEProgress, const FQTEActionProgress&, Progress);
20
24UCLASS()
25class BCR_API UQTE_Subsystem : public UGameInstanceSubsystem, public FTickableGameObject
26{
27 GENERATED_BODY()
28
29public:
30
33 virtual void Initialize(FSubsystemCollectionBase& Collection) override;
34 virtual void Deinitialize() override;
35
37 virtual void Tick(float DeltaTime) override;
38 virtual bool IsTickable() const override;
39 virtual TStatId GetStatId() const override;
40
42 UFUNCTION(BlueprintCallable, Category = "QTE")
43 void StartQTEFromAsset(const UQTEConfigurationAsset* Config);
44 UFUNCTION(BlueprintCallable, Category = "QTE")
45 void StartQTE(const FQTEConfiguration Config);
46 UFUNCTION(BlueprintCallable, Category = "QTE")
47 void StopQTE();
48 UFUNCTION(BlueprintCallable, Category = "QTE")
49 void SetQTEPaused(bool bPaused);
50
52 UFUNCTION(BlueprintCallable, Category = "QTE")
53 void OnPlayerEnterSnapPoint(AMainPlayer* Player, ESnapPointType SnapPoint);
54 UFUNCTION(BlueprintCallable, Category = "QTE")
55 void OnPlayerLeaveSnapPoint(AMainPlayer* Player, ESnapPointType SnapPoint);
56
58 UPROPERTY(BlueprintAssignable, Category = "QTE")
59 FOnSnapPointQTEResult OnSnapPointFirstResult;
60 UPROPERTY(BlueprintAssignable, Category = "QTE")
61 FOnSnapPointQTEResult OnSnapPointSecondResult;
62 UPROPERTY(BlueprintAssignable, Category = "QTE")
63 FOnQTEComplete OnQTEComplete;
64 UPROPERTY(BlueprintAssignable, Category = "QTE")
65 FOnQTEProgress OnSnapPointFirstProgress;
66 UPROPERTY(BlueprintAssignable, Category = "QTE")
67 FOnQTEProgress OnSnapPointSecondProgress;
68
71 EQTEState GetCurrentState() const { return CurrentState; }
72
73private:
74
76 EQTEState CurrentState;
77 bool bIsPaused;
78 FQTEConfiguration CurrentConfig;
79
82 TMap<ESnapPointType, TWeakObjectPtr<AMainPlayer>> ActivePlayers;
83 TMap<ESnapPointType, FQTEProgressData> ActionProgress;
84
86 FTimerHandle GlobalTimerHandle;
87
90 void ProcessInputs(float DeltaTime);
91 void ProcessPlayerInput(AMainPlayer* Player, ESnapPointType SnapPoint, const FSnapPointConfig& Config, float DeltaTime);
92 bool ValidatePlayerAction(AMainPlayer* Player, const FSnapPointConfig& Config);
93
95 bool ValidateHoldAction(const AMainPlayer* Player, const FSnapPointConfig& Config);
96 bool ValidateRotateAction(const AMainPlayer* Player, const FSnapPointConfig& Config);
97 bool ValidatePressAction(const AMainPlayer* Player, const FSnapPointConfig& Config);
98 bool ValidateReleaseAction(const AMainPlayer* Player, const FSnapPointConfig& Config);
99
101 void UpdateActionProgress(const AMainPlayer* Player, ESnapPointType SnapPoint, const FSnapPointConfig& Config);
102
105 void CompleteQTE(bool bSuccess);
106 void ClearTimers();
107 void SetupTimers();
108 void ResetState();
109 void SetQTEState(EQTEState NewState);
110
112 bool IsQTERunning() const;
113 bool IsQTEConfigValid() const;
114 bool CanStartQTE() const;
115 bool CheckQTECompletion();
116};
Main player character for cooperative gameplay.
Definition MainPlayer.h:32
Core system for cooperative mini-games with QTE integration.
Definition MiniGameSystem.h:29
Definition QTEConfigurationTypes.h:30
Definition QTE_Subsystem.h:26
EQTEState GetCurrentState() const
Definition QTE_Subsystem.h:71
Real-time QTE action progress information.
Definition QTETypes.h:136
Complete QTE sequence configuration.
Definition QTETypes.h:108
Configuration for a single snap point in QTE.
Definition QTETypes.h:80