diff --git a/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistCoachDashboardWidget.cpp b/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistCoachDashboardWidget.cpp index 8763bd8..0f1d7ff 100644 --- a/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistCoachDashboardWidget.cpp +++ b/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistCoachDashboardWidget.cpp @@ -341,7 +341,10 @@ namespace HyperTwistCoachDashboardWidgetInternal return SourceLabel == TEXT("recommendation-history-accepted-aligned-tight-follow-up-packet-outcome") || SourceLabel == TEXT("coach-memory-aligned-follow-up-packet-structure-tight-follow-up") - || SourceLabel.StartsWith(TEXT("coach-memory-dashboard-aligned-follow-up-packet-tight-")); + || SourceLabel.StartsWith(TEXT("coach-memory-dashboard-aligned-follow-up-packet-tight-")) + || SourceLabel == TEXT("dashboard-handoff-accepted-aligned-follow-up-packet-tight-queued") + || SourceLabel == TEXT("dashboard-handoff-accepted-aligned-follow-up-packet-tight-follow-up") + || SourceLabel == TEXT("dashboard-handoff-accepted-aligned-follow-up-packet-tight-recommended"); } bool IsAlignedBroadRecommendedPacketSourceLabel(const FString& SourceLabel) @@ -349,7 +352,10 @@ namespace HyperTwistCoachDashboardWidgetInternal return SourceLabel == TEXT("recommendation-history-accepted-aligned-broad-recommended-packet-outcome") || SourceLabel == TEXT("coach-memory-aligned-follow-up-packet-structure-broad-recommended") - || SourceLabel.StartsWith(TEXT("coach-memory-dashboard-aligned-follow-up-packet-broad-")); + || SourceLabel.StartsWith(TEXT("coach-memory-dashboard-aligned-follow-up-packet-broad-")) + || SourceLabel == TEXT("dashboard-handoff-accepted-aligned-follow-up-packet-broad-queued") + || SourceLabel == TEXT("dashboard-handoff-accepted-aligned-follow-up-packet-broad-follow-up") + || SourceLabel == TEXT("dashboard-handoff-accepted-aligned-follow-up-packet-broad-recommended"); } bool IsAlignedTightFollowUpGuidanceSourceLabel(const FString& SourceLabel) @@ -408,6 +414,14 @@ namespace HyperTwistCoachDashboardWidgetInternal { return TEXT("accepted aligned tight follow-up-packet handoff history"); } + if (SourceLabel == TEXT("dashboard-handoff-accepted-aligned-follow-up-packet-tight-queued") + || SourceLabel + == TEXT("dashboard-handoff-accepted-aligned-follow-up-packet-tight-follow-up") + || SourceLabel + == TEXT("dashboard-handoff-accepted-aligned-follow-up-packet-tight-recommended")) + { + return TEXT("accepted aligned tight follow-up-packet outcome trust"); + } if (SourceLabel == TEXT("recommendation-history-accepted-aligned-tight-follow-up-packet-outcome")) { @@ -424,6 +438,14 @@ namespace HyperTwistCoachDashboardWidgetInternal { return TEXT("accepted aligned broad recommended-packet handoff history"); } + if (SourceLabel == TEXT("dashboard-handoff-accepted-aligned-follow-up-packet-broad-queued") + || SourceLabel + == TEXT("dashboard-handoff-accepted-aligned-follow-up-packet-broad-follow-up") + || SourceLabel + == TEXT("dashboard-handoff-accepted-aligned-follow-up-packet-broad-recommended")) + { + return TEXT("accepted aligned broad recommended-packet outcome trust"); + } if (SourceLabel == TEXT("recommendation-history-accepted-aligned-broad-recommended-packet-outcome")) { @@ -1020,8 +1042,38 @@ namespace HyperTwistCoachDashboardWidgetInternal const bool bReliableTrustedMethodDrillRecoveryStructurePlanDriven = false, const bool bReliableTrustedMethodDrillRecoveryStructurePlanAlignmentDriven = false, const bool bAlignedTightFollowUpPacketAcceptedDriven = false, - const bool bAlignedBroadRecommendedPacketAcceptedDriven = false) + const bool bAlignedBroadRecommendedPacketAcceptedDriven = false, + const bool bAcceptedAlignedTightFollowUpPacketOutcomeDriven = false, + const bool bAcceptedAlignedBroadRecommendedPacketOutcomeDriven = false) { + if (bAcceptedAlignedTightFollowUpPacketOutcomeDriven) + { + switch (HandoffKind) + { + case EHyperTwistTrainingCoachHandoffKind::Queue: + return TEXT("dashboard-handoff-accepted-aligned-follow-up-packet-tight-queued"); + case EHyperTwistTrainingCoachHandoffKind::FollowUp: + return TEXT("dashboard-handoff-accepted-aligned-follow-up-packet-tight-follow-up"); + case EHyperTwistTrainingCoachHandoffKind::Recommended: + return TEXT("dashboard-handoff-accepted-aligned-follow-up-packet-tight-recommended"); + default: + return FString(); + } + } + if (bAcceptedAlignedBroadRecommendedPacketOutcomeDriven) + { + switch (HandoffKind) + { + case EHyperTwistTrainingCoachHandoffKind::Queue: + return TEXT("dashboard-handoff-accepted-aligned-follow-up-packet-broad-queued"); + case EHyperTwistTrainingCoachHandoffKind::FollowUp: + return TEXT("dashboard-handoff-accepted-aligned-follow-up-packet-broad-follow-up"); + case EHyperTwistTrainingCoachHandoffKind::Recommended: + return TEXT("dashboard-handoff-accepted-aligned-follow-up-packet-broad-recommended"); + default: + return FString(); + } + } if (bAlignedTightFollowUpPacketAcceptedDriven) { switch (HandoffKind) @@ -6478,6 +6530,12 @@ FString UHyperTwistCoachDashboardWidget::ResolveDashboardHandoffStartActionSourc const bool bUseAlignedBroadPacketAcceptedLabel = bDisplayedCoachHandoffRecommendationUsedAlignedBroadPacketAcceptedHistory && DisplayedCoachHandoffRecommendationKind == HandoffKind; + const bool bUseAcceptedAlignedTightPacketOutcomeLabel = + bDisplayedCoachHandoffRecommendationUsedAcceptedAlignedTightPacketOutcomeTrust + && DisplayedCoachHandoffRecommendationKind == HandoffKind; + const bool bUseAcceptedAlignedBroadPacketOutcomeLabel = + bDisplayedCoachHandoffRecommendationUsedAcceptedAlignedBroadPacketOutcomeTrust + && DisplayedCoachHandoffRecommendationKind == HandoffKind; return HyperTwistCoachDashboardWidgetInternal::DashboardHandoffSourceLabel( HandoffKind, bUseDeferredFirstSuppressionLabel, @@ -6492,7 +6550,9 @@ FString UHyperTwistCoachDashboardWidget::ResolveDashboardHandoffStartActionSourc false, false, bUseAlignedTightPacketAcceptedLabel, - bUseAlignedBroadPacketAcceptedLabel + bUseAlignedBroadPacketAcceptedLabel, + bUseAcceptedAlignedTightPacketOutcomeLabel, + bUseAcceptedAlignedBroadPacketOutcomeLabel ); } @@ -7169,10 +7229,97 @@ FHyperTwistCoachDashboardQueueRecoveryWeighting UHyperTwistCoachDashboardWidget: FHyperTwistCoachDashboardQueueRecoveryWeighting Weighting; float PromoteDeltaAccumulator = 0.0f; float LaunchDeltaAccumulator = 0.0f; - const HyperTwistCoachDashboardWidgetInternal::FHandoffHistoryDashboardBias HandoffHistoryBias = + const bool bQueueLooksFollowUpOrRecovery = + CachedCoachPanelState.NextQueueSourceLabel.Contains(TEXT("follow-up")) + || CachedCoachPanelState.NextQueueSourceLabel.Contains(TEXT("queue-recovery")) + || CachedCoachPanelState.NextQueueSourceLabel.Contains(TEXT("closure_history_follow_up")); + const bool bQueueLooksRecommendedOrPrimary = + CachedCoachPanelState.NextQueueSourceLabel.Contains(TEXT("primary")) + || CachedCoachPanelState.NextQueueSourceLabel.Contains(TEXT("recommended")) + || CachedCoachPanelState.NextQueueSourceLabel.Contains(TEXT("closure_history_recommended")); + HyperTwistCoachDashboardWidgetInternal::FHandoffHistoryDashboardBias HandoffHistoryBias = HyperTwistCoachDashboardWidgetInternal::DeriveHandoffHistoryDashboardBias( HandoffHistoryEntries ); + const int32 AcceptedAlignedTightPacketOutcomeTrustBias = + (CachedCoachPanelState.AcceptedAlignedTightFollowUpPacketOutcomeHistoryCount >= 2 + && CachedCoachPanelState.AcceptedAlignedTightFollowUpPacketOutcomeAverageScore >= 60.0f) + ? FMath::Clamp( + CachedCoachPanelState.AcceptedAlignedTightFollowUpPacketOutcomeHistoryCount + - CachedCoachPanelState.AcceptedAlignedBroadRecommendedPacketOutcomeHistoryCount + + (CachedCoachPanelState.AcceptedAlignedTightFollowUpPacketOutcomeAverageScore >= 80.0f + ? 1 + : 0), + 1, + 4) + : 0; + const int32 AcceptedAlignedBroadPacketOutcomeTrustBias = + (CachedCoachPanelState.AcceptedAlignedBroadRecommendedPacketOutcomeHistoryCount >= 2 + && CachedCoachPanelState.AcceptedAlignedBroadRecommendedPacketOutcomeAverageScore >= 58.0f) + ? FMath::Clamp( + CachedCoachPanelState.AcceptedAlignedBroadRecommendedPacketOutcomeHistoryCount + - CachedCoachPanelState.AcceptedAlignedTightFollowUpPacketOutcomeHistoryCount + + (CachedCoachPanelState.AcceptedAlignedBroadRecommendedPacketOutcomeAverageScore >= 78.0f + ? 1 + : 0), + 1, + 4) + : 0; + if (AcceptedAlignedTightPacketOutcomeTrustBias > AcceptedAlignedBroadPacketOutcomeTrustBias) + { + HandoffHistoryBias.FollowUpScore += AcceptedAlignedTightPacketOutcomeTrustBias * 4; + if (bQueueLooksFollowUpOrRecovery) + { + HandoffHistoryBias.QueueScore += AcceptedAlignedTightPacketOutcomeTrustBias * 2; + } + } + else if (AcceptedAlignedBroadPacketOutcomeTrustBias > AcceptedAlignedTightPacketOutcomeTrustBias) + { + HandoffHistoryBias.RecommendedScore += AcceptedAlignedBroadPacketOutcomeTrustBias * 4; + if (bQueueLooksRecommendedOrPrimary) + { + HandoffHistoryBias.QueueScore += AcceptedAlignedBroadPacketOutcomeTrustBias * 2; + } + } + { + HandoffHistoryBias.PreferredKind = + HyperTwistCoachDashboardWidgetInternal::EHandoffRecommendationKind::None; + int32 BestScore = 0; + int32 BestAcceptedDeltaCount = 0; + auto ConsiderKind = [&BestScore, &BestAcceptedDeltaCount, &HandoffHistoryBias]( + const HyperTwistCoachDashboardWidgetInternal::EHandoffRecommendationKind Kind, + const int32 Score, + const int32 AcceptedDeltaCount) + { + if (Score <= 0) + { + return; + } + + if (Score > BestScore + || (Score == BestScore && AcceptedDeltaCount > BestAcceptedDeltaCount)) + { + BestScore = Score; + BestAcceptedDeltaCount = AcceptedDeltaCount; + HandoffHistoryBias.PreferredKind = Kind; + } + }; + + ConsiderKind( + HyperTwistCoachDashboardWidgetInternal::EHandoffRecommendationKind::Queue, + HandoffHistoryBias.QueueScore, + HandoffHistoryBias.QueueAcceptedDeltaCount); + ConsiderKind( + HyperTwistCoachDashboardWidgetInternal::EHandoffRecommendationKind::FollowUp, + HandoffHistoryBias.FollowUpScore, + HandoffHistoryBias.FollowUpAcceptedDeltaCount + + CachedCoachPanelState.AcceptedAlignedTightFollowUpPacketOutcomeHistoryCount); + ConsiderKind( + HyperTwistCoachDashboardWidgetInternal::EHandoffRecommendationKind::Recommended, + HandoffHistoryBias.RecommendedScore, + HandoffHistoryBias.RecommendedAcceptedDeltaCount + + CachedCoachPanelState.AcceptedAlignedBroadRecommendedPacketOutcomeHistoryCount); + } const HyperTwistCoachDashboardWidgetInternal::FMethodDrillRecoveryPacketDashboardBias MethodDrillRecoveryPacketBias = HyperTwistCoachDashboardWidgetInternal::DeriveMethodDrillRecoveryPacketDashboardBias( @@ -9745,7 +9892,7 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation() CachedCoachPanelState.NextQueueSourceLabel.Contains(TEXT("primary")) || CachedCoachPanelState.NextQueueSourceLabel.Contains(TEXT("recommended")) || CachedCoachPanelState.NextQueueSourceLabel.Contains(TEXT("closure_history_recommended")); - const HyperTwistCoachDashboardWidgetInternal::FHandoffHistoryDashboardBias HandoffHistoryBias = + HyperTwistCoachDashboardWidgetInternal::FHandoffHistoryDashboardBias HandoffHistoryBias = HyperTwistCoachDashboardWidgetInternal::DeriveHandoffHistoryDashboardBias( HandoffHistoryEntries ); @@ -9766,6 +9913,8 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation() bDisplayedCoachHandoffRecommendationUsedMethodDrillWeighting = false; bDisplayedCoachHandoffRecommendationUsedAlignedTightPacketAcceptedHistory = false; bDisplayedCoachHandoffRecommendationUsedAlignedBroadPacketAcceptedHistory = false; + bDisplayedCoachHandoffRecommendationUsedAcceptedAlignedTightPacketOutcomeTrust = false; + bDisplayedCoachHandoffRecommendationUsedAcceptedAlignedBroadPacketOutcomeTrust = false; DisplayedCoachHandoffMethodDrillRecoveryMemoryStartActionSourceLabel.Reset(); FString CoachHandoffRecommendationStatusLine; FString CoachHandoffRecommendationDetailLine; @@ -9775,6 +9924,91 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation() && CachedCoachPanelState.bHasFollowUpGuidance; const bool bRecommendedReadyForHandoff = CachedCoachPanelState.bCanStartCoachRecommendedRun; + const int32 AcceptedAlignedTightPacketOutcomeTrustBias = + (CachedCoachPanelState.AcceptedAlignedTightFollowUpPacketOutcomeHistoryCount >= 2 + && CachedCoachPanelState.AcceptedAlignedTightFollowUpPacketOutcomeAverageScore + >= 60.0f) + ? FMath::Clamp( + CachedCoachPanelState.AcceptedAlignedTightFollowUpPacketOutcomeHistoryCount + - CachedCoachPanelState.AcceptedAlignedBroadRecommendedPacketOutcomeHistoryCount + + (CachedCoachPanelState.AcceptedAlignedTightFollowUpPacketOutcomeAverageScore + >= 80.0f + ? 1 + : 0), + 1, + 4) + : 0; + const int32 AcceptedAlignedBroadPacketOutcomeTrustBias = + (CachedCoachPanelState.AcceptedAlignedBroadRecommendedPacketOutcomeHistoryCount >= 2 + && CachedCoachPanelState.AcceptedAlignedBroadRecommendedPacketOutcomeAverageScore + >= 58.0f) + ? FMath::Clamp( + CachedCoachPanelState.AcceptedAlignedBroadRecommendedPacketOutcomeHistoryCount + - CachedCoachPanelState.AcceptedAlignedTightFollowUpPacketOutcomeHistoryCount + + (CachedCoachPanelState.AcceptedAlignedBroadRecommendedPacketOutcomeAverageScore + >= 78.0f + ? 1 + : 0), + 1, + 4) + : 0; + if (AcceptedAlignedTightPacketOutcomeTrustBias + > AcceptedAlignedBroadPacketOutcomeTrustBias) + { + HandoffHistoryBias.FollowUpScore += AcceptedAlignedTightPacketOutcomeTrustBias * 4; + if (bQueueReadyForHandoff && bQueueLooksFollowUpOrRecovery) + { + HandoffHistoryBias.QueueScore += AcceptedAlignedTightPacketOutcomeTrustBias * 2; + } + } + else if (AcceptedAlignedBroadPacketOutcomeTrustBias + > AcceptedAlignedTightPacketOutcomeTrustBias) + { + HandoffHistoryBias.RecommendedScore += AcceptedAlignedBroadPacketOutcomeTrustBias * 4; + if (bQueueReadyForHandoff && bQueueLooksRecommendedOrPrimary) + { + HandoffHistoryBias.QueueScore += AcceptedAlignedBroadPacketOutcomeTrustBias * 2; + } + } + { + HandoffHistoryBias.PreferredKind = + HyperTwistCoachDashboardWidgetInternal::EHandoffRecommendationKind::None; + int32 BestScore = 0; + int32 BestAcceptedDeltaCount = 0; + auto ConsiderKind = [&BestScore, &BestAcceptedDeltaCount, &HandoffHistoryBias]( + const HyperTwistCoachDashboardWidgetInternal::EHandoffRecommendationKind Kind, + const int32 Score, + const int32 AcceptedDeltaCount) + { + if (Score <= 0) + { + return; + } + + if (Score > BestScore + || (Score == BestScore && AcceptedDeltaCount > BestAcceptedDeltaCount)) + { + BestScore = Score; + BestAcceptedDeltaCount = AcceptedDeltaCount; + HandoffHistoryBias.PreferredKind = Kind; + } + }; + + ConsiderKind( + HyperTwistCoachDashboardWidgetInternal::EHandoffRecommendationKind::Queue, + HandoffHistoryBias.QueueScore, + HandoffHistoryBias.QueueAcceptedDeltaCount); + ConsiderKind( + HyperTwistCoachDashboardWidgetInternal::EHandoffRecommendationKind::FollowUp, + HandoffHistoryBias.FollowUpScore, + HandoffHistoryBias.FollowUpAcceptedDeltaCount + + CachedCoachPanelState.AcceptedAlignedTightFollowUpPacketOutcomeHistoryCount); + ConsiderKind( + HyperTwistCoachDashboardWidgetInternal::EHandoffRecommendationKind::Recommended, + HandoffHistoryBias.RecommendedScore, + HandoffHistoryBias.RecommendedAcceptedDeltaCount + + CachedCoachPanelState.AcceptedAlignedBroadRecommendedPacketOutcomeHistoryCount); + } bool bHandoffRecommendationUsedHistory = false; bool bHandoffRecommendationUsedDeferredOverflowHistory = false; bool bHandoffRecommendationUsedDeferredFirstSuppressionSignal = false; @@ -10531,6 +10765,22 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation() || (DisplayedCoachHandoffRecommendationKind == EHyperTwistTrainingCoachHandoffKind::Queue && bQueueLooksRecommendedOrPrimary)); + bDisplayedCoachHandoffRecommendationUsedAcceptedAlignedTightPacketOutcomeTrust = + AcceptedAlignedTightPacketOutcomeTrustBias + > AcceptedAlignedBroadPacketOutcomeTrustBias + && (DisplayedCoachHandoffRecommendationKind + == EHyperTwistTrainingCoachHandoffKind::FollowUp + || (DisplayedCoachHandoffRecommendationKind + == EHyperTwistTrainingCoachHandoffKind::Queue + && bQueueLooksFollowUpOrRecovery)); + bDisplayedCoachHandoffRecommendationUsedAcceptedAlignedBroadPacketOutcomeTrust = + AcceptedAlignedBroadPacketOutcomeTrustBias + > AcceptedAlignedTightPacketOutcomeTrustBias + && (DisplayedCoachHandoffRecommendationKind + == EHyperTwistTrainingCoachHandoffKind::Recommended + || (DisplayedCoachHandoffRecommendationKind + == EHyperTwistTrainingCoachHandoffKind::Queue + && bQueueLooksRecommendedOrPrimary)); const bool bHandoffRecommendationUsedStrongMethodDrillFollowUpPacket = bHandoffRecommendationUsedMethodDrillWeighting && HandoffRecommendationKind @@ -10735,6 +10985,13 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation() HandoffHistoryBias.AlignedTightFollowUpPacketAcceptedDeltaCount, HandoffHistoryBias.AlignedBroadRecommendedPacketAcceptedDeltaCount ); + CoachHandoffRecommendationDetailLine += FString::Printf( + TEXT(" | accepted aligned packet outcomes tight/broad %d/%d avg %.1f/%.1f"), + CachedCoachPanelState.AcceptedAlignedTightFollowUpPacketOutcomeHistoryCount, + CachedCoachPanelState.AcceptedAlignedBroadRecommendedPacketOutcomeHistoryCount, + CachedCoachPanelState.AcceptedAlignedTightFollowUpPacketOutcomeAverageScore, + CachedCoachPanelState.AcceptedAlignedBroadRecommendedPacketOutcomeAverageScore + ); if (HandoffHistoryBias.AlignedTightFollowUpOutcomeAcceptedDeltaCount > 0 && HandoffHistoryBias.PreferredKind == HyperTwistCoachDashboardWidgetInternal::EHandoffRecommendationKind::FollowUp) @@ -10763,6 +11020,17 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation() CoachHandoffRecommendationDetailLine += TEXT(" | Accepted aligned broad packet recommended-first handoffs are reinforcing the retained broad branch."); } + if (bDisplayedCoachHandoffRecommendationUsedAcceptedAlignedTightPacketOutcomeTrust) + { + CoachHandoffRecommendationDetailLine += + TEXT(" | Accepted aligned tight packet outcome trust is tipping this handoff toward narrow continuation."); + } + else if ( + bDisplayedCoachHandoffRecommendationUsedAcceptedAlignedBroadPacketOutcomeTrust) + { + CoachHandoffRecommendationDetailLine += + TEXT(" | Accepted aligned broad packet outcome trust is tipping this handoff back toward broader redirect."); + } CoachHandoffRecommendationDetailLine += FString::Printf( TEXT(" | upstream drill recovery strong/weak/history %d/%d/%d avg %.1f"), CachedCoachPanelState.StrongMethodDrillRecoveryHistoryCount, diff --git a/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingCoachLibrary.cpp b/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingCoachLibrary.cpp index 332352a..8974b78 100644 --- a/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingCoachLibrary.cpp +++ b/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingCoachLibrary.cpp @@ -339,7 +339,13 @@ namespace HyperTwistTrainingCoachLibraryInternal || SourceLabel.StartsWith(TEXT("coach-memory-dashboard-aligned-follow-up-packet-tight-")) || SourceLabel == TEXT("dashboard-handoff-aligned-follow-up-packet-tight-queued") || SourceLabel == TEXT("dashboard-handoff-aligned-follow-up-packet-tight-follow-up") - || SourceLabel == TEXT("dashboard-handoff-aligned-follow-up-packet-tight-recommended"); + || SourceLabel == TEXT("dashboard-handoff-aligned-follow-up-packet-tight-recommended") + || SourceLabel + == TEXT("dashboard-handoff-accepted-aligned-follow-up-packet-tight-queued") + || SourceLabel + == TEXT("dashboard-handoff-accepted-aligned-follow-up-packet-tight-follow-up") + || SourceLabel + == TEXT("dashboard-handoff-accepted-aligned-follow-up-packet-tight-recommended"); } bool IsAlignedBroadRecommendedGuidanceSourceLabel(const FString& SourceLabel) @@ -352,7 +358,13 @@ namespace HyperTwistTrainingCoachLibraryInternal || SourceLabel.StartsWith(TEXT("coach-memory-dashboard-aligned-follow-up-packet-broad-")) || SourceLabel == TEXT("dashboard-handoff-aligned-follow-up-packet-broad-queued") || SourceLabel == TEXT("dashboard-handoff-aligned-follow-up-packet-broad-follow-up") - || SourceLabel == TEXT("dashboard-handoff-aligned-follow-up-packet-broad-recommended"); + || SourceLabel == TEXT("dashboard-handoff-aligned-follow-up-packet-broad-recommended") + || SourceLabel + == TEXT("dashboard-handoff-accepted-aligned-follow-up-packet-broad-queued") + || SourceLabel + == TEXT("dashboard-handoff-accepted-aligned-follow-up-packet-broad-follow-up") + || SourceLabel + == TEXT("dashboard-handoff-accepted-aligned-follow-up-packet-broad-recommended"); } FString DescribeCoachMemorySourceLabel(const FString& SourceLabel) @@ -407,6 +419,14 @@ namespace HyperTwistTrainingCoachLibraryInternal } if (IsAlignedTightFollowUpGuidanceSourceLabel(SourceLabel)) { + if (SourceLabel == TEXT("dashboard-handoff-accepted-aligned-follow-up-packet-tight-queued") + || SourceLabel + == TEXT("dashboard-handoff-accepted-aligned-follow-up-packet-tight-follow-up") + || SourceLabel + == TEXT("dashboard-handoff-accepted-aligned-follow-up-packet-tight-recommended")) + { + return TEXT("accepted aligned tight follow-up-packet outcome trust"); + } if (SourceLabel.StartsWith(TEXT("coach-memory-dashboard-aligned-follow-up-packet-tight-")) || SourceLabel == TEXT("dashboard-handoff-aligned-follow-up-packet-tight-queued") || SourceLabel == TEXT("dashboard-handoff-aligned-follow-up-packet-tight-follow-up") @@ -426,6 +446,14 @@ namespace HyperTwistTrainingCoachLibraryInternal } if (IsAlignedBroadRecommendedGuidanceSourceLabel(SourceLabel)) { + if (SourceLabel == TEXT("dashboard-handoff-accepted-aligned-follow-up-packet-broad-queued") + || SourceLabel + == TEXT("dashboard-handoff-accepted-aligned-follow-up-packet-broad-follow-up") + || SourceLabel + == TEXT("dashboard-handoff-accepted-aligned-follow-up-packet-broad-recommended")) + { + return TEXT("accepted aligned broad recommended-packet outcome trust"); + } if (SourceLabel.StartsWith(TEXT("coach-memory-dashboard-aligned-follow-up-packet-broad-")) || SourceLabel == TEXT("dashboard-handoff-aligned-follow-up-packet-broad-queued") || SourceLabel == TEXT("dashboard-handoff-aligned-follow-up-packet-broad-follow-up") diff --git a/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingRepositoryLibrary.cpp b/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingRepositoryLibrary.cpp index aab165c..de3b66c 100644 --- a/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingRepositoryLibrary.cpp +++ b/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingRepositoryLibrary.cpp @@ -137,14 +137,26 @@ namespace HyperTwistTrainingRepositoryLibraryInternal { return SourceLabel == TEXT("dashboard-handoff-aligned-follow-up-packet-tight-queued") || SourceLabel == TEXT("dashboard-handoff-aligned-follow-up-packet-tight-follow-up") - || SourceLabel == TEXT("dashboard-handoff-aligned-follow-up-packet-tight-recommended"); + || SourceLabel == TEXT("dashboard-handoff-aligned-follow-up-packet-tight-recommended") + || SourceLabel + == TEXT("dashboard-handoff-accepted-aligned-follow-up-packet-tight-queued") + || SourceLabel + == TEXT("dashboard-handoff-accepted-aligned-follow-up-packet-tight-follow-up") + || SourceLabel + == TEXT("dashboard-handoff-accepted-aligned-follow-up-packet-tight-recommended"); } bool IsAlignedBroadRecommendedPacketDashboardHandoffSource(const FString& SourceLabel) { return SourceLabel == TEXT("dashboard-handoff-aligned-follow-up-packet-broad-queued") || SourceLabel == TEXT("dashboard-handoff-aligned-follow-up-packet-broad-follow-up") - || SourceLabel == TEXT("dashboard-handoff-aligned-follow-up-packet-broad-recommended"); + || SourceLabel == TEXT("dashboard-handoff-aligned-follow-up-packet-broad-recommended") + || SourceLabel + == TEXT("dashboard-handoff-accepted-aligned-follow-up-packet-broad-queued") + || SourceLabel + == TEXT("dashboard-handoff-accepted-aligned-follow-up-packet-broad-follow-up") + || SourceLabel + == TEXT("dashboard-handoff-accepted-aligned-follow-up-packet-broad-recommended"); } bool IsStrongMethodDrillRecoveryDashboardHandoffSource(const FString& SourceLabel) @@ -455,7 +467,13 @@ namespace HyperTwistTrainingRepositoryLibraryInternal || SourceLabel.StartsWith(TEXT("coach-memory-dashboard-aligned-follow-up-packet-tight-")) || SourceLabel == TEXT("dashboard-handoff-aligned-follow-up-packet-tight-queued") || SourceLabel == TEXT("dashboard-handoff-aligned-follow-up-packet-tight-follow-up") - || SourceLabel == TEXT("dashboard-handoff-aligned-follow-up-packet-tight-recommended"); + || SourceLabel == TEXT("dashboard-handoff-aligned-follow-up-packet-tight-recommended") + || SourceLabel + == TEXT("dashboard-handoff-accepted-aligned-follow-up-packet-tight-queued") + || SourceLabel + == TEXT("dashboard-handoff-accepted-aligned-follow-up-packet-tight-follow-up") + || SourceLabel + == TEXT("dashboard-handoff-accepted-aligned-follow-up-packet-tight-recommended"); } bool IsAcceptedAlignedBroadRecommendedPacketOutcomeSource(const FString& SourceLabel) @@ -465,7 +483,13 @@ namespace HyperTwistTrainingRepositoryLibraryInternal || SourceLabel.StartsWith(TEXT("coach-memory-dashboard-aligned-follow-up-packet-broad-")) || SourceLabel == TEXT("dashboard-handoff-aligned-follow-up-packet-broad-queued") || SourceLabel == TEXT("dashboard-handoff-aligned-follow-up-packet-broad-follow-up") - || SourceLabel == TEXT("dashboard-handoff-aligned-follow-up-packet-broad-recommended"); + || SourceLabel == TEXT("dashboard-handoff-aligned-follow-up-packet-broad-recommended") + || SourceLabel + == TEXT("dashboard-handoff-accepted-aligned-follow-up-packet-broad-queued") + || SourceLabel + == TEXT("dashboard-handoff-accepted-aligned-follow-up-packet-broad-follow-up") + || SourceLabel + == TEXT("dashboard-handoff-accepted-aligned-follow-up-packet-broad-recommended"); } FString ResolveMethodDrillFollowUpPacketStructureRecoverySourceLabel( @@ -579,6 +603,10 @@ namespace HyperTwistTrainingRepositoryLibraryInternal || SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-packet-weak-queued") || SourceLabel == TEXT("dashboard-handoff-aligned-follow-up-packet-tight-queued") || SourceLabel == TEXT("dashboard-handoff-aligned-follow-up-packet-broad-queued") + || SourceLabel + == TEXT("dashboard-handoff-accepted-aligned-follow-up-packet-tight-queued") + || SourceLabel + == TEXT("dashboard-handoff-accepted-aligned-follow-up-packet-broad-queued") || SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-posture-strong-queued") || SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-posture-weak-queued")) { @@ -604,6 +632,10 @@ namespace HyperTwistTrainingRepositoryLibraryInternal || SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-packet-weak-follow-up") || SourceLabel == TEXT("dashboard-handoff-aligned-follow-up-packet-tight-follow-up") || SourceLabel == TEXT("dashboard-handoff-aligned-follow-up-packet-broad-follow-up") + || SourceLabel + == TEXT("dashboard-handoff-accepted-aligned-follow-up-packet-tight-follow-up") + || SourceLabel + == TEXT("dashboard-handoff-accepted-aligned-follow-up-packet-broad-follow-up") || SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-posture-strong-follow-up") || SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-posture-weak-follow-up")) { @@ -629,6 +661,10 @@ namespace HyperTwistTrainingRepositoryLibraryInternal || SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-packet-weak-recommended") || SourceLabel == TEXT("dashboard-handoff-aligned-follow-up-packet-tight-recommended") || SourceLabel == TEXT("dashboard-handoff-aligned-follow-up-packet-broad-recommended") + || SourceLabel + == TEXT("dashboard-handoff-accepted-aligned-follow-up-packet-tight-recommended") + || SourceLabel + == TEXT("dashboard-handoff-accepted-aligned-follow-up-packet-broad-recommended") || SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-posture-strong-recommended") || SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-posture-weak-recommended")) { diff --git a/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistCoachDashboardWidget.h b/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistCoachDashboardWidget.h index 179f2d1..de4bd2a 100644 --- a/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistCoachDashboardWidget.h +++ b/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistCoachDashboardWidget.h @@ -1618,6 +1618,8 @@ private: bool bDisplayedCoachHandoffRecommendationUsedMethodDrillWeighting = false; bool bDisplayedCoachHandoffRecommendationUsedAlignedTightPacketAcceptedHistory = false; bool bDisplayedCoachHandoffRecommendationUsedAlignedBroadPacketAcceptedHistory = false; + bool bDisplayedCoachHandoffRecommendationUsedAcceptedAlignedTightPacketOutcomeTrust = false; + bool bDisplayedCoachHandoffRecommendationUsedAcceptedAlignedBroadPacketOutcomeTrust = false; FString DisplayedCoachHandoffMethodDrillRecoveryMemoryStartActionSourceLabel; EHyperTwistCoachDashboardGuidancePreviewLane ActiveGuidancePreviewLane = EHyperTwistCoachDashboardGuidancePreviewLane::None;