diff --git a/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistCoachDashboardWidget.cpp b/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistCoachDashboardWidget.cpp index 8e9c2b0..6302bf2 100644 --- a/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistCoachDashboardWidget.cpp +++ b/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistCoachDashboardWidget.cpp @@ -338,13 +338,15 @@ namespace HyperTwistCoachDashboardWidgetInternal bool IsAlignedTightFollowUpPacketSourceLabel(const FString& SourceLabel) { - return SourceLabel == TEXT("coach-memory-aligned-follow-up-packet-structure-tight-follow-up"); + return SourceLabel == TEXT("coach-memory-aligned-follow-up-packet-structure-tight-follow-up") + || SourceLabel.StartsWith(TEXT("coach-memory-dashboard-aligned-follow-up-packet-tight-")); } bool IsAlignedBroadRecommendedPacketSourceLabel(const FString& SourceLabel) { return SourceLabel - == TEXT("coach-memory-aligned-follow-up-packet-structure-broad-recommended"); + == TEXT("coach-memory-aligned-follow-up-packet-structure-broad-recommended") + || SourceLabel.StartsWith(TEXT("coach-memory-dashboard-aligned-follow-up-packet-broad-")); } bool IsAlignedTightFollowUpGuidanceSourceLabel(const FString& SourceLabel) @@ -399,6 +401,10 @@ namespace HyperTwistCoachDashboardWidgetInternal } if (IsAlignedTightFollowUpGuidanceSourceLabel(SourceLabel)) { + if (SourceLabel.StartsWith(TEXT("coach-memory-dashboard-aligned-follow-up-packet-tight-"))) + { + return TEXT("accepted aligned tight follow-up-packet handoff history"); + } return SourceLabel == TEXT("coach-memory-aligned-follow-up-packet-structure-tight-follow-up") ? TEXT("aligned tight retained follow-up-packet structure history") @@ -406,6 +412,10 @@ namespace HyperTwistCoachDashboardWidgetInternal } if (IsAlignedBroadRecommendedGuidanceSourceLabel(SourceLabel)) { + if (SourceLabel.StartsWith(TEXT("coach-memory-dashboard-aligned-follow-up-packet-broad-"))) + { + return TEXT("accepted aligned broad recommended-packet handoff history"); + } return SourceLabel == TEXT("coach-memory-aligned-follow-up-packet-structure-broad-recommended") ? TEXT("aligned broad retained recommended-packet structure history") @@ -995,8 +1005,38 @@ namespace HyperTwistCoachDashboardWidgetInternal const bool bBroadMethodDrillRecoveryStructurePlanDriven = false, const bool bTrustedMethodDrillRecoveryStructurePlanDriven = false, const bool bReliableTrustedMethodDrillRecoveryStructurePlanDriven = false, - const bool bReliableTrustedMethodDrillRecoveryStructurePlanAlignmentDriven = false) + const bool bReliableTrustedMethodDrillRecoveryStructurePlanAlignmentDriven = false, + const bool bAlignedTightFollowUpPacketAcceptedDriven = false, + const bool bAlignedBroadRecommendedPacketAcceptedDriven = false) { + if (bAlignedTightFollowUpPacketAcceptedDriven) + { + switch (HandoffKind) + { + case EHyperTwistTrainingCoachHandoffKind::Queue: + return TEXT("dashboard-handoff-aligned-follow-up-packet-tight-queued"); + case EHyperTwistTrainingCoachHandoffKind::FollowUp: + return TEXT("dashboard-handoff-aligned-follow-up-packet-tight-follow-up"); + case EHyperTwistTrainingCoachHandoffKind::Recommended: + return TEXT("dashboard-handoff-aligned-follow-up-packet-tight-recommended"); + default: + return FString(); + } + } + if (bAlignedBroadRecommendedPacketAcceptedDriven) + { + switch (HandoffKind) + { + case EHyperTwistTrainingCoachHandoffKind::Queue: + return TEXT("dashboard-handoff-aligned-follow-up-packet-broad-queued"); + case EHyperTwistTrainingCoachHandoffKind::FollowUp: + return TEXT("dashboard-handoff-aligned-follow-up-packet-broad-follow-up"); + case EHyperTwistTrainingCoachHandoffKind::Recommended: + return TEXT("dashboard-handoff-aligned-follow-up-packet-broad-recommended"); + default: + return FString(); + } + } if (MethodDrillRecoveryMemoryBias == EMethodDrillRecoveryMemoryBias::Strong) { switch (HandoffKind) @@ -6419,10 +6459,27 @@ FString UHyperTwistCoachDashboardWidget::ResolveDashboardHandoffStartActionSourc const bool bUseMethodDrillLabel = bDisplayedCoachHandoffRecommendationUsedMethodDrillWeighting && DisplayedCoachHandoffRecommendationKind == HandoffKind; + const bool bUseAlignedTightPacketAcceptedLabel = + bDisplayedCoachHandoffRecommendationUsedAlignedTightPacketAcceptedHistory + && DisplayedCoachHandoffRecommendationKind == HandoffKind; + const bool bUseAlignedBroadPacketAcceptedLabel = + bDisplayedCoachHandoffRecommendationUsedAlignedBroadPacketAcceptedHistory + && DisplayedCoachHandoffRecommendationKind == HandoffKind; return HyperTwistCoachDashboardWidgetInternal::DashboardHandoffSourceLabel( HandoffKind, bUseDeferredFirstSuppressionLabel, - bUseMethodDrillLabel + bUseMethodDrillLabel, + HyperTwistCoachDashboardWidgetInternal::EMethodDrillRecoveryMemoryBias::None, + false, + false, + false, + false, + false, + false, + false, + false, + bUseAlignedTightPacketAcceptedLabel, + bUseAlignedBroadPacketAcceptedLabel ); } @@ -9694,6 +9751,8 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation() DisplayedCoachHandoffRecommendationKind = EHyperTwistTrainingCoachHandoffKind::None; bDisplayedCoachHandoffRecommendationUsedDeferredFirstSuppressionSignal = false; bDisplayedCoachHandoffRecommendationUsedMethodDrillWeighting = false; + bDisplayedCoachHandoffRecommendationUsedAlignedTightPacketAcceptedHistory = false; + bDisplayedCoachHandoffRecommendationUsedAlignedBroadPacketAcceptedHistory = false; DisplayedCoachHandoffMethodDrillRecoveryMemoryStartActionSourceLabel.Reset(); FString CoachHandoffRecommendationStatusLine; FString CoachHandoffRecommendationDetailLine; @@ -10441,6 +10500,24 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation() || bHandoffRecommendationUsedMethodDrillRecoveryMemory || bHandoffRecommendationUsedStrongRetainedMethodDrillRecoveryPosture || bHandoffRecommendationUsedWeakRetainedMethodDrillRecoveryPosture; + bDisplayedCoachHandoffRecommendationUsedAlignedTightPacketAcceptedHistory = + HandoffHistoryBias.AlignedTightFollowUpPacketAcceptedDeltaCount > 0 + && HandoffHistoryBias.AlignedTightFollowUpPacketAcceptedDeltaCount + >= HandoffHistoryBias.AlignedBroadRecommendedPacketAcceptedDeltaCount + && (DisplayedCoachHandoffRecommendationKind + == EHyperTwistTrainingCoachHandoffKind::FollowUp + || (DisplayedCoachHandoffRecommendationKind + == EHyperTwistTrainingCoachHandoffKind::Queue + && bQueueLooksFollowUpOrRecovery)); + bDisplayedCoachHandoffRecommendationUsedAlignedBroadPacketAcceptedHistory = + HandoffHistoryBias.AlignedBroadRecommendedPacketAcceptedDeltaCount > 0 + && HandoffHistoryBias.AlignedBroadRecommendedPacketAcceptedDeltaCount + >= HandoffHistoryBias.AlignedTightFollowUpPacketAcceptedDeltaCount + && (DisplayedCoachHandoffRecommendationKind + == EHyperTwistTrainingCoachHandoffKind::Recommended + || (DisplayedCoachHandoffRecommendationKind + == EHyperTwistTrainingCoachHandoffKind::Queue + && bQueueLooksRecommendedOrPrimary)); const bool bHandoffRecommendationUsedStrongMethodDrillFollowUpPacket = bHandoffRecommendationUsedMethodDrillWeighting && HandoffRecommendationKind diff --git a/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingCoachLibrary.cpp b/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingCoachLibrary.cpp index 163f7d9..b44c0ce 100644 --- a/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingCoachLibrary.cpp +++ b/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingCoachLibrary.cpp @@ -333,14 +333,22 @@ namespace HyperTwistTrainingCoachLibraryInternal bool IsAlignedTightFollowUpGuidanceSourceLabel(const FString& SourceLabel) { return SourceLabel == TEXT("recommendation-history-aligned-tight-follow-up-outcome") - || SourceLabel == TEXT("coach-memory-aligned-follow-up-packet-structure-tight-follow-up"); + || SourceLabel == TEXT("coach-memory-aligned-follow-up-packet-structure-tight-follow-up") + || 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"); } bool IsAlignedBroadRecommendedGuidanceSourceLabel(const FString& SourceLabel) { return SourceLabel == TEXT("recommendation-history-aligned-broad-recommended-outcome") || SourceLabel - == TEXT("coach-memory-aligned-follow-up-packet-structure-broad-recommended"); + == TEXT("coach-memory-aligned-follow-up-packet-structure-broad-recommended") + || 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"); } FString DescribeCoachMemorySourceLabel(const FString& SourceLabel) @@ -395,6 +403,13 @@ namespace HyperTwistTrainingCoachLibraryInternal } if (IsAlignedTightFollowUpGuidanceSourceLabel(SourceLabel)) { + 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") + || SourceLabel == TEXT("dashboard-handoff-aligned-follow-up-packet-tight-recommended")) + { + return TEXT("accepted aligned tight follow-up-packet handoff history"); + } return SourceLabel == TEXT("coach-memory-aligned-follow-up-packet-structure-tight-follow-up") ? TEXT("aligned tight retained follow-up-packet structure history") @@ -402,6 +417,13 @@ namespace HyperTwistTrainingCoachLibraryInternal } if (IsAlignedBroadRecommendedGuidanceSourceLabel(SourceLabel)) { + 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") + || SourceLabel == TEXT("dashboard-handoff-aligned-follow-up-packet-broad-recommended")) + { + return TEXT("accepted aligned broad recommended-packet handoff history"); + } return SourceLabel == TEXT("coach-memory-aligned-follow-up-packet-structure-broad-recommended") ? TEXT("aligned broad retained recommended-packet structure history") diff --git a/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingRepositoryLibrary.cpp b/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingRepositoryLibrary.cpp index fcf8b9a..c1ce18b 100644 --- a/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingRepositoryLibrary.cpp +++ b/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingRepositoryLibrary.cpp @@ -133,6 +133,20 @@ namespace HyperTwistTrainingRepositoryLibraryInternal || SourceLabel.StartsWith(TEXT("coach-memory-dashboard-method-drill-")); } + bool IsAlignedTightFollowUpPacketDashboardHandoffSource(const FString& SourceLabel) + { + 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"); + } + + 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"); + } + bool IsStrongMethodDrillRecoveryDashboardHandoffSource(const FString& SourceLabel) { return SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-strong-queued") @@ -425,13 +439,15 @@ namespace HyperTwistTrainingRepositoryLibraryInternal bool IsAlignedTightFollowUpPacketStructureCoachMemorySource(const FString& SourceLabel) { - return SourceLabel == TEXT("coach-memory-aligned-follow-up-packet-structure-tight-follow-up"); + return SourceLabel == TEXT("coach-memory-aligned-follow-up-packet-structure-tight-follow-up") + || SourceLabel.StartsWith(TEXT("coach-memory-dashboard-aligned-follow-up-packet-tight-")); } bool IsAlignedBroadRecommendedPacketStructureCoachMemorySource(const FString& SourceLabel) { return SourceLabel - == TEXT("coach-memory-aligned-follow-up-packet-structure-broad-recommended"); + == TEXT("coach-memory-aligned-follow-up-packet-structure-broad-recommended") + || SourceLabel.StartsWith(TEXT("coach-memory-dashboard-aligned-follow-up-packet-broad-")); } FString ResolveMethodDrillFollowUpPacketStructureRecoverySourceLabel( @@ -543,6 +559,8 @@ namespace HyperTwistTrainingRepositoryLibraryInternal || SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-structure-plan-broad-trusted-queued") || SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-weak-queued") || 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-method-drill-recovery-posture-strong-queued") || SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-posture-weak-queued")) { @@ -566,6 +584,8 @@ namespace HyperTwistTrainingRepositoryLibraryInternal || SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-structure-plan-broad-trusted-follow-up") || SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-weak-follow-up") || 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-method-drill-recovery-posture-strong-follow-up") || SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-posture-weak-follow-up")) { @@ -589,6 +609,8 @@ namespace HyperTwistTrainingRepositoryLibraryInternal || SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-structure-plan-broad-trusted-recommended") || SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-weak-recommended") || 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-method-drill-recovery-posture-strong-recommended") || SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-posture-weak-recommended")) { @@ -9276,6 +9298,14 @@ FHyperTwistTrainingCoachMemorySnapshot UHyperTwistTrainingRepositoryLibrary::Der QueueExecutionSummary.StartedWeakMethodDrillFollowUpPacketQueuedHandoffEventCount + QueueExecutionSummary.StartedWeakMethodDrillFollowUpPacketFollowUpHandoffEventCount + QueueExecutionSummary.StartedWeakMethodDrillFollowUpPacketRecommendedHandoffEventCount; + const int32 AlignedTightFollowUpPacketAcceptedStartedCount = + QueueExecutionSummary.StartedAlignedTightFollowUpPacketQueuedHandoffEventCount + + QueueExecutionSummary.StartedAlignedTightFollowUpPacketFollowUpHandoffEventCount + + QueueExecutionSummary.StartedAlignedTightFollowUpPacketRecommendedHandoffEventCount; + const int32 AlignedBroadRecommendedPacketAcceptedStartedCount = + QueueExecutionSummary.StartedAlignedBroadRecommendedPacketQueuedHandoffEventCount + + QueueExecutionSummary.StartedAlignedBroadRecommendedPacketFollowUpHandoffEventCount + + QueueExecutionSummary.StartedAlignedBroadRecommendedPacketRecommendedHandoffEventCount; if (StrongMethodDrillFollowUpPacketStartedCount > 0 && StrongMethodDrillFollowUpPacketStartedCount >= WeakMethodDrillFollowUpPacketStartedCount) @@ -9326,6 +9356,61 @@ FHyperTwistTrainingCoachMemorySnapshot UHyperTwistTrainingRepositoryLibrary::Der TEXT("coach-memory-method-drill-follow-up-packet-weak"); } } + if (AlignedTightFollowUpPacketAcceptedStartedCount > 0 + && AlignedTightFollowUpPacketAcceptedStartedCount + >= AlignedBroadRecommendedPacketAcceptedStartedCount) + { + const int32 AlignedPacketAcceptedBias = FMath::Clamp( + AlignedTightFollowUpPacketAcceptedStartedCount + - AlignedBroadRecommendedPacketAcceptedStartedCount + + 1, + 1, + 3); + Snapshot.FollowUpGuidanceContinueBias += AlignedPacketAcceptedBias; + Snapshot.SuppressedPrimaryQueuePressureCount += + FMath::Max(1, AlignedPacketAcceptedBias - 1); + if (Snapshot.PreferredGuidanceLane == EHyperTwistTrainingCoachGuidanceLane::None + || Snapshot.PreferredGuidanceLane + == EHyperTwistTrainingCoachGuidanceLane::Recommended + || Snapshot.PreferredGuidanceSourceLabel.StartsWith(TEXT("recommendation-history")) + || HyperTwistTrainingRepositoryLibraryInternal::IsAlignedTightFollowUpPacketStructureCoachMemorySource( + Snapshot.PreferredGuidanceSourceLabel) + || HyperTwistTrainingRepositoryLibraryInternal::IsAlignedBroadRecommendedPacketStructureCoachMemorySource( + Snapshot.PreferredGuidanceSourceLabel)) + { + Snapshot.PreferredGuidanceLane = + EHyperTwistTrainingCoachGuidanceLane::FollowUp; + Snapshot.PreferredGuidanceSourceLabel = + TEXT("coach-memory-dashboard-aligned-follow-up-packet-tight-follow-up"); + } + } + else if (AlignedBroadRecommendedPacketAcceptedStartedCount > 0) + { + const int32 AlignedPacketAcceptedRedirectBias = FMath::Clamp( + AlignedBroadRecommendedPacketAcceptedStartedCount + - AlignedTightFollowUpPacketAcceptedStartedCount + + 1, + 1, + 3); + Snapshot.RecommendedGuidanceContinueBias += + AlignedPacketAcceptedRedirectBias; + Snapshot.SuppressedFollowUpQueuePressureCount += + AlignedPacketAcceptedRedirectBias; + if (Snapshot.PreferredGuidanceLane == EHyperTwistTrainingCoachGuidanceLane::None + || Snapshot.PreferredGuidanceLane + == EHyperTwistTrainingCoachGuidanceLane::FollowUp + || Snapshot.PreferredGuidanceSourceLabel.StartsWith(TEXT("recommendation-history")) + || HyperTwistTrainingRepositoryLibraryInternal::IsAlignedTightFollowUpPacketStructureCoachMemorySource( + Snapshot.PreferredGuidanceSourceLabel) + || HyperTwistTrainingRepositoryLibraryInternal::IsAlignedBroadRecommendedPacketStructureCoachMemorySource( + Snapshot.PreferredGuidanceSourceLabel)) + { + Snapshot.PreferredGuidanceLane = + EHyperTwistTrainingCoachGuidanceLane::Recommended; + Snapshot.PreferredGuidanceSourceLabel = + TEXT("coach-memory-dashboard-aligned-follow-up-packet-broad-recommended"); + } + } const bool bStrongMethodDrillRecoveryPacketQueuedHandoff = QueueExecutionSummary.StartedStrongMethodDrillRecoveryPacketQueuedHandoffEventCount > 0; const bool bStrongMethodDrillRecoveryPacketFollowUpHandoff = @@ -9350,6 +9435,18 @@ FHyperTwistTrainingCoachMemorySnapshot UHyperTwistTrainingRepositoryLibrary::Der QueueExecutionSummary.StartedWeakMethodDrillFollowUpPacketFollowUpHandoffEventCount > 0; const bool bWeakMethodDrillFollowUpPacketRecommendedHandoff = QueueExecutionSummary.StartedWeakMethodDrillFollowUpPacketRecommendedHandoffEventCount > 0; + const bool bAlignedTightFollowUpPacketQueuedHandoff = + QueueExecutionSummary.StartedAlignedTightFollowUpPacketQueuedHandoffEventCount > 0; + const bool bAlignedTightFollowUpPacketFollowUpHandoff = + QueueExecutionSummary.StartedAlignedTightFollowUpPacketFollowUpHandoffEventCount > 0; + const bool bAlignedTightFollowUpPacketRecommendedHandoff = + QueueExecutionSummary.StartedAlignedTightFollowUpPacketRecommendedHandoffEventCount > 0; + const bool bAlignedBroadRecommendedPacketQueuedHandoff = + QueueExecutionSummary.StartedAlignedBroadRecommendedPacketQueuedHandoffEventCount > 0; + const bool bAlignedBroadRecommendedPacketFollowUpHandoff = + QueueExecutionSummary.StartedAlignedBroadRecommendedPacketFollowUpHandoffEventCount > 0; + const bool bAlignedBroadRecommendedPacketRecommendedHandoff = + QueueExecutionSummary.StartedAlignedBroadRecommendedPacketRecommendedHandoffEventCount > 0; if (ExplicitQueuedHandoffSignal > 0 || ExplicitFollowUpHandoffSignal > 0 || ExplicitRecommendedHandoffSignal > 0) @@ -9374,6 +9471,16 @@ FHyperTwistTrainingCoachMemorySnapshot UHyperTwistTrainingRepositoryLibrary::Der Snapshot.PreferredCoachHandoffSourceLabel = TEXT("coach-memory-dashboard-method-drill-follow-up-packet-strong-queued"); } + else if (bAlignedTightFollowUpPacketQueuedHandoff) + { + Snapshot.PreferredCoachHandoffSourceLabel = + TEXT("coach-memory-dashboard-aligned-follow-up-packet-tight-queued"); + } + else if (bAlignedBroadRecommendedPacketQueuedHandoff) + { + Snapshot.PreferredCoachHandoffSourceLabel = + TEXT("coach-memory-dashboard-aligned-follow-up-packet-broad-queued"); + } else if (bWeakMethodDrillFollowUpPacketQueuedHandoff) { Snapshot.PreferredCoachHandoffSourceLabel = @@ -9435,6 +9542,16 @@ FHyperTwistTrainingCoachMemorySnapshot UHyperTwistTrainingRepositoryLibrary::Der Snapshot.PreferredCoachHandoffSourceLabel = TEXT("coach-memory-dashboard-method-drill-follow-up-packet-strong-follow-up"); } + else if (bAlignedTightFollowUpPacketFollowUpHandoff) + { + Snapshot.PreferredCoachHandoffSourceLabel = + TEXT("coach-memory-dashboard-aligned-follow-up-packet-tight-follow-up"); + } + else if (bAlignedBroadRecommendedPacketFollowUpHandoff) + { + Snapshot.PreferredCoachHandoffSourceLabel = + TEXT("coach-memory-dashboard-aligned-follow-up-packet-broad-follow-up"); + } else if (bWeakMethodDrillFollowUpPacketFollowUpHandoff) { Snapshot.PreferredCoachHandoffSourceLabel = @@ -9496,6 +9613,16 @@ FHyperTwistTrainingCoachMemorySnapshot UHyperTwistTrainingRepositoryLibrary::Der Snapshot.PreferredCoachHandoffSourceLabel = TEXT("coach-memory-dashboard-method-drill-follow-up-packet-strong-recommended"); } + else if (bAlignedTightFollowUpPacketRecommendedHandoff) + { + Snapshot.PreferredCoachHandoffSourceLabel = + TEXT("coach-memory-dashboard-aligned-follow-up-packet-tight-recommended"); + } + else if (bAlignedBroadRecommendedPacketRecommendedHandoff) + { + Snapshot.PreferredCoachHandoffSourceLabel = + TEXT("coach-memory-dashboard-aligned-follow-up-packet-broad-recommended"); + } else if (bWeakMethodDrillFollowUpPacketRecommendedHandoff) { Snapshot.PreferredCoachHandoffSourceLabel = @@ -11679,6 +11806,12 @@ FHyperTwistTrainingCoachSessionQueueExecutionSummary UHyperTwistTrainingReposito const bool bStrongMethodDrillFollowUpPacketDashboardHandoff = HyperTwistTrainingRepositoryLibraryInternal::IsStrongMethodDrillFollowUpPacketDashboardHandoffSource( HistoryEntry.StartActionSourceLabel); + const bool bAlignedTightFollowUpPacketDashboardHandoff = + HyperTwistTrainingRepositoryLibraryInternal::IsAlignedTightFollowUpPacketDashboardHandoffSource( + HistoryEntry.StartActionSourceLabel); + const bool bAlignedBroadRecommendedPacketDashboardHandoff = + HyperTwistTrainingRepositoryLibraryInternal::IsAlignedBroadRecommendedPacketDashboardHandoffSource( + HistoryEntry.StartActionSourceLabel); const bool bStrongMethodDrillRecoveryPacketDashboardHandoff = HyperTwistTrainingRepositoryLibraryInternal::IsStrongMethodDrillRecoveryPacketDashboardHandoffSource( HistoryEntry.StartActionSourceLabel); @@ -11744,6 +11877,14 @@ FHyperTwistTrainingCoachSessionQueueExecutionSummary UHyperTwistTrainingReposito { Summary.StartedWeakMethodDrillFollowUpPacketQueuedHandoffEventCount += 1; } + if (bAlignedTightFollowUpPacketDashboardHandoff) + { + Summary.StartedAlignedTightFollowUpPacketQueuedHandoffEventCount += 1; + } + if (bAlignedBroadRecommendedPacketDashboardHandoff) + { + Summary.StartedAlignedBroadRecommendedPacketQueuedHandoffEventCount += 1; + } if (bStrongMethodDrillRecoveryPacketDashboardHandoff) { Summary.StartedStrongMethodDrillRecoveryPacketQueuedHandoffEventCount += 1; @@ -11818,6 +11959,14 @@ FHyperTwistTrainingCoachSessionQueueExecutionSummary UHyperTwistTrainingReposito { Summary.StartedWeakMethodDrillFollowUpPacketFollowUpHandoffEventCount += 1; } + if (bAlignedTightFollowUpPacketDashboardHandoff) + { + Summary.StartedAlignedTightFollowUpPacketFollowUpHandoffEventCount += 1; + } + if (bAlignedBroadRecommendedPacketDashboardHandoff) + { + Summary.StartedAlignedBroadRecommendedPacketFollowUpHandoffEventCount += 1; + } if (bStrongMethodDrillRecoveryPacketDashboardHandoff) { Summary.StartedStrongMethodDrillRecoveryPacketFollowUpHandoffEventCount += 1; @@ -11882,6 +12031,14 @@ FHyperTwistTrainingCoachSessionQueueExecutionSummary UHyperTwistTrainingReposito { Summary.StartedWeakMethodDrillFollowUpPacketRecommendedHandoffEventCount += 1; } + if (bAlignedTightFollowUpPacketDashboardHandoff) + { + Summary.StartedAlignedTightFollowUpPacketRecommendedHandoffEventCount += 1; + } + if (bAlignedBroadRecommendedPacketDashboardHandoff) + { + Summary.StartedAlignedBroadRecommendedPacketRecommendedHandoffEventCount += 1; + } if (bStrongMethodDrillRecoveryPacketDashboardHandoff) { Summary.StartedStrongMethodDrillRecoveryPacketRecommendedHandoffEventCount += 1; diff --git a/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistCoachDashboardWidget.h b/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistCoachDashboardWidget.h index 7aaad77..179f2d1 100644 --- a/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistCoachDashboardWidget.h +++ b/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistCoachDashboardWidget.h @@ -1616,6 +1616,8 @@ private: EHyperTwistTrainingCoachHandoffKind::None; bool bDisplayedCoachHandoffRecommendationUsedDeferredFirstSuppressionSignal = false; bool bDisplayedCoachHandoffRecommendationUsedMethodDrillWeighting = false; + bool bDisplayedCoachHandoffRecommendationUsedAlignedTightPacketAcceptedHistory = false; + bool bDisplayedCoachHandoffRecommendationUsedAlignedBroadPacketAcceptedHistory = false; FString DisplayedCoachHandoffMethodDrillRecoveryMemoryStartActionSourceLabel; EHyperTwistCoachDashboardGuidancePreviewLane ActiveGuidancePreviewLane = EHyperTwistCoachDashboardGuidancePreviewLane::None; diff --git a/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingTypes.h b/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingTypes.h index 1651113..8e73b70 100644 --- a/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingTypes.h +++ b/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingTypes.h @@ -3783,6 +3783,24 @@ struct FHyperTwistTrainingCoachSessionQueueExecutionSummary UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") int32 StartedWeakMethodDrillFollowUpPacketRecommendedHandoffEventCount = 0; + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + int32 StartedAlignedTightFollowUpPacketQueuedHandoffEventCount = 0; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + int32 StartedAlignedTightFollowUpPacketFollowUpHandoffEventCount = 0; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + int32 StartedAlignedTightFollowUpPacketRecommendedHandoffEventCount = 0; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + int32 StartedAlignedBroadRecommendedPacketQueuedHandoffEventCount = 0; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + int32 StartedAlignedBroadRecommendedPacketFollowUpHandoffEventCount = 0; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + int32 StartedAlignedBroadRecommendedPacketRecommendedHandoffEventCount = 0; + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") int32 StartedStrongMethodDrillRecoveryPacketQueuedHandoffEventCount = 0;