diff --git a/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistCoachDashboardWidget.cpp b/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistCoachDashboardWidget.cpp index 56d7047..8c61eab 100644 --- a/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistCoachDashboardWidget.cpp +++ b/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistCoachDashboardWidget.cpp @@ -5837,6 +5837,7 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation() bool bHandoffRecommendationUsedHistory = false; bool bHandoffRecommendationUsedDeferredOverflowHistory = false; bool bHandoffRecommendationUsedDeferredFirstSuppressionSignal = false; + bool bHandoffRecommendationUsedMethodDrillWeighting = false; if (!bCanUseCoachHandoff) { CoachHandoffRecommendationStatusLine = @@ -5876,6 +5877,102 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation() bHandoffRecommendationUsedDeferredFirstSuppressionSignal = true; } } + else if (bCanLaunchMethodDrillFollowUp + && MethodDrillFollowUpWeighting.IsStructurallyValid() + && MethodDrillFollowUpWeighting.bPreferDrillFollowUp + && (bFollowUpReadyForHandoff + || (bQueueReadyForHandoff && bQueueLooksFollowUpOrRecovery))) + { + if (HandoffHistoryBias.PreferredDeferredOverflowKind + == HyperTwistCoachDashboardWidgetInternal::EHandoffRecommendationKind::Queue + && bQueueReadyForHandoff + && bQueueLooksFollowUpOrRecovery) + { + HandoffRecommendationKind = + HyperTwistCoachDashboardWidgetInternal::EHandoffRecommendationKind::Queue; + bHandoffRecommendationUsedHistory = true; + bHandoffRecommendationUsedDeferredOverflowHistory = true; + bHandoffRecommendationUsedMethodDrillWeighting = true; + } + else if (HandoffHistoryBias.PreferredKind + == HyperTwistCoachDashboardWidgetInternal::EHandoffRecommendationKind::Queue + && bQueueReadyForHandoff + && bQueueLooksFollowUpOrRecovery) + { + HandoffRecommendationKind = + HyperTwistCoachDashboardWidgetInternal::EHandoffRecommendationKind::Queue; + bHandoffRecommendationUsedHistory = true; + bHandoffRecommendationUsedMethodDrillWeighting = true; + } + else if (HandoffHistoryBias.PreferredKind + == HyperTwistCoachDashboardWidgetInternal::EHandoffRecommendationKind::FollowUp + && bFollowUpReadyForHandoff) + { + HandoffRecommendationKind = + HyperTwistCoachDashboardWidgetInternal::EHandoffRecommendationKind::FollowUp; + bHandoffRecommendationUsedHistory = true; + bHandoffRecommendationUsedMethodDrillWeighting = true; + } + else if (bFollowUpReadyForHandoff) + { + HandoffRecommendationKind = + HyperTwistCoachDashboardWidgetInternal::EHandoffRecommendationKind::FollowUp; + bHandoffRecommendationUsedMethodDrillWeighting = true; + } + else if (bQueueReadyForHandoff && bQueueLooksFollowUpOrRecovery) + { + HandoffRecommendationKind = + HyperTwistCoachDashboardWidgetInternal::EHandoffRecommendationKind::Queue; + bHandoffRecommendationUsedMethodDrillWeighting = true; + } + } + else if (MethodDrillFollowUpWeighting.IsStructurallyValid() + && MethodDrillFollowUpWeighting.bPreferCoachHandoff + && (bRecommendedReadyForHandoff + || (bQueueReadyForHandoff && bQueueLooksRecommendedOrPrimary))) + { + if (HandoffHistoryBias.PreferredDeferredOverflowKind + == HyperTwistCoachDashboardWidgetInternal::EHandoffRecommendationKind::Recommended + && bRecommendedReadyForHandoff) + { + HandoffRecommendationKind = + HyperTwistCoachDashboardWidgetInternal::EHandoffRecommendationKind::Recommended; + bHandoffRecommendationUsedHistory = true; + bHandoffRecommendationUsedDeferredOverflowHistory = true; + bHandoffRecommendationUsedMethodDrillWeighting = true; + } + else if (HandoffHistoryBias.PreferredKind + == HyperTwistCoachDashboardWidgetInternal::EHandoffRecommendationKind::Queue + && bQueueReadyForHandoff + && bQueueLooksRecommendedOrPrimary) + { + HandoffRecommendationKind = + HyperTwistCoachDashboardWidgetInternal::EHandoffRecommendationKind::Queue; + bHandoffRecommendationUsedHistory = true; + bHandoffRecommendationUsedMethodDrillWeighting = true; + } + else if (HandoffHistoryBias.PreferredKind + == HyperTwistCoachDashboardWidgetInternal::EHandoffRecommendationKind::Recommended + && bRecommendedReadyForHandoff) + { + HandoffRecommendationKind = + HyperTwistCoachDashboardWidgetInternal::EHandoffRecommendationKind::Recommended; + bHandoffRecommendationUsedHistory = true; + bHandoffRecommendationUsedMethodDrillWeighting = true; + } + else if (bRecommendedReadyForHandoff) + { + HandoffRecommendationKind = + HyperTwistCoachDashboardWidgetInternal::EHandoffRecommendationKind::Recommended; + bHandoffRecommendationUsedMethodDrillWeighting = true; + } + else if (bQueueReadyForHandoff && bQueueLooksRecommendedOrPrimary) + { + HandoffRecommendationKind = + HyperTwistCoachDashboardWidgetInternal::EHandoffRecommendationKind::Queue; + bHandoffRecommendationUsedMethodDrillWeighting = true; + } + } else if (HandoffClosureBias.bHasSignal && HandoffClosureBias.ContinuationBias >= HandoffClosureBias.SuppressionBias + 2) { @@ -6066,7 +6163,7 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation() bHandoffRecommendationUsedDeferredFirstSuppressionSignal; CoachHandoffRecommendationDetailLine = FString::Printf( - TEXT("Closure continuation bias %d | Closure suppression bias %d | Queue ready: %s | Follow-up ready: %s | Recommended ready: %s | Preferred lane: %s | Memory source: %s%s%s%s%s | Launch bias: %s from %s | broadened/tightened history %d/%d | deferred tightened launches %d | deferred launch cases %d%s | Handoff history preferred: %s | accepted q/f/r %d/%d/%d | deferred-overflow accepted q/f/r %d/%d/%d | deferred-first recommendation q/f/r %d/%d/%d | recommended q/f/r %d/%d/%d"), + TEXT("Closure continuation bias %d | Closure suppression bias %d | Queue ready: %s | Follow-up ready: %s | Recommended ready: %s | Preferred lane: %s | Memory source: %s%s%s%s%s%s | Launch bias: %s from %s | broadened/tightened history %d/%d | deferred tightened launches %d | deferred launch cases %d%s | Handoff history preferred: %s | accepted q/f/r %d/%d/%d | deferred-overflow accepted q/f/r %d/%d/%d | deferred-first recommendation q/f/r %d/%d/%d | recommended q/f/r %d/%d/%d"), HandoffClosureBias.ContinuationBias, HandoffClosureBias.SuppressionBias, bQueueReadyForHandoff ? TEXT("yes") : TEXT("no"), @@ -6084,6 +6181,11 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation() bHandoffRecommendationUsedHistory ? TEXT(" | Retained handoff history actively weighted this recommendation.") : TEXT(""), + bHandoffRecommendationUsedMethodDrillWeighting + ? (MethodDrillFollowUpWeighting.bPreferDrillFollowUp + ? TEXT(" | Retained drill-follow-up history directly tipped this handoff toward narrow continuation.") + : TEXT(" | Retained drill-follow-up history directly tipped this handoff back toward broader coach guidance.")) + : TEXT(""), bHandoffRecommendationUsedDeferredFirstSuppressionSignal ? (bDeferredFirstSuppressionSignalPromoted ? TEXT(" | Deferred-first queue suppression is promoted and keeping narrowed follow-up continuation ahead.")