Expose coaching through gameplay wrappers

This commit is contained in:
axiomlogicnexus 2026-04-27 03:41:54 +02:00
parent 2ecbe3460d
commit bbdee1398e
4 changed files with 212 additions and 0 deletions

View file

@ -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;
}

View file

@ -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;
}

View file

@ -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<FHyperTwistCoachSignal> 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();
};

View file

@ -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<FHyperTwistCoachSignal> 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();
};