From ba04128d39f192e0069583ecf193fe2c24fd1b7f Mon Sep 17 00:00:00 2001 From: axiomlogicnexus Date: Wed, 29 Apr 2026 17:55:13 +0200 Subject: [PATCH] Retain drill recovery plan posture history --- .../HyperTwistCoachDashboardWidget.cpp | 188 ++++++++++++++++-- .../HyperTwistCoachDashboardWidget.h | 7 + 2 files changed, 173 insertions(+), 22 deletions(-) diff --git a/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistCoachDashboardWidget.cpp b/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistCoachDashboardWidget.cpp index c1a7bcf..99af15a 100644 --- a/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistCoachDashboardWidget.cpp +++ b/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistCoachDashboardWidget.cpp @@ -91,6 +91,8 @@ namespace HyperTwistCoachDashboardWidgetInternal int32 StrongQueueEntryCount = 0; int32 StrongFollowUpPacketCount = 0; int32 WeakRecommendedBriefCount = 0; + int32 TightContinuationPlanCount = 0; + int32 BroadRedirectPlanCount = 0; int32 LaunchRecoveryBias = 0; int32 PromoteRecoveryBias = 0; int32 QueueHandoffBias = 0; @@ -113,6 +115,47 @@ namespace HyperTwistCoachDashboardWidgetInternal return TEXT("Unknown"); } + bool IsTightCoachPlanPosture( + const EHyperTwistTrainingDeliveryMode SuggestedMode, + const EHyperTwistTrainingSelectionPolicy SuggestedSelectionPolicy) + { + return SuggestedSelectionPolicy == EHyperTwistTrainingSelectionPolicy::Scripted + && (SuggestedMode == EHyperTwistTrainingDeliveryMode::CoachReviewed + || SuggestedMode == EHyperTwistTrainingDeliveryMode::RecognitionAssisted); + } + + bool IsBroadCoachPlanPosture( + const EHyperTwistTrainingDeliveryMode SuggestedMode, + const EHyperTwistTrainingSelectionPolicy SuggestedSelectionPolicy) + { + return SuggestedSelectionPolicy != EHyperTwistTrainingSelectionPolicy::Scripted + && SuggestedMode != EHyperTwistTrainingDeliveryMode::CoachReviewed; + } + + FString DescribeCoachPlanPosture( + const EHyperTwistTrainingDeliveryMode SuggestedMode, + const EHyperTwistTrainingSelectionPolicy SuggestedSelectionPolicy) + { + if (IsTightCoachPlanPosture(SuggestedMode, SuggestedSelectionPolicy)) + { + return TEXT("tight reviewed/scripted continuation"); + } + if (IsBroadCoachPlanPosture(SuggestedMode, SuggestedSelectionPolicy)) + { + return TEXT("broad redirect default"); + } + if (SuggestedSelectionPolicy == EHyperTwistTrainingSelectionPolicy::Scripted) + { + return TEXT("scripted mixed posture"); + } + if (SuggestedMode == EHyperTwistTrainingDeliveryMode::CoachReviewed) + { + return TEXT("reviewed mixed posture"); + } + + return TEXT("neutral default posture"); + } + FString DescribeGuidanceLane(const EHyperTwistTrainingCoachGuidanceLane Lane) { switch (Lane) @@ -1402,14 +1445,20 @@ namespace HyperTwistCoachDashboardWidgetInternal Bias.bHasStrongContinuationSignal = true; Bias.bHasSignal = true; } - else if (bNarrowStructureRecovery) + else if (bNarrowStructureRecovery) + { + Bias.StrongQueueEntryCount += HistoryWeight; + Bias.QueueHandoffBias += HistoryWeight * 2; + Bias.LaunchRecoveryBias += HistoryWeight * 2; + if (Entry.bGeneratedPlanUsedTightStructureContinuationPosture) { - Bias.StrongQueueEntryCount += HistoryWeight; - Bias.QueueHandoffBias += HistoryWeight * 2; - Bias.LaunchRecoveryBias += HistoryWeight * 2; - Bias.bHasStrongContinuationSignal = true; - Bias.bHasSignal = true; + Bias.TightContinuationPlanCount += HistoryWeight; + Bias.QueueHandoffBias += HistoryWeight; + Bias.LaunchRecoveryBias += HistoryWeight; } + Bias.bHasStrongContinuationSignal = true; + Bias.bHasSignal = true; + } else if (bGenericPacket) { Bias.QueueHandoffBias += HistoryWeight; @@ -1431,14 +1480,20 @@ namespace HyperTwistCoachDashboardWidgetInternal Bias.bHasStrongContinuationSignal = true; Bias.bHasSignal = true; } - else if (bNarrowStructureRecovery) + else if (bNarrowStructureRecovery) + { + Bias.StrongFollowUpPacketCount += HistoryWeight; + Bias.FollowUpHandoffBias += HistoryWeight * 3; + Bias.LaunchRecoveryBias += HistoryWeight * 2; + if (Entry.bGeneratedPlanUsedTightStructureContinuationPosture) { - Bias.StrongFollowUpPacketCount += HistoryWeight; - Bias.FollowUpHandoffBias += HistoryWeight * 3; - Bias.LaunchRecoveryBias += HistoryWeight * 2; - Bias.bHasStrongContinuationSignal = true; - Bias.bHasSignal = true; + Bias.TightContinuationPlanCount += HistoryWeight; + Bias.FollowUpHandoffBias += HistoryWeight; + Bias.LaunchRecoveryBias += HistoryWeight; } + Bias.bHasStrongContinuationSignal = true; + Bias.bHasSignal = true; + } else if (bGenericPacket) { Bias.FollowUpHandoffBias += HistoryWeight; @@ -1460,14 +1515,20 @@ namespace HyperTwistCoachDashboardWidgetInternal Bias.bHasWeakRedirectSignal = true; Bias.bHasSignal = true; } - else if (bBroadStructureRecovery) + else if (bBroadStructureRecovery) + { + Bias.WeakRecommendedBriefCount += HistoryWeight; + Bias.RecommendedHandoffBias += HistoryWeight * 3; + Bias.PromoteRecoveryBias += HistoryWeight * 2; + if (Entry.bGeneratedPlanUsedBroadStructureRedirectPosture) { - Bias.WeakRecommendedBriefCount += HistoryWeight; - Bias.RecommendedHandoffBias += HistoryWeight * 3; - Bias.PromoteRecoveryBias += HistoryWeight * 2; - Bias.bHasWeakRedirectSignal = true; - Bias.bHasSignal = true; + Bias.BroadRedirectPlanCount += HistoryWeight; + Bias.RecommendedHandoffBias += HistoryWeight; + Bias.PromoteRecoveryBias += HistoryWeight; } + Bias.bHasWeakRedirectSignal = true; + Bias.bHasSignal = true; + } else if (bGenericPacket) { Bias.RecommendedHandoffBias += HistoryWeight; @@ -7097,6 +7158,28 @@ void UHyperTwistCoachDashboardWidget::RecordMethodDrillRecoveryMemoryHistorySnap || SourceLabel.Contains(TEXT("method-drill-recovery-memory-weak")); }; const FString GuidanceSourceLabel = CachedCoachPanelState.PreferredGuidanceSourceLabel; + const auto ApplyGeneratedPlanSnapshot = + [&Entry]( + const EHyperTwistTrainingDeliveryMode SuggestedMode, + const EHyperTwistTrainingSelectionPolicy SuggestedSelectionPolicy) + { + Entry.GeneratedPlanSuggestedMode = SuggestedMode; + Entry.GeneratedPlanSuggestedSelectionPolicy = SuggestedSelectionPolicy; + Entry.GeneratedPlanPostureLabel = + HyperTwistCoachDashboardWidgetInternal::DescribeCoachPlanPosture( + SuggestedMode, + SuggestedSelectionPolicy); + Entry.bGeneratedPlanUsedTightStructureContinuationPosture = + Entry.bNarrowPacketStructureRecoveryDominant + && HyperTwistCoachDashboardWidgetInternal::IsTightCoachPlanPosture( + SuggestedMode, + SuggestedSelectionPolicy); + Entry.bGeneratedPlanUsedBroadStructureRedirectPosture = + Entry.bBroadPacketStructureRecoveryDominant + && HyperTwistCoachDashboardWidgetInternal::IsBroadCoachPlanPosture( + SuggestedMode, + SuggestedSelectionPolicy); + }; const bool bStrongPacketPosture = SourceUsesStrongRetainedMethodDrillRecoveryPosture(GuidanceSourceLabel) || SourceUsesStrongRetainedMethodDrillRecoveryPosture( @@ -7132,6 +7215,9 @@ void UHyperTwistCoachDashboardWidget::RecordMethodDrillRecoveryMemoryHistorySnap ? SelectedQueueEntry->SourceLabel : SelectedQueueEntry->Headline; Entry.GeneratedGuidancePacketFocusCaseCount = SelectedQueueEntry->FocusCaseIds.Num(); + ApplyGeneratedPlanSnapshot( + SelectedQueueEntry->SuggestedMode, + SelectedQueueEntry->SuggestedSelectionPolicy); } } else if (Entry.RecommendedHandoffKindLabel.Equals(TEXT("follow-up"), ESearchCase::IgnoreCase)) @@ -7141,6 +7227,9 @@ void UHyperTwistCoachDashboardWidget::RecordMethodDrillRecoveryMemoryHistorySnap Entry.GeneratedGuidancePacketHeadline = CachedCoachFollowUpBrief.Headline; Entry.GeneratedGuidancePacketActionLabel = CachedCoachFollowUpBrief.PrimaryActionLabel; Entry.GeneratedGuidancePacketFocusCaseCount = CachedCoachFollowUpBrief.FocusCaseIds.Num(); + ApplyGeneratedPlanSnapshot( + CachedCoachFollowUpBrief.SuggestedMode, + CachedCoachFollowUpBrief.SuggestedSelectionPolicy); } else if (Entry.RecommendedHandoffKindLabel.Equals(TEXT("recommended"), ESearchCase::IgnoreCase)) { @@ -7149,6 +7238,9 @@ void UHyperTwistCoachDashboardWidget::RecordMethodDrillRecoveryMemoryHistorySnap Entry.GeneratedGuidancePacketHeadline = CachedCoachBrief.Headline; Entry.GeneratedGuidancePacketActionLabel = CachedCoachBrief.PrimaryActionLabel; Entry.GeneratedGuidancePacketFocusCaseCount = CachedCoachBrief.FocusCaseIds.Num(); + ApplyGeneratedPlanSnapshot( + CachedCoachBrief.SuggestedMode, + CachedCoachBrief.SuggestedSelectionPolicy); } if (Entry.GeneratedGuidancePacketKindLabel.IsEmpty()) { @@ -7161,6 +7253,9 @@ void UHyperTwistCoachDashboardWidget::RecordMethodDrillRecoveryMemoryHistorySnap Entry.GeneratedGuidancePacketHeadline = CachedCoachFollowUpBrief.Headline; Entry.GeneratedGuidancePacketActionLabel = CachedCoachFollowUpBrief.PrimaryActionLabel; Entry.GeneratedGuidancePacketFocusCaseCount = CachedCoachFollowUpBrief.FocusCaseIds.Num(); + ApplyGeneratedPlanSnapshot( + CachedCoachFollowUpBrief.SuggestedMode, + CachedCoachFollowUpBrief.SuggestedSelectionPolicy); } else if (const FHyperTwistTrainingCoachSessionQueueStateEntry* SelectedQueueEntry = FindSelectedQueueEntry()) @@ -7173,6 +7268,9 @@ void UHyperTwistCoachDashboardWidget::RecordMethodDrillRecoveryMemoryHistorySnap ? SelectedQueueEntry->SourceLabel : SelectedQueueEntry->Headline; Entry.GeneratedGuidancePacketFocusCaseCount = SelectedQueueEntry->FocusCaseIds.Num(); + ApplyGeneratedPlanSnapshot( + SelectedQueueEntry->SuggestedMode, + SelectedQueueEntry->SuggestedSelectionPolicy); } else if (!CachedCoachBrief.Headline.IsEmpty() || !CachedCoachBrief.PrimaryActionLabel.IsEmpty() @@ -7183,6 +7281,9 @@ void UHyperTwistCoachDashboardWidget::RecordMethodDrillRecoveryMemoryHistorySnap Entry.GeneratedGuidancePacketHeadline = CachedCoachBrief.Headline; Entry.GeneratedGuidancePacketActionLabel = CachedCoachBrief.PrimaryActionLabel; Entry.GeneratedGuidancePacketFocusCaseCount = CachedCoachBrief.FocusCaseIds.Num(); + ApplyGeneratedPlanSnapshot( + CachedCoachBrief.SuggestedMode, + CachedCoachBrief.SuggestedSelectionPolicy); } } if (!Entry.IsStructurallyValid()) @@ -7236,12 +7337,22 @@ void UHyperTwistCoachDashboardWidget::RecordMethodDrillRecoveryMemoryHistorySnap == Entry.GeneratedGuidancePacketActionLabel && MethodDrillRecoveryMemoryHistoryEntries.Last().GeneratedGuidancePacketFocusCaseCount == Entry.GeneratedGuidancePacketFocusCaseCount + && MethodDrillRecoveryMemoryHistoryEntries.Last().GeneratedPlanSuggestedMode + == Entry.GeneratedPlanSuggestedMode + && MethodDrillRecoveryMemoryHistoryEntries.Last().GeneratedPlanSuggestedSelectionPolicy + == Entry.GeneratedPlanSuggestedSelectionPolicy + && MethodDrillRecoveryMemoryHistoryEntries.Last().GeneratedPlanPostureLabel + == Entry.GeneratedPlanPostureLabel && MethodDrillRecoveryMemoryHistoryEntries.Last().bGeneratedPacketUsedStrongRetainedMethodDrillRecoveryPosture == Entry.bGeneratedPacketUsedStrongRetainedMethodDrillRecoveryPosture && MethodDrillRecoveryMemoryHistoryEntries.Last().bGeneratedPacketUsedWeakRetainedMethodDrillRecoveryPosture == Entry.bGeneratedPacketUsedWeakRetainedMethodDrillRecoveryPosture && MethodDrillRecoveryMemoryHistoryEntries.Last().bGeneratedPacketUsedGenericMethodDrillRecoveryMemory == Entry.bGeneratedPacketUsedGenericMethodDrillRecoveryMemory + && MethodDrillRecoveryMemoryHistoryEntries.Last().bGeneratedPlanUsedTightStructureContinuationPosture + == Entry.bGeneratedPlanUsedTightStructureContinuationPosture + && MethodDrillRecoveryMemoryHistoryEntries.Last().bGeneratedPlanUsedBroadStructureRedirectPosture + == Entry.bGeneratedPlanUsedBroadStructureRedirectPosture && MethodDrillRecoveryMemoryHistoryEntries.Last().bUsedMethodDrillRecoveryMemoryForRecovery == Entry.bUsedMethodDrillRecoveryMemoryForRecovery && MethodDrillRecoveryMemoryHistoryEntries.Last().bUsedMethodDrillRecoveryMemoryForHandoff @@ -8625,13 +8736,15 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation() EffectiveMethodDrillRecoveryMemoryHandoffBias) ); CoachHandoffRecommendationDetailLine += FString::Printf( - TEXT(" | packet history queue/follow-up/recommended %d/%d/%d | strong packet queue/follow-up %d/%d | weak packet recommended %d | packet preferred: %s"), + TEXT(" | packet history queue/follow-up/recommended %d/%d/%d | strong packet queue/follow-up %d/%d | weak packet recommended %d | tight/broad plan posture %d/%d | packet preferred: %s"), MethodDrillRecoveryPacketHandoffBias.QueueEntryHistoryCount, MethodDrillRecoveryPacketHandoffBias.FollowUpPacketHistoryCount, MethodDrillRecoveryPacketHandoffBias.RecommendedBriefHistoryCount, MethodDrillRecoveryPacketHandoffBias.StrongQueueEntryCount, MethodDrillRecoveryPacketHandoffBias.StrongFollowUpPacketCount, MethodDrillRecoveryPacketHandoffBias.WeakRecommendedBriefCount, + MethodDrillRecoveryPacketHandoffBias.TightContinuationPlanCount, + MethodDrillRecoveryPacketHandoffBias.BroadRedirectPlanCount, *HyperTwistCoachDashboardWidgetInternal::DescribeHandoffRecommendationKind( MethodDrillRecoveryPacketHandoffBias.PreferredHandoffKind) ); @@ -9053,7 +9166,7 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation() : *QueueDeferredFirstSuppressionSignal->Detail) : TEXT(""); const FString QueueRecoveryDetailLine = FString::Printf( - TEXT("Deferred events %d | Promoted %d | Manual %d | Pressure %.2f | Dominant reason: %s | Follow-up deferrals: %s | Archive-aware deferrals: %s | Completion gap: %s | Upstream action source: %s%s || Learned promote %d/%d reduced, %d failed, avg delta %.2f | launch %d/%d reduced, %d failed, avg delta %.2f | deferred-first promote/launch reduced %d/%d over %d/%d | drill-driven outcome promote/launch reduced %d/%d over %d/%d | retained strong-launch %d/%d, weak-promote %d/%d | drill-driven bias promote/launch %d/%d | packet history queue/follow-up/recommended %d/%d/%d | packet bias promote/launch %d/%d | upstream drill recovery strong/weak/history %d/%d/%d avg %.1f | retained drill-recovery stance: %s"), + TEXT("Deferred events %d | Promoted %d | Manual %d | Pressure %.2f | Dominant reason: %s | Follow-up deferrals: %s | Archive-aware deferrals: %s | Completion gap: %s | Upstream action source: %s%s || Learned promote %d/%d reduced, %d failed, avg delta %.2f | launch %d/%d reduced, %d failed, avg delta %.2f | deferred-first promote/launch reduced %d/%d over %d/%d | drill-driven outcome promote/launch reduced %d/%d over %d/%d | retained strong-launch %d/%d, weak-promote %d/%d | drill-driven bias promote/launch %d/%d | packet history queue/follow-up/recommended %d/%d/%d | packet-plan posture tight/broad %d/%d | packet bias promote/launch %d/%d | upstream drill recovery strong/weak/history %d/%d/%d avg %.1f | retained drill-recovery stance: %s"), CachedCoachQueueExecutionSummary.DeferredEventCount, CachedCoachQueueExecutionSummary.PromotedEventCount, CachedCoachQueueExecutionSummary.ManualRescheduleEventCount, @@ -9091,6 +9204,8 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation() MethodDrillRecoveryPacketQueueBias.QueueEntryHistoryCount, MethodDrillRecoveryPacketQueueBias.FollowUpPacketHistoryCount, MethodDrillRecoveryPacketQueueBias.RecommendedBriefHistoryCount, + MethodDrillRecoveryPacketQueueBias.TightContinuationPlanCount, + MethodDrillRecoveryPacketQueueBias.BroadRedirectPlanCount, MethodDrillRecoveryPacketQueueBias.PromoteRecoveryBias, MethodDrillRecoveryPacketQueueBias.LaunchRecoveryBias, QueueRecoveryWeighting.MethodDrillUpstreamStrongCount, @@ -9363,6 +9478,23 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation() || SelectedMethodDrillRecoveryMemoryHistoryEntry->GeneratedGuidancePacketActionLabel.IsEmpty() ? TEXT("n/a") : SelectedMethodDrillRecoveryMemoryHistoryEntry->GeneratedGuidancePacketActionLabel; + const FString MethodDrillRecoveryMemoryGeneratedPlanModeLine = + SelectedMethodDrillRecoveryMemoryHistoryEntry == nullptr + || SelectedMethodDrillRecoveryMemoryHistoryEntry->GeneratedGuidancePacketKindLabel.IsEmpty() + ? TEXT("n/a") + : HyperTwistCoachDashboardWidgetInternal::EnumDisplayName( + SelectedMethodDrillRecoveryMemoryHistoryEntry->GeneratedPlanSuggestedMode); + const FString MethodDrillRecoveryMemoryGeneratedPlanSelectionLine = + SelectedMethodDrillRecoveryMemoryHistoryEntry == nullptr + || SelectedMethodDrillRecoveryMemoryHistoryEntry->GeneratedGuidancePacketKindLabel.IsEmpty() + ? TEXT("n/a") + : HyperTwistCoachDashboardWidgetInternal::EnumDisplayName( + SelectedMethodDrillRecoveryMemoryHistoryEntry->GeneratedPlanSuggestedSelectionPolicy); + const FString MethodDrillRecoveryMemoryGeneratedPlanPostureLine = + SelectedMethodDrillRecoveryMemoryHistoryEntry == nullptr + || SelectedMethodDrillRecoveryMemoryHistoryEntry->GeneratedPlanPostureLabel.IsEmpty() + ? TEXT("n/a") + : SelectedMethodDrillRecoveryMemoryHistoryEntry->GeneratedPlanPostureLabel; const FString MethodDrillRecoveryMemoryGeneratedPacketStanceLine = SelectedMethodDrillRecoveryMemoryHistoryEntry == nullptr ? TEXT("n/a") @@ -9377,7 +9509,7 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation() SelectedMethodDrillRecoveryMemoryHistoryEntry != nullptr && SelectedMethodDrillRecoveryMemoryHistoryEntry->IsStructurallyValid() ? FString::Printf( - TEXT("Drill recovery memory history: %d entries | selected %d/%d | %s | %s | Packet: %s | Stance: %s | Recorded: %s"), + TEXT("Drill recovery memory history: %d entries | selected %d/%d | %s | %s | Packet: %s | Stance: %s | Plan: %s | Recorded: %s"), MethodDrillRecoveryMemoryHistoryEntries.Num(), SelectedMethodDrillRecoveryMemoryHistoryIndex + 1, MethodDrillRecoveryMemoryHistoryEntries.Num(), @@ -9386,13 +9518,14 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation() *MethodDrillRecoveryMemoryGeneratedPacketKindLine, *HyperTwistCoachDashboardWidgetInternal::DescribeMethodDrillRecoveryMemoryBias( SelectedMethodDrillRecoveryMemoryHistoryBias), + *MethodDrillRecoveryMemoryGeneratedPlanPostureLine, *SelectedMethodDrillRecoveryMemoryHistoryEntry->RecordedAtUtc) : TEXT("Drill recovery memory history: no retained upstream drill-recovery memory shifts recorded yet."); const FString MethodDrillRecoveryMemoryHistoryDetailLine = SelectedMethodDrillRecoveryMemoryHistoryEntry != nullptr && SelectedMethodDrillRecoveryMemoryHistoryEntry->IsStructurallyValid() ? FString::Printf( - TEXT("Source: %s | Strong/weak/history %d/%d/%d avg %.1f | Structure recovery narrow %d/%d broad %d/%d | Dominant pressure: %s | Structure bias: %s | Stance: %s | Recovery memory tipped: %s | Handoff memory tipped: %s | Packet kind: %s | Packet source: %s | Packet headline: %s | Packet action: %s | Packet focus %d | Packet stance: %s | Recovery posture: %s | Handoff posture: %s"), + TEXT("Source: %s | Strong/weak/history %d/%d/%d avg %.1f | Structure recovery narrow %d/%d broad %d/%d | Dominant pressure: %s | Structure bias: %s | Stance: %s | Recovery memory tipped: %s | Handoff memory tipped: %s | Packet kind: %s | Packet source: %s | Packet headline: %s | Packet action: %s | Packet focus %d | Plan mode: %s | Plan selection: %s | Plan posture: %s | Tight/broad structure plan: %s/%s | Packet stance: %s | Recovery posture: %s | Handoff posture: %s"), *MethodDrillRecoveryMemorySourceLine, SelectedMethodDrillRecoveryMemoryHistoryEntry->StrongMethodDrillRecoveryHistoryCount, SelectedMethodDrillRecoveryMemoryHistoryEntry->WeakMethodDrillRecoveryHistoryCount, @@ -9426,6 +9559,17 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation() *MethodDrillRecoveryMemoryGeneratedPacketHeadlineLine, *MethodDrillRecoveryMemoryGeneratedPacketActionLine, SelectedMethodDrillRecoveryMemoryHistoryEntry->GeneratedGuidancePacketFocusCaseCount, + *MethodDrillRecoveryMemoryGeneratedPlanModeLine, + *MethodDrillRecoveryMemoryGeneratedPlanSelectionLine, + *MethodDrillRecoveryMemoryGeneratedPlanPostureLine, + SelectedMethodDrillRecoveryMemoryHistoryEntry + ->bGeneratedPlanUsedTightStructureContinuationPosture + ? TEXT("yes") + : TEXT("no"), + SelectedMethodDrillRecoveryMemoryHistoryEntry + ->bGeneratedPlanUsedBroadStructureRedirectPosture + ? TEXT("yes") + : TEXT("no"), *MethodDrillRecoveryMemoryGeneratedPacketStanceLine, *SelectedMethodDrillRecoveryMemoryHistoryEntry->QueueRecoveryStatusLine, *SelectedMethodDrillRecoveryMemoryHistoryEntry->HandoffRecommendationStatusLine) diff --git a/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistCoachDashboardWidget.h b/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistCoachDashboardWidget.h index df62940..33e1431 100644 --- a/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistCoachDashboardWidget.h +++ b/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistCoachDashboardWidget.h @@ -353,6 +353,11 @@ struct FHyperTwistCoachDashboardMethodDrillRecoveryMemoryHistoryEntry FString GeneratedGuidancePacketHeadline; FString GeneratedGuidancePacketActionLabel; int32 GeneratedGuidancePacketFocusCaseCount = 0; + EHyperTwistTrainingDeliveryMode GeneratedPlanSuggestedMode = + EHyperTwistTrainingDeliveryMode::Timer; + EHyperTwistTrainingSelectionPolicy GeneratedPlanSuggestedSelectionPolicy = + EHyperTwistTrainingSelectionPolicy::Weighted; + FString GeneratedPlanPostureLabel; int32 MethodDrillRecoveryHistoryCount = 0; int32 StrongMethodDrillRecoveryHistoryCount = 0; int32 WeakMethodDrillRecoveryHistoryCount = 0; @@ -368,6 +373,8 @@ struct FHyperTwistCoachDashboardMethodDrillRecoveryMemoryHistoryEntry bool bGeneratedPacketUsedStrongRetainedMethodDrillRecoveryPosture = false; bool bGeneratedPacketUsedWeakRetainedMethodDrillRecoveryPosture = false; bool bGeneratedPacketUsedGenericMethodDrillRecoveryMemory = false; + bool bGeneratedPlanUsedTightStructureContinuationPosture = false; + bool bGeneratedPlanUsedBroadStructureRedirectPosture = false; bool bUsedMethodDrillRecoveryMemoryForRecovery = false; bool bUsedMethodDrillRecoveryMemoryForHandoff = false;