Add generated-mode launch request surface

This commit is contained in:
axiomlogicnexus 2026-05-01 23:47:36 +02:00
parent 1aec54d0e4
commit 7cfbbf5cb3
5 changed files with 109 additions and 0 deletions

View file

@ -130,6 +130,33 @@ bool UHyperTwistTrainingRuntimeLibrary::TryGetActiveImportedGeneratedModeLaunchC
return false;
}
bool UHyperTwistTrainingRuntimeLibrary::TryGetActiveImportedGeneratedModeLaunchRequest(
UObject* WorldContextObject,
FHyperTwistTrainingImportedGeneratedModeLaunchRequest& OutLaunchRequest
)
{
if (UHyperTwistTrainingSubsystem* TrainingSubsystem = GetTrainingSubsystem(WorldContextObject))
{
return TrainingSubsystem->TryGetActiveImportedGeneratedModeLaunchRequest(OutLaunchRequest);
}
OutLaunchRequest = FHyperTwistTrainingImportedGeneratedModeLaunchRequest();
return false;
}
FHyperTwistTrainingImportedGeneratedModeLaunchRequest UHyperTwistTrainingRuntimeLibrary::CreateActiveImportedGeneratedModeLaunchRequest(
UObject* WorldContextObject,
const FString& RequestSource
)
{
if (UHyperTwistTrainingSubsystem* TrainingSubsystem = GetTrainingSubsystem(WorldContextObject))
{
return TrainingSubsystem->CreateActiveImportedGeneratedModeLaunchRequest(RequestSource);
}
return FHyperTwistTrainingImportedGeneratedModeLaunchRequest();
}
FHyperTwistTrainingRunState UHyperTwistTrainingRuntimeLibrary::ApplyActiveImportedRuntimeSelectorOption(
UObject* WorldContextObject,
const FString& SelectorId,

View file

@ -771,6 +771,35 @@ bool UHyperTwistTrainingSubsystem::TryGetActiveImportedGeneratedModeLaunchConfig
);
}
bool UHyperTwistTrainingSubsystem::TryGetActiveImportedGeneratedModeLaunchRequest(
FHyperTwistTrainingImportedGeneratedModeLaunchRequest& OutLaunchRequest
) const
{
OutLaunchRequest = ActiveImportedGeneratedModeLaunchRequest;
return OutLaunchRequest.IsStructurallyValid();
}
FHyperTwistTrainingImportedGeneratedModeLaunchRequest UHyperTwistTrainingSubsystem::CreateActiveImportedGeneratedModeLaunchRequest(
const FString& RequestSource
)
{
FHyperTwistTrainingImportedGeneratedModeLaunchConfig LaunchConfig;
if (!TryGetActiveImportedGeneratedModeLaunchConfig(LaunchConfig))
{
ActiveImportedGeneratedModeLaunchRequest = FHyperTwistTrainingImportedGeneratedModeLaunchRequest();
return ActiveImportedGeneratedModeLaunchRequest;
}
ActiveImportedGeneratedModeLaunchRequest = FHyperTwistTrainingImportedGeneratedModeLaunchRequest();
ActiveImportedGeneratedModeLaunchRequest.RequestId =
FString::Printf(TEXT("generated_launch_%s"), *FGuid::NewGuid().ToString(EGuidFormats::Digits));
ActiveImportedGeneratedModeLaunchRequest.RequestedAtUtc = FDateTime::UtcNow().ToIso8601();
ActiveImportedGeneratedModeLaunchRequest.RequestSource =
RequestSource.IsEmpty() ? TEXT("runtime-imported-generated-mode") : RequestSource;
ActiveImportedGeneratedModeLaunchRequest.LaunchConfig = LaunchConfig;
return ActiveImportedGeneratedModeLaunchRequest;
}
FHyperTwistTrainingRunState UHyperTwistTrainingSubsystem::ApplyActiveImportedRuntimeSelectorOption(
const FString& SelectorId,
const FString& OptionId
@ -2792,6 +2821,7 @@ FHyperTwistTrainingRunState UHyperTwistTrainingSubsystem::StartTrainingRunFromDe
ActiveReviewFlowStatus = FHyperTwistTrainingReviewFlowStatus();
ActiveCoachActionPlan = FHyperTwistTrainingCoachActionPlan();
ActiveCoachFollowUpBrief = FHyperTwistCoachBrief();
ActiveImportedGeneratedModeLaunchRequest = FHyperTwistTrainingImportedGeneratedModeLaunchRequest();
ActiveRunState = UHyperTwistTrainingLibrary::StartTrainingRun(Deck, UserId, SessionId, Mode);
bHasActiveRun = ActiveRunState.IsStructurallyValid();
RefreshSummary();
@ -3107,6 +3137,7 @@ void UHyperTwistTrainingSubsystem::ClearActiveRun()
{
ActiveRunState = FHyperTwistTrainingRunState();
ActiveRunSummary = FHyperTwistTrainingSessionSummary();
ActiveImportedGeneratedModeLaunchRequest = FHyperTwistTrainingImportedGeneratedModeLaunchRequest();
ActiveReviewPlanState = FHyperTwistTrainingReviewPlanState();
ActiveCoachActionPlan = FHyperTwistTrainingCoachActionPlan();
bHasActiveRun = false;

View file

@ -60,6 +60,18 @@ public:
FHyperTwistTrainingImportedGeneratedModeLaunchConfig& OutLaunchConfig
);
UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training", meta = (WorldContext = "WorldContextObject"))
static bool TryGetActiveImportedGeneratedModeLaunchRequest(
UObject* WorldContextObject,
FHyperTwistTrainingImportedGeneratedModeLaunchRequest& OutLaunchRequest
);
UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training", meta = (WorldContext = "WorldContextObject"))
static FHyperTwistTrainingImportedGeneratedModeLaunchRequest CreateActiveImportedGeneratedModeLaunchRequest(
UObject* WorldContextObject,
const FString& RequestSource
);
UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training", meta = (WorldContext = "WorldContextObject"))
static FHyperTwistTrainingRunState ApplyActiveImportedRuntimeSelectorOption(
UObject* WorldContextObject,

View file

@ -48,6 +48,16 @@ public:
FHyperTwistTrainingImportedGeneratedModeLaunchConfig& OutLaunchConfig
) const;
UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training")
bool TryGetActiveImportedGeneratedModeLaunchRequest(
FHyperTwistTrainingImportedGeneratedModeLaunchRequest& OutLaunchRequest
) const;
UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training")
FHyperTwistTrainingImportedGeneratedModeLaunchRequest CreateActiveImportedGeneratedModeLaunchRequest(
const FString& RequestSource
);
UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training")
FHyperTwistTrainingRunState ApplyActiveImportedRuntimeSelectorOption(
const FString& SelectorId,
@ -522,6 +532,9 @@ private:
UPROPERTY()
FHyperTwistTrainingSessionSummary ActiveRunSummary;
UPROPERTY()
FHyperTwistTrainingImportedGeneratedModeLaunchRequest ActiveImportedGeneratedModeLaunchRequest;
UPROPERTY()
FHyperTwistTrainingMethodDrillRunState ActiveMethodDrillRunState;

View file

@ -544,6 +544,32 @@ struct FHyperTwistTrainingImportedGeneratedModeLaunchConfig
}
};
USTRUCT(BlueprintType)
struct FHyperTwistTrainingImportedGeneratedModeLaunchRequest
{
GENERATED_BODY()
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString RequestId;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString RequestedAtUtc;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString RequestSource;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FHyperTwistTrainingImportedGeneratedModeLaunchConfig LaunchConfig;
bool IsStructurallyValid() const
{
return !RequestId.IsEmpty()
&& !RequestedAtUtc.IsEmpty()
&& !RequestSource.IsEmpty()
&& LaunchConfig.IsStructurallyValid();
}
};
USTRUCT(BlueprintType)
struct FHyperTwistTrainingDeck
{