diff --git a/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingRepositoryLibrary.cpp b/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingRepositoryLibrary.cpp index 07b310e..62cec31 100644 --- a/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingRepositoryLibrary.cpp +++ b/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingRepositoryLibrary.cpp @@ -6639,6 +6639,32 @@ TArray UHyperTwistTrainingRepositoryLibrary::ListR return Records; } +bool UHyperTwistTrainingRepositoryLibrary::TryGetLatestGeneratedModeLaunchRequestForDeck( + const FHyperTwistTrainingRepositoryState& RepositoryState, + const FString& UserId, + const FString& DeckId, + FHyperTwistTrainingImportedGeneratedModeLaunchRequest& OutLaunchRequest +) +{ + OutLaunchRequest = FHyperTwistTrainingImportedGeneratedModeLaunchRequest(); + const TArray Records = ListRunRecordsForDeck(RepositoryState, UserId, DeckId); + for (const FHyperTwistTrainingRunRecord& RunRecord : Records) + { + if (!RunRecord.IsStructurallyValid()) + { + continue; + } + + if (RunRecord.ImportedGeneratedModeLaunchRequest.IsStructurallyValid()) + { + OutLaunchRequest = RunRecord.ImportedGeneratedModeLaunchRequest; + return true; + } + } + + return false; +} + FHyperTwistTrainingCaseLearnerState UHyperTwistTrainingRepositoryLibrary::DeriveLearnerStateForCase( const FHyperTwistTrainingRepositoryState& RepositoryState, const FString& UserId, diff --git a/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.cpp b/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.cpp index 2ef9eb4..ef40395 100644 --- a/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.cpp +++ b/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.cpp @@ -256,6 +256,40 @@ FHyperTwistTrainingRepositoryState UHyperTwistTrainingRuntimeLibrary::GetTrainin return FHyperTwistTrainingRepositoryState(); } +bool UHyperTwistTrainingRuntimeLibrary::TryGetLatestGeneratedModeLaunchRequestForDeck( + UObject* WorldContextObject, + const FString& UserId, + const FString& DeckId, + FHyperTwistTrainingImportedGeneratedModeLaunchRequest& OutLaunchRequest +) +{ + if (UHyperTwistTrainingSubsystem* TrainingSubsystem = GetTrainingSubsystem(WorldContextObject)) + { + return TrainingSubsystem->TryGetLatestGeneratedModeLaunchRequestForDeck( + UserId, + DeckId, + OutLaunchRequest + ); + } + + OutLaunchRequest = FHyperTwistTrainingImportedGeneratedModeLaunchRequest(); + return false; +} + +bool UHyperTwistTrainingRuntimeLibrary::TryGetLatestGeneratedModeLaunchRequestForActiveDeck( + UObject* WorldContextObject, + FHyperTwistTrainingImportedGeneratedModeLaunchRequest& OutLaunchRequest +) +{ + if (UHyperTwistTrainingSubsystem* TrainingSubsystem = GetTrainingSubsystem(WorldContextObject)) + { + return TrainingSubsystem->TryGetLatestGeneratedModeLaunchRequestForActiveDeck(OutLaunchRequest); + } + + OutLaunchRequest = FHyperTwistTrainingImportedGeneratedModeLaunchRequest(); + return false; +} + FHyperTwistTrainingRepositoryIntegrityReport UHyperTwistTrainingRuntimeLibrary::GetActiveTrainingRepositoryIntegrityReport( UObject* WorldContextObject ) diff --git a/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingSubsystem.cpp b/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingSubsystem.cpp index 924abc0..1cedbde 100644 --- a/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingSubsystem.cpp +++ b/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingSubsystem.cpp @@ -942,6 +942,37 @@ FHyperTwistTrainingRepositoryState UHyperTwistTrainingSubsystem::GetTrainingRepo return TrainingRepositoryState; } +bool UHyperTwistTrainingSubsystem::TryGetLatestGeneratedModeLaunchRequestForDeck( + const FString& UserId, + const FString& DeckId, + FHyperTwistTrainingImportedGeneratedModeLaunchRequest& OutLaunchRequest +) const +{ + return UHyperTwistTrainingRepositoryLibrary::TryGetLatestGeneratedModeLaunchRequestForDeck( + TrainingRepositoryState, + UserId, + DeckId, + OutLaunchRequest + ); +} + +bool UHyperTwistTrainingSubsystem::TryGetLatestGeneratedModeLaunchRequestForActiveDeck( + FHyperTwistTrainingImportedGeneratedModeLaunchRequest& OutLaunchRequest +) const +{ + if (!HasActiveRun()) + { + OutLaunchRequest = FHyperTwistTrainingImportedGeneratedModeLaunchRequest(); + return false; + } + + return TryGetLatestGeneratedModeLaunchRequestForDeck( + ActiveRunState.Session.UserId, + ActiveRunState.Session.DeckId, + OutLaunchRequest + ); +} + FHyperTwistTrainingRepositoryIntegrityReport UHyperTwistTrainingSubsystem::GetActiveRepositoryIntegrityReport() const { return ActiveRepositoryIntegrityReport; diff --git a/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingRepositoryLibrary.h b/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingRepositoryLibrary.h index 19ea2df..7994d30 100644 --- a/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingRepositoryLibrary.h +++ b/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingRepositoryLibrary.h @@ -156,6 +156,14 @@ public: const FString& DeckId ); + UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Repository") + static bool TryGetLatestGeneratedModeLaunchRequestForDeck( + const FHyperTwistTrainingRepositoryState& RepositoryState, + const FString& UserId, + const FString& DeckId, + FHyperTwistTrainingImportedGeneratedModeLaunchRequest& OutLaunchRequest + ); + UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Repository") static FHyperTwistTrainingCaseLearnerState DeriveLearnerStateForCase( const FHyperTwistTrainingRepositoryState& RepositoryState, diff --git a/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.h b/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.h index d9b53cd..a2d6203 100644 --- a/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.h +++ b/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.h @@ -109,6 +109,20 @@ public: UFUNCTION(BlueprintPure, Category = "HyperTwist|Training", meta = (WorldContext = "WorldContextObject")) static FHyperTwistTrainingRepositoryState GetTrainingRepositoryState(UObject* WorldContextObject); + UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training", meta = (WorldContext = "WorldContextObject")) + static bool TryGetLatestGeneratedModeLaunchRequestForDeck( + UObject* WorldContextObject, + const FString& UserId, + const FString& DeckId, + FHyperTwistTrainingImportedGeneratedModeLaunchRequest& OutLaunchRequest + ); + + UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training", meta = (WorldContext = "WorldContextObject")) + static bool TryGetLatestGeneratedModeLaunchRequestForActiveDeck( + UObject* WorldContextObject, + FHyperTwistTrainingImportedGeneratedModeLaunchRequest& OutLaunchRequest + ); + UFUNCTION(BlueprintPure, Category = "HyperTwist|Training", meta = (WorldContext = "WorldContextObject")) static FHyperTwistTrainingRepositoryIntegrityReport GetActiveTrainingRepositoryIntegrityReport( UObject* WorldContextObject diff --git a/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingSubsystem.h b/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingSubsystem.h index 7951236..b43eac3 100644 --- a/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingSubsystem.h +++ b/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingSubsystem.h @@ -89,6 +89,18 @@ public: UFUNCTION(BlueprintPure, Category = "HyperTwist|Training") FHyperTwistTrainingRepositoryState GetTrainingRepositoryState() const; + UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training") + bool TryGetLatestGeneratedModeLaunchRequestForDeck( + const FString& UserId, + const FString& DeckId, + FHyperTwistTrainingImportedGeneratedModeLaunchRequest& OutLaunchRequest + ) const; + + UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training") + bool TryGetLatestGeneratedModeLaunchRequestForActiveDeck( + FHyperTwistTrainingImportedGeneratedModeLaunchRequest& OutLaunchRequest + ) const; + UFUNCTION(BlueprintPure, Category = "HyperTwist|Training") FHyperTwistTrainingRepositoryIntegrityReport GetActiveRepositoryIntegrityReport() const;