diff --git a/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingPanelWidget.cpp b/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingPanelWidget.cpp index ba95b0a..02af8bf 100644 --- a/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingPanelWidget.cpp +++ b/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingPanelWidget.cpp @@ -21,6 +21,16 @@ void UHyperTwistTrainingPanelWidget::RefreshTrainingState() { CachedRunState = UHyperTwistTrainingRuntimeLibrary::GetActiveTrainingRunState(this); CachedRunSummary = UHyperTwistTrainingRuntimeLibrary::GetActiveTrainingRunSummary(this); + CachedCoachSignals = UHyperTwistTrainingRuntimeLibrary::GetActiveTrainingCoachSignals(this); + CachedCoachBrief = UHyperTwistTrainingRuntimeLibrary::GetActiveTrainingCoachBrief(this); + CachedCoachSessionQueueSummary = + UHyperTwistTrainingRuntimeLibrary::GetActiveTrainingCoachSessionQueueSummary(this); + CachedCoachSchedulePolicySummary = + UHyperTwistTrainingRuntimeLibrary::GetActiveTrainingCoachSchedulePolicySummary(this); + CachedCoachQueueExecutionSummary = + UHyperTwistTrainingRuntimeLibrary::GetActiveTrainingCoachSessionQueueExecutionSummary(this); + CachedRepositoryRoundTripVerification = + UHyperTwistTrainingRuntimeLibrary::GetActiveTrainingRepositoryRoundTripVerification(this); } FHyperTwistTrainingRunState UHyperTwistTrainingPanelWidget::StartSampleClassicTrainingRun() @@ -79,3 +89,54 @@ void UHyperTwistTrainingPanelWidget::ClearActiveTrainingRun() LastStepResult = FHyperTwistTrainingRunStepResult(); RefreshTrainingState(); } + +FHyperTwistTrainingDeck UHyperTwistTrainingPanelWidget::BuildActiveCoachRecommendedDeck(const int32 MaxCases) +{ + CachedCoachRecommendedDeck = UHyperTwistTrainingRuntimeLibrary::BuildActiveCoachRecommendedDeck( + this, + MaxCases > 0 ? MaxCases : DefaultCoachMaxCases + ); + RefreshTrainingState(); + return CachedCoachRecommendedDeck; +} + +FHyperTwistTrainingDeck UHyperTwistTrainingPanelWidget::BuildActiveCoachFollowUpDeck(const int32 MaxCases) +{ + CachedCoachFollowUpDeck = UHyperTwistTrainingRuntimeLibrary::BuildActiveCoachFollowUpDeck( + this, + MaxCases > 0 ? MaxCases : DefaultCoachMaxCases + ); + RefreshTrainingState(); + return CachedCoachFollowUpDeck; +} + +FHyperTwistTrainingRunState UHyperTwistTrainingPanelWidget::StartCoachRecommendedRun(const int32 MaxCases) +{ + CachedRunState = UHyperTwistTrainingRuntimeLibrary::StartCoachRecommendedRun( + this, + DefaultSessionId + TEXT("_coach"), + MaxCases > 0 ? MaxCases : DefaultCoachMaxCases + ); + RefreshTrainingState(); + return CachedRunState; +} + +FHyperTwistTrainingRunState UHyperTwistTrainingPanelWidget::StartCoachFollowUpRun(const int32 MaxCases) +{ + CachedRunState = UHyperTwistTrainingRuntimeLibrary::StartCoachFollowUpRun( + this, + DefaultSessionId + TEXT("_follow_up"), + MaxCases > 0 ? MaxCases : DefaultCoachMaxCases + ); + RefreshTrainingState(); + return CachedRunState; +} + +FHyperTwistTrainingRepositoryRoundTripVerification +UHyperTwistTrainingPanelWidget::VerifyTrainingRepositoryRoundTrip() +{ + CachedRepositoryRoundTripVerification = + UHyperTwistTrainingRuntimeLibrary::VerifyTrainingRepositoryRoundTripAtDefaultPath(this); + RefreshTrainingState(); + return CachedRepositoryRoundTripVerification; +} diff --git a/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingSessionActor.cpp b/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingSessionActor.cpp index da75e94..6b03967 100644 --- a/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingSessionActor.cpp +++ b/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingSessionActor.cpp @@ -84,4 +84,69 @@ void AHyperTwistTrainingSessionActor::RefreshCachedTrainingState() { CachedRunState = UHyperTwistTrainingRuntimeLibrary::GetActiveTrainingRunState(this); CachedRunSummary = UHyperTwistTrainingRuntimeLibrary::GetActiveTrainingRunSummary(this); + CachedCoachSignals = UHyperTwistTrainingRuntimeLibrary::GetActiveTrainingCoachSignals(this); + CachedCoachBrief = UHyperTwistTrainingRuntimeLibrary::GetActiveTrainingCoachBrief(this); + CachedCoachSessionQueueSummary = + UHyperTwistTrainingRuntimeLibrary::GetActiveTrainingCoachSessionQueueSummary(this); + CachedCoachSchedulePolicySummary = + UHyperTwistTrainingRuntimeLibrary::GetActiveTrainingCoachSchedulePolicySummary(this); + CachedCoachQueueExecutionSummary = + UHyperTwistTrainingRuntimeLibrary::GetActiveTrainingCoachSessionQueueExecutionSummary(this); + CachedRepositoryRoundTripVerification = + UHyperTwistTrainingRuntimeLibrary::GetActiveTrainingRepositoryRoundTripVerification(this); +} + +FHyperTwistTrainingDeck AHyperTwistTrainingSessionActor::BuildCoachRecommendedDeck(const int32 MaxCases) +{ + CachedCoachRecommendedDeck = UHyperTwistTrainingRuntimeLibrary::BuildActiveCoachRecommendedDeck( + this, + MaxCases > 0 ? MaxCases : DefaultCoachMaxCases + ); + RefreshCachedTrainingState(); + return CachedCoachRecommendedDeck; +} + +FHyperTwistTrainingDeck AHyperTwistTrainingSessionActor::BuildCoachFollowUpDeck(const int32 MaxCases) +{ + CachedCoachFollowUpDeck = UHyperTwistTrainingRuntimeLibrary::BuildActiveCoachFollowUpDeck( + this, + MaxCases > 0 ? MaxCases : DefaultCoachMaxCases + ); + RefreshCachedTrainingState(); + return CachedCoachFollowUpDeck; +} + +FHyperTwistTrainingRunState AHyperTwistTrainingSessionActor::StartCoachRecommendedTrainingRun( + const int32 MaxCases +) +{ + CachedRunState = UHyperTwistTrainingRuntimeLibrary::StartCoachRecommendedRun( + this, + AutoStartSessionId + TEXT("_coach"), + MaxCases > 0 ? MaxCases : DefaultCoachMaxCases + ); + RefreshCachedTrainingState(); + return CachedRunState; +} + +FHyperTwistTrainingRunState AHyperTwistTrainingSessionActor::StartCoachFollowUpTrainingRun( + const int32 MaxCases +) +{ + CachedRunState = UHyperTwistTrainingRuntimeLibrary::StartCoachFollowUpRun( + this, + AutoStartSessionId + TEXT("_follow_up"), + MaxCases > 0 ? MaxCases : DefaultCoachMaxCases + ); + RefreshCachedTrainingState(); + return CachedRunState; +} + +FHyperTwistTrainingRepositoryRoundTripVerification +AHyperTwistTrainingSessionActor::VerifyRepositoryRoundTrip() +{ + CachedRepositoryRoundTripVerification = + UHyperTwistTrainingRuntimeLibrary::VerifyTrainingRepositoryRoundTripAtDefaultPath(this); + RefreshCachedTrainingState(); + return CachedRepositoryRoundTripVerification; } diff --git a/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingPanelWidget.h b/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingPanelWidget.h index 0cf53de..81c2ea7 100644 --- a/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingPanelWidget.h +++ b/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingPanelWidget.h @@ -2,6 +2,7 @@ #include "CoreMinimal.h" #include "Blueprint/UserWidget.h" +#include "HyperTwistTraining/HyperTwistTrainingCoachLibrary.h" #include "HyperTwistTraining/HyperTwistTrainingTypes.h" #include "HyperTwistTrainingPanelWidget.generated.h" @@ -25,6 +26,9 @@ public: UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist|Training") EHyperTwistTrainingDeliveryMode DefaultMode = EHyperTwistTrainingDeliveryMode::Timer; + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist|Training|Coach") + int32 DefaultCoachMaxCases = 5; + UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "HyperTwist|Training") FHyperTwistTrainingRunState CachedRunState; @@ -34,6 +38,30 @@ public: UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "HyperTwist|Training") FHyperTwistTrainingRunStepResult LastStepResult; + UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "HyperTwist|Training|Coach") + TArray CachedCoachSignals; + + UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "HyperTwist|Training|Coach") + FHyperTwistCoachBrief CachedCoachBrief; + + UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "HyperTwist|Training|Coach") + FHyperTwistCoachSessionQueueSummary CachedCoachSessionQueueSummary; + + UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "HyperTwist|Training|Coach") + FHyperTwistCoachSchedulePolicySummary CachedCoachSchedulePolicySummary; + + UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "HyperTwist|Training|Coach") + FHyperTwistTrainingCoachSessionQueueExecutionSummary CachedCoachQueueExecutionSummary; + + UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "HyperTwist|Training|Coach") + FHyperTwistTrainingDeck CachedCoachRecommendedDeck; + + UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "HyperTwist|Training|Coach") + FHyperTwistTrainingDeck CachedCoachFollowUpDeck; + + UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "HyperTwist|Training") + FHyperTwistTrainingRepositoryRoundTripVerification CachedRepositoryRoundTripVerification; + UFUNCTION(BlueprintPure, Category = "HyperTwist|Training") bool HasActiveTrainingRun() const; @@ -62,4 +90,19 @@ public: UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training") void ClearActiveTrainingRun(); + + UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Coach") + FHyperTwistTrainingDeck BuildActiveCoachRecommendedDeck(int32 MaxCases); + + UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Coach") + FHyperTwistTrainingDeck BuildActiveCoachFollowUpDeck(int32 MaxCases); + + UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Coach") + FHyperTwistTrainingRunState StartCoachRecommendedRun(int32 MaxCases); + + UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Coach") + FHyperTwistTrainingRunState StartCoachFollowUpRun(int32 MaxCases); + + UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training") + FHyperTwistTrainingRepositoryRoundTripVerification VerifyTrainingRepositoryRoundTrip(); }; diff --git a/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingSessionActor.h b/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingSessionActor.h index 63201ad..abcd3d9 100644 --- a/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingSessionActor.h +++ b/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingSessionActor.h @@ -2,6 +2,7 @@ #include "CoreMinimal.h" #include "GameFramework/Actor.h" +#include "HyperTwistTraining/HyperTwistTrainingCoachLibrary.h" #include "HyperTwistTraining/HyperTwistTrainingTypes.h" #include "HyperTwistTrainingSessionActor.generated.h" @@ -27,6 +28,9 @@ public: UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist|Training") EHyperTwistTrainingDeliveryMode AutoStartMode = EHyperTwistTrainingDeliveryMode::Timer; + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist|Training|Coach") + int32 DefaultCoachMaxCases = 5; + UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "HyperTwist|Training") FHyperTwistTrainingRunState CachedRunState; @@ -36,6 +40,30 @@ public: UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "HyperTwist|Training") FHyperTwistTrainingRunStepResult LastStepResult; + UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "HyperTwist|Training|Coach") + TArray CachedCoachSignals; + + UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "HyperTwist|Training|Coach") + FHyperTwistCoachBrief CachedCoachBrief; + + UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "HyperTwist|Training|Coach") + FHyperTwistCoachSessionQueueSummary CachedCoachSessionQueueSummary; + + UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "HyperTwist|Training|Coach") + FHyperTwistCoachSchedulePolicySummary CachedCoachSchedulePolicySummary; + + UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "HyperTwist|Training|Coach") + FHyperTwistTrainingCoachSessionQueueExecutionSummary CachedCoachQueueExecutionSummary; + + UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "HyperTwist|Training|Coach") + FHyperTwistTrainingDeck CachedCoachRecommendedDeck; + + UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "HyperTwist|Training|Coach") + FHyperTwistTrainingDeck CachedCoachFollowUpDeck; + + UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "HyperTwist|Training") + FHyperTwistTrainingRepositoryRoundTripVerification CachedRepositoryRoundTripVerification; + UFUNCTION(BlueprintPure, Category = "HyperTwist|Training") bool HasActiveTrainingRun() const; @@ -64,4 +92,19 @@ public: UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training") void RefreshCachedTrainingState(); + + UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Coach") + FHyperTwistTrainingDeck BuildCoachRecommendedDeck(int32 MaxCases); + + UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Coach") + FHyperTwistTrainingDeck BuildCoachFollowUpDeck(int32 MaxCases); + + UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Coach") + FHyperTwistTrainingRunState StartCoachRecommendedTrainingRun(int32 MaxCases); + + UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Coach") + FHyperTwistTrainingRunState StartCoachFollowUpTrainingRun(int32 MaxCases); + + UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training") + FHyperTwistTrainingRepositoryRoundTripVerification VerifyRepositoryRoundTrip(); };