diff --git a/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistCoachDashboardWidget.cpp b/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistCoachDashboardWidget.cpp index c8cb9b2..7778c00 100644 --- a/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistCoachDashboardWidget.cpp +++ b/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistCoachDashboardWidget.cpp @@ -702,6 +702,10 @@ namespace HyperTwistCoachDashboardWidgetInternal { return TEXT("trusted tight drill-recovery-plan history"); } + if (SourceLabel == TEXT("coach-memory-method-drill-recovery-structure-plan-tight-trusted-reliable")) + { + return TEXT("reliable trusted tight drill-recovery-plan history"); + } if (SourceLabel == TEXT("coach-memory-method-drill-recovery-packet-strong")) { return TEXT("successful retained drill-recovery-packet history"); @@ -734,6 +738,10 @@ namespace HyperTwistCoachDashboardWidgetInternal { return TEXT("trusted broad drill-recovery-plan redirect history"); } + if (SourceLabel == TEXT("coach-memory-method-drill-recovery-structure-plan-broad-trusted-reliable")) + { + return TEXT("reliable trusted broad drill-recovery-plan redirect history"); + } if (SourceLabel == TEXT("coach-memory-method-drill-recovery-packet-weak")) { return TEXT("weak retained drill-recovery-packet history"); diff --git a/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingCoachLibrary.cpp b/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingCoachLibrary.cpp index 8ea8d3d..085f736 100644 --- a/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingCoachLibrary.cpp +++ b/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingCoachLibrary.cpp @@ -91,8 +91,10 @@ namespace HyperTwistTrainingCoachLibraryInternal || SourceLabel == TEXT("coach-memory-method-drill-recovery-structure-broad") || SourceLabel == TEXT("coach-memory-method-drill-recovery-structure-plan-tight") || SourceLabel == TEXT("coach-memory-method-drill-recovery-structure-plan-tight-trusted") + || SourceLabel == TEXT("coach-memory-method-drill-recovery-structure-plan-tight-trusted-reliable") || SourceLabel == TEXT("coach-memory-method-drill-recovery-structure-plan-broad") || SourceLabel == TEXT("coach-memory-method-drill-recovery-structure-plan-broad-trusted") + || SourceLabel == TEXT("coach-memory-method-drill-recovery-structure-plan-broad-trusted-reliable") || SourceLabel.StartsWith(TEXT("coach-memory-dashboard-method-drill-recovery-structure-plan-tight-")) || SourceLabel.StartsWith(TEXT("coach-memory-dashboard-method-drill-recovery-structure-plan-broad-")); } @@ -165,7 +167,8 @@ namespace HyperTwistTrainingCoachLibraryInternal || IsNarrowMethodDrillFollowUpPacketStructureSource(SourceLabel) || SourceLabel == TEXT("coach-memory-method-drill-recovery-structure-narrow") || SourceLabel == TEXT("coach-memory-method-drill-recovery-structure-plan-tight") - || SourceLabel == TEXT("coach-memory-method-drill-recovery-structure-plan-tight-trusted"); + || SourceLabel == TEXT("coach-memory-method-drill-recovery-structure-plan-tight-trusted") + || SourceLabel == TEXT("coach-memory-method-drill-recovery-structure-plan-tight-trusted-reliable"); } bool IsWeakMethodDrillRecoveryMemorySource(const FString& SourceLabel) @@ -196,7 +199,8 @@ namespace HyperTwistTrainingCoachLibraryInternal || IsBroadMethodDrillFollowUpPacketStructureSource(SourceLabel) || SourceLabel == TEXT("coach-memory-method-drill-recovery-structure-broad") || SourceLabel == TEXT("coach-memory-method-drill-recovery-structure-plan-broad") - || SourceLabel == TEXT("coach-memory-method-drill-recovery-structure-plan-broad-trusted"); + || SourceLabel == TEXT("coach-memory-method-drill-recovery-structure-plan-broad-trusted") + || SourceLabel == TEXT("coach-memory-method-drill-recovery-structure-plan-broad-trusted-reliable"); } FString DescribeRetainedMethodDrillRecoveryStanceLabel(const FString& SourceLabel) @@ -702,6 +706,10 @@ namespace HyperTwistTrainingCoachLibraryInternal { return TEXT("trusted tight drill-recovery-plan history"); } + if (SourceLabel == TEXT("coach-memory-method-drill-recovery-structure-plan-tight-trusted-reliable")) + { + return TEXT("reliable trusted tight drill-recovery-plan history"); + } if (SourceLabel == TEXT("coach-memory-method-drill-recovery-packet-strong")) { return TEXT("successful retained drill-recovery-packet history"); @@ -730,6 +738,10 @@ namespace HyperTwistTrainingCoachLibraryInternal { return TEXT("trusted broad drill-recovery-plan redirect history"); } + if (SourceLabel == TEXT("coach-memory-method-drill-recovery-structure-plan-broad-trusted-reliable")) + { + return TEXT("reliable trusted broad drill-recovery-plan redirect history"); + } if (SourceLabel == TEXT("coach-memory-method-drill-recovery-packet-weak")) { return TEXT("weak retained drill-recovery-packet history"); diff --git a/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingRepositoryLibrary.cpp b/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingRepositoryLibrary.cpp index 1b8a7ff..19a9cd3 100644 --- a/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingRepositoryLibrary.cpp +++ b/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingRepositoryLibrary.cpp @@ -326,8 +326,10 @@ namespace HyperTwistTrainingRepositoryLibraryInternal || SourceLabel == TEXT("coach-memory-method-drill-recovery-structure-broad") || SourceLabel == TEXT("coach-memory-method-drill-recovery-structure-plan-tight") || SourceLabel == TEXT("coach-memory-method-drill-recovery-structure-plan-tight-trusted") + || SourceLabel == TEXT("coach-memory-method-drill-recovery-structure-plan-tight-trusted-reliable") || SourceLabel == TEXT("coach-memory-method-drill-recovery-structure-plan-broad") || SourceLabel == TEXT("coach-memory-method-drill-recovery-structure-plan-broad-trusted") + || SourceLabel == TEXT("coach-memory-method-drill-recovery-structure-plan-broad-trusted-reliable") || SourceLabel.StartsWith(TEXT("coach-memory-dashboard-method-drill-recovery-structure-plan-tight-")) || SourceLabel.StartsWith(TEXT("coach-memory-dashboard-method-drill-recovery-structure-plan-broad-")); } @@ -1015,6 +1017,28 @@ namespace HyperTwistTrainingRepositoryLibraryInternal BroadMethodDrillRecoveryStructurePlanStartedCount - BroadMethodDrillRecoveryStructurePlanCompletedCount ); + const int32 TrustedTightMethodDrillRecoveryStructurePlanStartedCount = + QueueExecutionSummary.StartedTrustedTightMethodDrillRecoveryStructurePlanHandoffEventCount; + const int32 TrustedTightMethodDrillRecoveryStructurePlanPromotedCount = + QueueExecutionSummary.PromotedTrustedTightMethodDrillRecoveryStructurePlanHandoffEventCount; + const int32 TrustedTightMethodDrillRecoveryStructurePlanCompletedCount = + QueueExecutionSummary.CompletedTrustedTightMethodDrillRecoveryStructurePlanHandoffEventCount; + const int32 TrustedTightMethodDrillRecoveryStructurePlanOutstandingCount = FMath::Max( + 0, + TrustedTightMethodDrillRecoveryStructurePlanStartedCount + - TrustedTightMethodDrillRecoveryStructurePlanCompletedCount + ); + const int32 TrustedBroadMethodDrillRecoveryStructurePlanStartedCount = + QueueExecutionSummary.StartedTrustedBroadMethodDrillRecoveryStructurePlanHandoffEventCount; + const int32 TrustedBroadMethodDrillRecoveryStructurePlanPromotedCount = + QueueExecutionSummary.PromotedTrustedBroadMethodDrillRecoveryStructurePlanHandoffEventCount; + const int32 TrustedBroadMethodDrillRecoveryStructurePlanCompletedCount = + QueueExecutionSummary.CompletedTrustedBroadMethodDrillRecoveryStructurePlanHandoffEventCount; + const int32 TrustedBroadMethodDrillRecoveryStructurePlanOutstandingCount = FMath::Max( + 0, + TrustedBroadMethodDrillRecoveryStructurePlanStartedCount + - TrustedBroadMethodDrillRecoveryStructurePlanCompletedCount + ); if (MethodDrillRecoveryStartedCount > 0) { Snapshot.MethodDrillRecoveryHistoryCount += MethodDrillRecoveryStartedCount; @@ -1024,6 +1048,40 @@ namespace HyperTwistTrainingRepositoryLibraryInternal (static_cast(MethodDrillRecoveryCompletedCount) * 100.0f) / static_cast(MethodDrillRecoveryStartedCount); } + if ((TrustedTightMethodDrillRecoveryStructurePlanStartedCount + + TrustedTightMethodDrillRecoveryStructurePlanPromotedCount) + > 0) + { + const int32 TrustedTightMethodDrillRecoveryStructurePlanEventCount = + TrustedTightMethodDrillRecoveryStructurePlanStartedCount + + TrustedTightMethodDrillRecoveryStructurePlanPromotedCount; + Snapshot.TrustedTightMethodDrillRecoveryStructurePlanHistoryCount += + TrustedTightMethodDrillRecoveryStructurePlanEventCount; + Snapshot.TrustedTightMethodDrillRecoveryStructurePlanAverageOutcomeScore = + (static_cast(TrustedTightMethodDrillRecoveryStructurePlanCompletedCount) + * 100.0f) + / static_cast(TrustedTightMethodDrillRecoveryStructurePlanEventCount); + } + if ((TrustedBroadMethodDrillRecoveryStructurePlanStartedCount + + TrustedBroadMethodDrillRecoveryStructurePlanPromotedCount) + > 0) + { + const int32 TrustedBroadMethodDrillRecoveryStructurePlanEventCount = + TrustedBroadMethodDrillRecoveryStructurePlanStartedCount + + TrustedBroadMethodDrillRecoveryStructurePlanPromotedCount; + const int32 TrustedBroadMethodDrillRecoveryStructurePlanRedirectCount = FMath::Max( + 0, + TrustedBroadMethodDrillRecoveryStructurePlanPromotedCount + + TrustedBroadMethodDrillRecoveryStructurePlanOutstandingCount + - TrustedBroadMethodDrillRecoveryStructurePlanCompletedCount + ); + Snapshot.TrustedBroadMethodDrillRecoveryStructurePlanHistoryCount += + TrustedBroadMethodDrillRecoveryStructurePlanEventCount; + Snapshot.TrustedBroadMethodDrillRecoveryStructurePlanAverageOutcomeScore = + (static_cast(TrustedBroadMethodDrillRecoveryStructurePlanRedirectCount) + * 100.0f) + / static_cast(TrustedBroadMethodDrillRecoveryStructurePlanEventCount); + } const bool bStrongMethodDrillRecoveryHistory = MethodDrillRecoveryStartedCount >= 2 && MethodDrillRecoveryCompletedCount >= MethodDrillRecoveryOutstandingCount @@ -1129,6 +1187,48 @@ namespace HyperTwistTrainingRepositoryLibraryInternal 1, 3) : 0; + const bool bTrustedTightMethodDrillRecoveryStructurePlanHistory = + (TrustedTightMethodDrillRecoveryStructurePlanStartedCount + + TrustedTightMethodDrillRecoveryStructurePlanPromotedCount) + >= 2 + && TrustedTightMethodDrillRecoveryStructurePlanCompletedCount + >= TrustedTightMethodDrillRecoveryStructurePlanOutstandingCount + && Snapshot.TrustedTightMethodDrillRecoveryStructurePlanAverageOutcomeScore >= 60.0f; + const bool bTrustedBroadMethodDrillRecoveryStructurePlanHistory = + (TrustedBroadMethodDrillRecoveryStructurePlanStartedCount + + TrustedBroadMethodDrillRecoveryStructurePlanPromotedCount) + >= 2 + && (TrustedBroadMethodDrillRecoveryStructurePlanPromotedCount + + TrustedBroadMethodDrillRecoveryStructurePlanOutstandingCount) + >= TrustedBroadMethodDrillRecoveryStructurePlanCompletedCount + && Snapshot.TrustedBroadMethodDrillRecoveryStructurePlanAverageOutcomeScore >= 60.0f; + const int32 TrustedTightMethodDrillRecoveryStructurePlanLaunchBias = + bTrustedTightMethodDrillRecoveryStructurePlanHistory + ? FMath::Clamp( + (TrustedTightMethodDrillRecoveryStructurePlanCompletedCount * 2) + - TrustedTightMethodDrillRecoveryStructurePlanOutstandingCount + - TrustedTightMethodDrillRecoveryStructurePlanPromotedCount + + (Snapshot.TrustedTightMethodDrillRecoveryStructurePlanAverageOutcomeScore + >= 80.0f + ? 1 + : 0), + 1, + 3) + : 0; + const int32 TrustedBroadMethodDrillRecoveryStructurePlanPromoteBias = + bTrustedBroadMethodDrillRecoveryStructurePlanHistory + ? FMath::Clamp( + TrustedBroadMethodDrillRecoveryStructurePlanPromotedCount + + TrustedBroadMethodDrillRecoveryStructurePlanOutstandingCount + - TrustedBroadMethodDrillRecoveryStructurePlanCompletedCount + + (Snapshot.TrustedBroadMethodDrillRecoveryStructurePlanAverageOutcomeScore + >= 80.0f + ? 1 + : 0) + + (QueueExecutionSummary.bHasOutstandingDeferredWork ? 1 : 0), + 1, + 3) + : 0; const bool bStrongMethodDrillRecoveryPacketQueuedHandoff = QueueExecutionSummary.StartedStrongMethodDrillRecoveryPacketQueuedHandoffEventCount > 0; const bool bStrongMethodDrillRecoveryPacketFollowUpHandoff = @@ -1347,6 +1447,30 @@ namespace HyperTwistTrainingRepositoryLibraryInternal Snapshot.PreferredQueueRecoveryActionSourceLabel = TEXT("coach-memory-method-drill-recovery-packet-weak"); } + else if (Snapshot.PreferredQueueRecoveryAction + == EHyperTwistTrainingQueueRecoveryAction::LaunchRecovery + && TrustedTightMethodDrillRecoveryStructurePlanLaunchBias > 0 + && (Snapshot.PreferredQueueRecoveryActionSourceLabel.IsEmpty() + || Snapshot.PreferredQueueRecoveryActionSourceLabel.StartsWith(TEXT("queue-history")) + || HyperTwistTrainingRepositoryLibraryInternal::IsMethodDrillDashboardHandoffSource( + Snapshot.PreferredQueueRecoveryActionSourceLabel) + || HyperTwistTrainingRepositoryLibraryInternal::IsMethodDrillRecoveryCoachMemorySource( + Snapshot.PreferredQueueRecoveryActionSourceLabel))) + { + Snapshot.PreferredQueueRecoveryActionSourceLabel = + TEXT("coach-memory-method-drill-recovery-structure-plan-tight-trusted-reliable"); + } + else if (Snapshot.PreferredQueueRecoveryAction + == EHyperTwistTrainingQueueRecoveryAction::PromoteDeferred + && TrustedBroadMethodDrillRecoveryStructurePlanPromoteBias > 0 + && (Snapshot.PreferredQueueRecoveryActionSourceLabel.IsEmpty() + || Snapshot.PreferredQueueRecoveryActionSourceLabel.StartsWith(TEXT("queue-history")) + || HyperTwistTrainingRepositoryLibraryInternal::IsMethodDrillRecoveryCoachMemorySource( + Snapshot.PreferredQueueRecoveryActionSourceLabel))) + { + Snapshot.PreferredQueueRecoveryActionSourceLabel = + TEXT("coach-memory-method-drill-recovery-structure-plan-broad-trusted-reliable"); + } else if (Snapshot.PreferredQueueRecoveryAction == EHyperTwistTrainingQueueRecoveryAction::LaunchRecovery && HyperTwistTrainingRepositoryLibraryInternal:: @@ -1596,7 +1720,9 @@ namespace HyperTwistTrainingRepositoryLibraryInternal || CoachMemorySnapshot.PreferredQueueRecoveryActionSourceLabel == TEXT("coach-memory-method-drill-recovery-structure-plan-tight") || CoachMemorySnapshot.PreferredQueueRecoveryActionSourceLabel - == TEXT("coach-memory-method-drill-recovery-structure-plan-tight-trusted"); + == TEXT("coach-memory-method-drill-recovery-structure-plan-tight-trusted") + || CoachMemorySnapshot.PreferredQueueRecoveryActionSourceLabel + == TEXT("coach-memory-method-drill-recovery-structure-plan-tight-trusted-reliable"); const bool bBroadMethodDrillRecoveryStructureHandoffSource = HyperTwistTrainingRepositoryLibraryInternal::IsBroadMethodDrillRecoveryStructureDashboardHandoffSource( CoachMemorySnapshot.PreferredCoachHandoffSourceLabel @@ -1610,7 +1736,9 @@ namespace HyperTwistTrainingRepositoryLibraryInternal || CoachMemorySnapshot.PreferredQueueRecoveryActionSourceLabel == TEXT("coach-memory-method-drill-recovery-structure-plan-broad") || CoachMemorySnapshot.PreferredQueueRecoveryActionSourceLabel - == TEXT("coach-memory-method-drill-recovery-structure-plan-broad-trusted"); + == TEXT("coach-memory-method-drill-recovery-structure-plan-broad-trusted") + || CoachMemorySnapshot.PreferredQueueRecoveryActionSourceLabel + == TEXT("coach-memory-method-drill-recovery-structure-plan-broad-trusted-reliable"); const bool bStrongMethodDrillRecoveryMemoryHandoffSource = CoachMemorySnapshot.PreferredCoachHandoffSourceLabel.StartsWith( TEXT("coach-memory-dashboard-method-drill-recovery-strong-")) @@ -7613,6 +7741,28 @@ FHyperTwistTrainingCoachMemorySnapshot UHyperTwistTrainingRepositoryLibrary::Der BroadMethodDrillRecoveryStructurePlanStartedCount - BroadMethodDrillRecoveryStructurePlanCompletedCount ); + const int32 TrustedTightMethodDrillRecoveryStructurePlanStartedCount = + QueueExecutionSummary.StartedTrustedTightMethodDrillRecoveryStructurePlanHandoffEventCount; + const int32 TrustedTightMethodDrillRecoveryStructurePlanPromotedCount = + QueueExecutionSummary.PromotedTrustedTightMethodDrillRecoveryStructurePlanHandoffEventCount; + const int32 TrustedTightMethodDrillRecoveryStructurePlanCompletedCount = + QueueExecutionSummary.CompletedTrustedTightMethodDrillRecoveryStructurePlanHandoffEventCount; + const int32 TrustedTightMethodDrillRecoveryStructurePlanOutstandingCount = FMath::Max( + 0, + TrustedTightMethodDrillRecoveryStructurePlanStartedCount + - TrustedTightMethodDrillRecoveryStructurePlanCompletedCount + ); + const int32 TrustedBroadMethodDrillRecoveryStructurePlanStartedCount = + QueueExecutionSummary.StartedTrustedBroadMethodDrillRecoveryStructurePlanHandoffEventCount; + const int32 TrustedBroadMethodDrillRecoveryStructurePlanPromotedCount = + QueueExecutionSummary.PromotedTrustedBroadMethodDrillRecoveryStructurePlanHandoffEventCount; + const int32 TrustedBroadMethodDrillRecoveryStructurePlanCompletedCount = + QueueExecutionSummary.CompletedTrustedBroadMethodDrillRecoveryStructurePlanHandoffEventCount; + const int32 TrustedBroadMethodDrillRecoveryStructurePlanOutstandingCount = FMath::Max( + 0, + TrustedBroadMethodDrillRecoveryStructurePlanStartedCount + - TrustedBroadMethodDrillRecoveryStructurePlanCompletedCount + ); if (MethodDrillRecoveryStartedCount > 0) { Snapshot.MethodDrillRecoveryHistoryCount += MethodDrillRecoveryStartedCount; @@ -7622,6 +7772,40 @@ FHyperTwistTrainingCoachMemorySnapshot UHyperTwistTrainingRepositoryLibrary::Der (static_cast(MethodDrillRecoveryCompletedCount) * 100.0f) / static_cast(MethodDrillRecoveryStartedCount); } + if ((TrustedTightMethodDrillRecoveryStructurePlanStartedCount + + TrustedTightMethodDrillRecoveryStructurePlanPromotedCount) + > 0) + { + const int32 TrustedTightMethodDrillRecoveryStructurePlanEventCount = + TrustedTightMethodDrillRecoveryStructurePlanStartedCount + + TrustedTightMethodDrillRecoveryStructurePlanPromotedCount; + Snapshot.TrustedTightMethodDrillRecoveryStructurePlanHistoryCount += + TrustedTightMethodDrillRecoveryStructurePlanEventCount; + Snapshot.TrustedTightMethodDrillRecoveryStructurePlanAverageOutcomeScore = + (static_cast(TrustedTightMethodDrillRecoveryStructurePlanCompletedCount) + * 100.0f) + / static_cast(TrustedTightMethodDrillRecoveryStructurePlanEventCount); + } + if ((TrustedBroadMethodDrillRecoveryStructurePlanStartedCount + + TrustedBroadMethodDrillRecoveryStructurePlanPromotedCount) + > 0) + { + const int32 TrustedBroadMethodDrillRecoveryStructurePlanEventCount = + TrustedBroadMethodDrillRecoveryStructurePlanStartedCount + + TrustedBroadMethodDrillRecoveryStructurePlanPromotedCount; + const int32 TrustedBroadMethodDrillRecoveryStructurePlanRedirectCount = FMath::Max( + 0, + TrustedBroadMethodDrillRecoveryStructurePlanPromotedCount + + TrustedBroadMethodDrillRecoveryStructurePlanOutstandingCount + - TrustedBroadMethodDrillRecoveryStructurePlanCompletedCount + ); + Snapshot.TrustedBroadMethodDrillRecoveryStructurePlanHistoryCount += + TrustedBroadMethodDrillRecoveryStructurePlanEventCount; + Snapshot.TrustedBroadMethodDrillRecoveryStructurePlanAverageOutcomeScore = + (static_cast(TrustedBroadMethodDrillRecoveryStructurePlanRedirectCount) + * 100.0f) + / static_cast(TrustedBroadMethodDrillRecoveryStructurePlanEventCount); + } const bool bStrongMethodDrillRecoveryHistory = MethodDrillRecoveryStartedCount >= 2 && MethodDrillRecoveryCompletedCount >= MethodDrillRecoveryOutstandingCount @@ -7727,6 +7911,48 @@ FHyperTwistTrainingCoachMemorySnapshot UHyperTwistTrainingRepositoryLibrary::Der 1, 3) : 0; + const bool bTrustedTightMethodDrillRecoveryStructurePlanHistory = + (TrustedTightMethodDrillRecoveryStructurePlanStartedCount + + TrustedTightMethodDrillRecoveryStructurePlanPromotedCount) + >= 2 + && TrustedTightMethodDrillRecoveryStructurePlanCompletedCount + >= TrustedTightMethodDrillRecoveryStructurePlanOutstandingCount + && Snapshot.TrustedTightMethodDrillRecoveryStructurePlanAverageOutcomeScore >= 60.0f; + const bool bTrustedBroadMethodDrillRecoveryStructurePlanHistory = + (TrustedBroadMethodDrillRecoveryStructurePlanStartedCount + + TrustedBroadMethodDrillRecoveryStructurePlanPromotedCount) + >= 2 + && (TrustedBroadMethodDrillRecoveryStructurePlanPromotedCount + + TrustedBroadMethodDrillRecoveryStructurePlanOutstandingCount) + >= TrustedBroadMethodDrillRecoveryStructurePlanCompletedCount + && Snapshot.TrustedBroadMethodDrillRecoveryStructurePlanAverageOutcomeScore >= 60.0f; + const int32 TrustedTightMethodDrillRecoveryStructurePlanLaunchBias = + bTrustedTightMethodDrillRecoveryStructurePlanHistory + ? FMath::Clamp( + (TrustedTightMethodDrillRecoveryStructurePlanCompletedCount * 2) + - TrustedTightMethodDrillRecoveryStructurePlanOutstandingCount + - TrustedTightMethodDrillRecoveryStructurePlanPromotedCount + + (Snapshot.TrustedTightMethodDrillRecoveryStructurePlanAverageOutcomeScore + >= 80.0f + ? 1 + : 0), + 1, + 3) + : 0; + const int32 TrustedBroadMethodDrillRecoveryStructurePlanPromoteBias = + bTrustedBroadMethodDrillRecoveryStructurePlanHistory + ? FMath::Clamp( + TrustedBroadMethodDrillRecoveryStructurePlanPromotedCount + + TrustedBroadMethodDrillRecoveryStructurePlanOutstandingCount + - TrustedBroadMethodDrillRecoveryStructurePlanCompletedCount + + (Snapshot.TrustedBroadMethodDrillRecoveryStructurePlanAverageOutcomeScore + >= 80.0f + ? 1 + : 0) + + (QueueExecutionSummary.bHasOutstandingDeferredWork ? 1 : 0), + 1, + 3) + : 0; const int32 StrongMethodDrillFollowUpPacketStartedCount = QueueExecutionSummary.StartedStrongMethodDrillFollowUpPacketQueuedHandoffEventCount + QueueExecutionSummary.StartedStrongMethodDrillFollowUpPacketFollowUpHandoffEventCount @@ -8030,6 +8256,30 @@ FHyperTwistTrainingCoachMemorySnapshot UHyperTwistTrainingRepositoryLibrary::Der Snapshot.PreferredQueueRecoveryActionSourceLabel = TEXT("coach-memory-method-drill-recovery-packet-weak"); } + else if (Snapshot.PreferredQueueRecoveryAction + == EHyperTwistTrainingQueueRecoveryAction::LaunchRecovery + && TrustedTightMethodDrillRecoveryStructurePlanLaunchBias > 0 + && (Snapshot.PreferredQueueRecoveryActionSourceLabel.IsEmpty() + || Snapshot.PreferredQueueRecoveryActionSourceLabel.StartsWith(TEXT("queue-history")) + || HyperTwistTrainingRepositoryLibraryInternal::IsMethodDrillDashboardHandoffSource( + Snapshot.PreferredQueueRecoveryActionSourceLabel) + || HyperTwistTrainingRepositoryLibraryInternal::IsMethodDrillRecoveryCoachMemorySource( + Snapshot.PreferredQueueRecoveryActionSourceLabel))) + { + Snapshot.PreferredQueueRecoveryActionSourceLabel = + TEXT("coach-memory-method-drill-recovery-structure-plan-tight-trusted-reliable"); + } + else if (Snapshot.PreferredQueueRecoveryAction + == EHyperTwistTrainingQueueRecoveryAction::PromoteDeferred + && TrustedBroadMethodDrillRecoveryStructurePlanPromoteBias > 0 + && (Snapshot.PreferredQueueRecoveryActionSourceLabel.IsEmpty() + || Snapshot.PreferredQueueRecoveryActionSourceLabel.StartsWith(TEXT("queue-history")) + || HyperTwistTrainingRepositoryLibraryInternal::IsMethodDrillRecoveryCoachMemorySource( + Snapshot.PreferredQueueRecoveryActionSourceLabel))) + { + Snapshot.PreferredQueueRecoveryActionSourceLabel = + TEXT("coach-memory-method-drill-recovery-structure-plan-broad-trusted-reliable"); + } else if (Snapshot.PreferredQueueRecoveryAction == EHyperTwistTrainingQueueRecoveryAction::LaunchRecovery && HyperTwistTrainingRepositoryLibraryInternal:: @@ -10012,6 +10262,9 @@ FHyperTwistTrainingCoachSessionQueueExecutionSummary UHyperTwistTrainingReposito const bool bTightMethodDrillRecoveryStructurePlanDashboardHandoff = HyperTwistTrainingRepositoryLibraryInternal::IsTightMethodDrillRecoveryStructurePlanDashboardHandoffSource( HistoryEntry.StartActionSourceLabel); + const bool bTrustedTightMethodDrillRecoveryStructurePlanDashboardHandoff = + HyperTwistTrainingRepositoryLibraryInternal::IsTrustedTightMethodDrillRecoveryStructurePlanDashboardHandoffSource( + HistoryEntry.StartActionSourceLabel); const bool bWeakMethodDrillRecoveryDashboardHandoff = HyperTwistTrainingRepositoryLibraryInternal::IsWeakMethodDrillRecoveryDashboardHandoffSource( HistoryEntry.StartActionSourceLabel); @@ -10027,6 +10280,9 @@ FHyperTwistTrainingCoachSessionQueueExecutionSummary UHyperTwistTrainingReposito const bool bBroadMethodDrillRecoveryStructurePlanDashboardHandoff = HyperTwistTrainingRepositoryLibraryInternal::IsBroadMethodDrillRecoveryStructurePlanDashboardHandoffSource( HistoryEntry.StartActionSourceLabel); + const bool bTrustedBroadMethodDrillRecoveryStructurePlanDashboardHandoff = + HyperTwistTrainingRepositoryLibraryInternal::IsTrustedBroadMethodDrillRecoveryStructurePlanDashboardHandoffSource( + HistoryEntry.StartActionSourceLabel); const bool bStrongRetainedMethodDrillRecoveryPostureDashboardHandoff = HyperTwistTrainingRepositoryLibraryInternal::IsStrongRetainedMethodDrillRecoveryPostureDashboardHandoffSource( HistoryEntry.StartActionSourceLabel); @@ -10068,6 +10324,10 @@ FHyperTwistTrainingCoachSessionQueueExecutionSummary UHyperTwistTrainingReposito { Summary.StartedTightMethodDrillRecoveryStructurePlanHandoffEventCount += 1; } + if (bTrustedTightMethodDrillRecoveryStructurePlanDashboardHandoff) + { + Summary.StartedTrustedTightMethodDrillRecoveryStructurePlanHandoffEventCount += 1; + } if (bWeakMethodDrillRecoveryPacketDashboardHandoff) { Summary.StartedWeakMethodDrillRecoveryPacketQueuedHandoffEventCount += 1; @@ -10080,6 +10340,10 @@ FHyperTwistTrainingCoachSessionQueueExecutionSummary UHyperTwistTrainingReposito { Summary.StartedBroadMethodDrillRecoveryStructurePlanHandoffEventCount += 1; } + if (bTrustedBroadMethodDrillRecoveryStructurePlanDashboardHandoff) + { + Summary.StartedTrustedBroadMethodDrillRecoveryStructurePlanHandoffEventCount += 1; + } } else if (DashboardHandoffKind == EHyperTwistTrainingCoachHandoffKind::FollowUp) { @@ -10116,6 +10380,10 @@ FHyperTwistTrainingCoachSessionQueueExecutionSummary UHyperTwistTrainingReposito { Summary.StartedTightMethodDrillRecoveryStructurePlanHandoffEventCount += 1; } + if (bTrustedTightMethodDrillRecoveryStructurePlanDashboardHandoff) + { + Summary.StartedTrustedTightMethodDrillRecoveryStructurePlanHandoffEventCount += 1; + } if (bWeakMethodDrillRecoveryPacketDashboardHandoff) { Summary.StartedWeakMethodDrillRecoveryPacketFollowUpHandoffEventCount += 1; @@ -10128,6 +10396,10 @@ FHyperTwistTrainingCoachSessionQueueExecutionSummary UHyperTwistTrainingReposito { Summary.StartedBroadMethodDrillRecoveryStructurePlanHandoffEventCount += 1; } + if (bTrustedBroadMethodDrillRecoveryStructurePlanDashboardHandoff) + { + Summary.StartedTrustedBroadMethodDrillRecoveryStructurePlanHandoffEventCount += 1; + } } else if (DashboardHandoffKind == EHyperTwistTrainingCoachHandoffKind::Recommended) { @@ -10164,6 +10436,10 @@ FHyperTwistTrainingCoachSessionQueueExecutionSummary UHyperTwistTrainingReposito { Summary.StartedTightMethodDrillRecoveryStructurePlanHandoffEventCount += 1; } + if (bTrustedTightMethodDrillRecoveryStructurePlanDashboardHandoff) + { + Summary.StartedTrustedTightMethodDrillRecoveryStructurePlanHandoffEventCount += 1; + } if (bWeakMethodDrillRecoveryPacketDashboardHandoff) { Summary.StartedWeakMethodDrillRecoveryPacketRecommendedHandoffEventCount += 1; @@ -10176,6 +10452,10 @@ FHyperTwistTrainingCoachSessionQueueExecutionSummary UHyperTwistTrainingReposito { Summary.StartedBroadMethodDrillRecoveryStructurePlanHandoffEventCount += 1; } + if (bTrustedBroadMethodDrillRecoveryStructurePlanDashboardHandoff) + { + Summary.StartedTrustedBroadMethodDrillRecoveryStructurePlanHandoffEventCount += 1; + } } if (bStrongMethodDrillRecoveryDashboardHandoff) { @@ -10239,6 +10519,11 @@ FHyperTwistTrainingCoachSessionQueueExecutionSummary UHyperTwistTrainingReposito { Summary.PromotedTightMethodDrillRecoveryStructurePlanHandoffEventCount += 1; } + if (HyperTwistTrainingRepositoryLibraryInternal::IsTrustedTightMethodDrillRecoveryStructurePlanDashboardHandoffSource( + HistoryEntry.StartActionSourceLabel)) + { + Summary.PromotedTrustedTightMethodDrillRecoveryStructurePlanHandoffEventCount += 1; + } if (HyperTwistTrainingRepositoryLibraryInternal::IsBroadMethodDrillRecoveryStructureDashboardHandoffSource( HistoryEntry.StartActionSourceLabel)) { @@ -10249,6 +10534,11 @@ FHyperTwistTrainingCoachSessionQueueExecutionSummary UHyperTwistTrainingReposito { Summary.PromotedBroadMethodDrillRecoveryStructurePlanHandoffEventCount += 1; } + if (HyperTwistTrainingRepositoryLibraryInternal::IsTrustedBroadMethodDrillRecoveryStructurePlanDashboardHandoffSource( + HistoryEntry.StartActionSourceLabel)) + { + Summary.PromotedTrustedBroadMethodDrillRecoveryStructurePlanHandoffEventCount += 1; + } break; case EHyperTwistTrainingCoachSessionQueueEventKind::Completed: Summary.CompletedEventCount += 1; @@ -10272,6 +10562,9 @@ FHyperTwistTrainingCoachSessionQueueExecutionSummary UHyperTwistTrainingReposito const bool bTightMethodDrillRecoveryStructurePlanDashboardHandoff = HyperTwistTrainingRepositoryLibraryInternal::IsTightMethodDrillRecoveryStructurePlanDashboardHandoffSource( HistoryEntry.StartActionSourceLabel); + const bool bTrustedTightMethodDrillRecoveryStructurePlanDashboardHandoff = + HyperTwistTrainingRepositoryLibraryInternal::IsTrustedTightMethodDrillRecoveryStructurePlanDashboardHandoffSource( + HistoryEntry.StartActionSourceLabel); const bool bWeakMethodDrillRecoveryDashboardHandoff = HyperTwistTrainingRepositoryLibraryInternal::IsWeakMethodDrillRecoveryDashboardHandoffSource( HistoryEntry.StartActionSourceLabel); @@ -10281,6 +10574,9 @@ FHyperTwistTrainingCoachSessionQueueExecutionSummary UHyperTwistTrainingReposito const bool bBroadMethodDrillRecoveryStructurePlanDashboardHandoff = HyperTwistTrainingRepositoryLibraryInternal::IsBroadMethodDrillRecoveryStructurePlanDashboardHandoffSource( HistoryEntry.StartActionSourceLabel); + const bool bTrustedBroadMethodDrillRecoveryStructurePlanDashboardHandoff = + HyperTwistTrainingRepositoryLibraryInternal::IsTrustedBroadMethodDrillRecoveryStructurePlanDashboardHandoffSource( + HistoryEntry.StartActionSourceLabel); const bool bStrongRetainedMethodDrillRecoveryPostureDashboardHandoff = HyperTwistTrainingRepositoryLibraryInternal::IsStrongRetainedMethodDrillRecoveryPostureDashboardHandoffSource( HistoryEntry.StartActionSourceLabel); @@ -10314,6 +10610,10 @@ FHyperTwistTrainingCoachSessionQueueExecutionSummary UHyperTwistTrainingReposito { Summary.CompletedTightMethodDrillRecoveryStructurePlanHandoffEventCount += 1; } + if (bTrustedTightMethodDrillRecoveryStructurePlanDashboardHandoff) + { + Summary.CompletedTrustedTightMethodDrillRecoveryStructurePlanHandoffEventCount += 1; + } if (bWeakMethodDrillRecoveryDashboardHandoff) { Summary.CompletedWeakMethodDrillRecoveryMemoryHandoffEventCount += 1; @@ -10326,6 +10626,10 @@ FHyperTwistTrainingCoachSessionQueueExecutionSummary UHyperTwistTrainingReposito { Summary.CompletedBroadMethodDrillRecoveryStructurePlanHandoffEventCount += 1; } + if (bTrustedBroadMethodDrillRecoveryStructurePlanDashboardHandoff) + { + Summary.CompletedTrustedBroadMethodDrillRecoveryStructurePlanHandoffEventCount += 1; + } if (bStrongRetainedMethodDrillRecoveryPostureDashboardHandoff) { Summary.CompletedStrongRetainedMethodDrillRecoveryPostureHandoffEventCount += 1; diff --git a/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingTypes.h b/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingTypes.h index 30a216d..725e777 100644 --- a/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingTypes.h +++ b/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingTypes.h @@ -1959,6 +1959,18 @@ struct FHyperTwistTrainingCoachMemorySnapshot UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") float MethodDrillRecoveryAverageOutcomeScore = 0.0f; + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + int32 TrustedTightMethodDrillRecoveryStructurePlanHistoryCount = 0; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + int32 TrustedBroadMethodDrillRecoveryStructurePlanHistoryCount = 0; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + float TrustedTightMethodDrillRecoveryStructurePlanAverageOutcomeScore = 0.0f; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + float TrustedBroadMethodDrillRecoveryStructurePlanAverageOutcomeScore = 0.0f; + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") bool bNeedsCoachIntervention = false; @@ -3744,6 +3756,15 @@ struct FHyperTwistTrainingCoachSessionQueueExecutionSummary UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") int32 CompletedTightMethodDrillRecoveryStructurePlanHandoffEventCount = 0; + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + int32 StartedTrustedTightMethodDrillRecoveryStructurePlanHandoffEventCount = 0; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + int32 PromotedTrustedTightMethodDrillRecoveryStructurePlanHandoffEventCount = 0; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + int32 CompletedTrustedTightMethodDrillRecoveryStructurePlanHandoffEventCount = 0; + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") int32 StartedBroadMethodDrillRecoveryStructurePlanHandoffEventCount = 0; @@ -3753,6 +3774,15 @@ struct FHyperTwistTrainingCoachSessionQueueExecutionSummary UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") int32 CompletedBroadMethodDrillRecoveryStructurePlanHandoffEventCount = 0; + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + int32 StartedTrustedBroadMethodDrillRecoveryStructurePlanHandoffEventCount = 0; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + int32 PromotedTrustedBroadMethodDrillRecoveryStructurePlanHandoffEventCount = 0; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + int32 CompletedTrustedBroadMethodDrillRecoveryStructurePlanHandoffEventCount = 0; + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") int32 CompletedMethodDrillQueuedHandoffEventCount = 0;