Persist drill follow-up packet learning upstream

This commit is contained in:
axiomlogicnexus 2026-04-29 16:21:37 +02:00
parent 6f969986c8
commit a43d932aa8
5 changed files with 309 additions and 12 deletions

View file

@ -336,6 +336,30 @@ namespace HyperTwistCoachDashboardWidgetInternal
{
return TEXT("accepted weak retained drill-recovery-posture recommended handoff history");
}
if (SourceLabel == TEXT("coach-memory-dashboard-method-drill-follow-up-packet-strong-queued"))
{
return TEXT("accepted strong drill-follow-up-packet queued handoff history");
}
if (SourceLabel == TEXT("coach-memory-dashboard-method-drill-follow-up-packet-strong-follow-up"))
{
return TEXT("accepted strong drill-follow-up-packet follow-up handoff history");
}
if (SourceLabel == TEXT("coach-memory-dashboard-method-drill-follow-up-packet-strong-recommended"))
{
return TEXT("accepted strong drill-follow-up-packet recommended handoff history");
}
if (SourceLabel == TEXT("coach-memory-dashboard-method-drill-follow-up-packet-weak-queued"))
{
return TEXT("accepted weak drill-follow-up-packet queued handoff history");
}
if (SourceLabel == TEXT("coach-memory-dashboard-method-drill-follow-up-packet-weak-follow-up"))
{
return TEXT("accepted weak drill-follow-up-packet follow-up handoff history");
}
if (SourceLabel == TEXT("coach-memory-dashboard-method-drill-follow-up-packet-weak-recommended"))
{
return TEXT("accepted weak drill-follow-up-packet recommended handoff history");
}
if (SourceLabel == TEXT("coach-memory-dashboard-queued"))
{
return TEXT("accepted queued handoff history");
@ -669,6 +693,42 @@ namespace HyperTwistCoachDashboardWidgetInternal
}
}
FString DashboardMethodDrillFollowUpPacketSourceLabel(
const EHyperTwistTrainingCoachHandoffKind HandoffKind,
const EMethodDrillRecoveryMemoryBias PacketBias)
{
if (PacketBias == EMethodDrillRecoveryMemoryBias::Strong)
{
switch (HandoffKind)
{
case EHyperTwistTrainingCoachHandoffKind::Queue:
return TEXT("dashboard-handoff-method-drill-follow-up-packet-strong-queued");
case EHyperTwistTrainingCoachHandoffKind::FollowUp:
return TEXT("dashboard-handoff-method-drill-follow-up-packet-strong-follow-up");
case EHyperTwistTrainingCoachHandoffKind::Recommended:
return TEXT("dashboard-handoff-method-drill-follow-up-packet-strong-recommended");
default:
return FString();
}
}
if (PacketBias == EMethodDrillRecoveryMemoryBias::Weak)
{
switch (HandoffKind)
{
case EHyperTwistTrainingCoachHandoffKind::Queue:
return TEXT("dashboard-handoff-method-drill-follow-up-packet-weak-queued");
case EHyperTwistTrainingCoachHandoffKind::FollowUp:
return TEXT("dashboard-handoff-method-drill-follow-up-packet-weak-follow-up");
case EHyperTwistTrainingCoachHandoffKind::Recommended:
return TEXT("dashboard-handoff-method-drill-follow-up-packet-weak-recommended");
default:
return FString();
}
}
return FString();
}
const FHyperTwistCoachSignal* FindCoachSignalById(
const TArray<FHyperTwistCoachSignal>& Signals,
const TCHAR* SignalId)
@ -8118,6 +8178,22 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation()
|| bHandoffRecommendationUsedMethodDrillRecoveryMemory
|| bHandoffRecommendationUsedStrongRetainedMethodDrillRecoveryPosture
|| bHandoffRecommendationUsedWeakRetainedMethodDrillRecoveryPosture;
const bool bHandoffRecommendationUsedStrongMethodDrillFollowUpPacket =
bHandoffRecommendationUsedMethodDrillWeighting
&& HandoffRecommendationKind
!= HyperTwistCoachDashboardWidgetInternal::EHandoffRecommendationKind::None
&& MethodDrillFollowUpWeighting.bPreferDrillFollowUp
&& MethodDrillFollowUpWeighting.StrongPacketContinuationCount > 0
&& MethodDrillFollowUpWeighting.StrongPacketContinuationCount
>= MethodDrillFollowUpWeighting.WeakPacketRedirectCount;
const bool bHandoffRecommendationUsedWeakMethodDrillFollowUpPacket =
bHandoffRecommendationUsedMethodDrillWeighting
&& HandoffRecommendationKind
!= HyperTwistCoachDashboardWidgetInternal::EHandoffRecommendationKind::None
&& MethodDrillFollowUpWeighting.bPreferCoachHandoff
&& MethodDrillFollowUpWeighting.WeakPacketRedirectCount > 0
&& MethodDrillFollowUpWeighting.WeakPacketRedirectCount
>= MethodDrillFollowUpWeighting.StrongPacketContinuationCount;
if (bHandoffRecommendationUsedStrongRetainedMethodDrillRecoveryPosture
|| bHandoffRecommendationUsedWeakRetainedMethodDrillRecoveryPosture)
{
@ -8161,6 +8237,17 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation()
true
);
}
else if (bHandoffRecommendationUsedStrongMethodDrillFollowUpPacket
|| bHandoffRecommendationUsedWeakMethodDrillFollowUpPacket)
{
DisplayedCoachHandoffMethodDrillRecoveryMemoryStartActionSourceLabel =
HyperTwistCoachDashboardWidgetInternal::DashboardMethodDrillFollowUpPacketSourceLabel(
DisplayedCoachHandoffRecommendationKind,
bHandoffRecommendationUsedStrongMethodDrillFollowUpPacket
? HyperTwistCoachDashboardWidgetInternal::EMethodDrillRecoveryMemoryBias::Strong
: HyperTwistCoachDashboardWidgetInternal::EMethodDrillRecoveryMemoryBias::Weak
);
}
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%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"),

View file

@ -42,6 +42,12 @@ namespace HyperTwistTrainingCoachLibraryInternal
|| SourceLabel == TEXT("dashboard-handoff-method-drill-queued")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-follow-up")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recommended")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-follow-up-packet-strong-queued")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-follow-up-packet-strong-follow-up")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-follow-up-packet-strong-recommended")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-follow-up-packet-weak-queued")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-follow-up-packet-weak-follow-up")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-follow-up-packet-weak-recommended")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-strong-queued")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-strong-follow-up")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-strong-recommended")
@ -356,6 +362,30 @@ namespace HyperTwistTrainingCoachLibraryInternal
{
return TEXT("accepted drill-driven recommended dashboard handoff");
}
if (SourceLabel == TEXT("dashboard-handoff-method-drill-follow-up-packet-strong-queued"))
{
return TEXT("accepted strong drill-follow-up-packet queued dashboard handoff");
}
if (SourceLabel == TEXT("dashboard-handoff-method-drill-follow-up-packet-strong-follow-up"))
{
return TEXT("accepted strong drill-follow-up-packet follow-up dashboard handoff");
}
if (SourceLabel == TEXT("dashboard-handoff-method-drill-follow-up-packet-strong-recommended"))
{
return TEXT("accepted strong drill-follow-up-packet recommended dashboard handoff");
}
if (SourceLabel == TEXT("dashboard-handoff-method-drill-follow-up-packet-weak-queued"))
{
return TEXT("accepted weak drill-follow-up-packet queued dashboard handoff");
}
if (SourceLabel == TEXT("dashboard-handoff-method-drill-follow-up-packet-weak-follow-up"))
{
return TEXT("accepted weak drill-follow-up-packet follow-up dashboard handoff");
}
if (SourceLabel == TEXT("dashboard-handoff-method-drill-follow-up-packet-weak-recommended"))
{
return TEXT("accepted weak drill-follow-up-packet recommended dashboard handoff");
}
if (SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-strong-queued"))
{
return TEXT("accepted strong drill-recovery-memory queued dashboard handoff");
@ -472,10 +502,18 @@ namespace HyperTwistTrainingCoachLibraryInternal
{
return TEXT("successful method-drill follow-up history");
}
if (SourceLabel == TEXT("coach-memory-method-drill-follow-up-packet-strong"))
{
return TEXT("successful drill-follow-up-packet history");
}
if (SourceLabel == TEXT("coach-memory-method-drill-follow-up-weak"))
{
return TEXT("weak method-drill follow-up history");
}
if (SourceLabel == TEXT("coach-memory-method-drill-follow-up-packet-weak"))
{
return TEXT("weak drill-follow-up-packet history");
}
if (SourceLabel == TEXT("coach-memory-method-drill-recovery-strong"))
{
return TEXT("successful drill-driven recovery history");
@ -639,10 +677,14 @@ namespace HyperTwistTrainingCoachLibraryInternal
{
const bool bPreferredGuidanceSource =
CoachMemorySnapshot.PreferredGuidanceSourceLabel
== TEXT("coach-memory-method-drill-follow-up-strong");
== TEXT("coach-memory-method-drill-follow-up-strong")
|| CoachMemorySnapshot.PreferredGuidanceSourceLabel
== TEXT("coach-memory-method-drill-follow-up-packet-strong");
const bool bPreferredHandoffSource =
CoachMemorySnapshot.PreferredCoachHandoffSourceLabel
== TEXT("coach-memory-method-drill-follow-up-strong");
== TEXT("coach-memory-method-drill-follow-up-strong")
|| CoachMemorySnapshot.PreferredCoachHandoffSourceLabel.StartsWith(
TEXT("coach-memory-dashboard-method-drill-follow-up-packet-strong-"));
if (CoachMemorySnapshot.MethodDrillFollowUpHistoryCount <= 0
&& !bPreferredGuidanceSource
&& !bPreferredHandoffSource)
@ -674,10 +716,14 @@ namespace HyperTwistTrainingCoachLibraryInternal
{
const bool bPreferredGuidanceSource =
CoachMemorySnapshot.PreferredGuidanceSourceLabel
== TEXT("coach-memory-method-drill-follow-up-weak");
== TEXT("coach-memory-method-drill-follow-up-weak")
|| CoachMemorySnapshot.PreferredGuidanceSourceLabel
== TEXT("coach-memory-method-drill-follow-up-packet-weak");
const bool bPreferredHandoffSource =
CoachMemorySnapshot.PreferredCoachHandoffSourceLabel
== TEXT("coach-memory-method-drill-follow-up-weak");
== TEXT("coach-memory-method-drill-follow-up-weak")
|| CoachMemorySnapshot.PreferredCoachHandoffSourceLabel.StartsWith(
TEXT("coach-memory-dashboard-method-drill-follow-up-packet-weak-"));
if (CoachMemorySnapshot.MethodDrillFollowUpHistoryCount <= 0
&& !bPreferredGuidanceSource
&& !bPreferredHandoffSource)

View file

@ -76,6 +76,12 @@ namespace HyperTwistTrainingRepositoryLibraryInternal
return SourceLabel == TEXT("dashboard-handoff-method-drill-queued")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-follow-up")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recommended")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-follow-up-packet-strong-queued")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-follow-up-packet-strong-follow-up")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-follow-up-packet-strong-recommended")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-follow-up-packet-weak-queued")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-follow-up-packet-weak-follow-up")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-follow-up-packet-weak-recommended")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-strong-queued")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-strong-follow-up")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-strong-recommended")
@ -117,6 +123,13 @@ namespace HyperTwistTrainingRepositoryLibraryInternal
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-packet-strong-recommended");
}
bool IsStrongMethodDrillFollowUpPacketDashboardHandoffSource(const FString& SourceLabel)
{
return SourceLabel == TEXT("dashboard-handoff-method-drill-follow-up-packet-strong-queued")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-follow-up-packet-strong-follow-up")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-follow-up-packet-strong-recommended");
}
bool IsWeakMethodDrillRecoveryDashboardHandoffSource(const FString& SourceLabel)
{
return SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-weak-queued")
@ -137,6 +150,13 @@ namespace HyperTwistTrainingRepositoryLibraryInternal
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-packet-weak-recommended");
}
bool IsWeakMethodDrillFollowUpPacketDashboardHandoffSource(const FString& SourceLabel)
{
return SourceLabel == TEXT("dashboard-handoff-method-drill-follow-up-packet-weak-queued")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-follow-up-packet-weak-follow-up")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-follow-up-packet-weak-recommended");
}
bool IsStrongRetainedMethodDrillRecoveryPostureDashboardHandoffSource(
const FString& SourceLabel)
{
@ -191,6 +211,8 @@ namespace HyperTwistTrainingRepositoryLibraryInternal
|| SourceLabel == TEXT("dashboard-guidance-outcome-deferred-overflow-queued")
|| SourceLabel == TEXT("dashboard-handoff-deferred-first-queued")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-queued")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-follow-up-packet-strong-queued")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-follow-up-packet-weak-queued")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-strong-queued")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-packet-strong-queued")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-weak-queued")
@ -204,6 +226,8 @@ namespace HyperTwistTrainingRepositoryLibraryInternal
|| SourceLabel == TEXT("dashboard-guidance-outcome-deferred-overflow-follow-up")
|| SourceLabel == TEXT("dashboard-handoff-deferred-first-follow-up")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-follow-up")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-follow-up-packet-strong-follow-up")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-follow-up-packet-weak-follow-up")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-strong-follow-up")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-packet-strong-follow-up")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-weak-follow-up")
@ -217,6 +241,8 @@ namespace HyperTwistTrainingRepositoryLibraryInternal
|| SourceLabel == TEXT("dashboard-guidance-outcome-deferred-overflow-recommended")
|| SourceLabel == TEXT("dashboard-handoff-deferred-first-recommended")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recommended")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-follow-up-packet-strong-recommended")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-follow-up-packet-weak-recommended")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-strong-recommended")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-packet-strong-recommended")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-weak-recommended")
@ -7118,18 +7144,88 @@ FHyperTwistTrainingCoachMemorySnapshot UHyperTwistTrainingRepositoryLibrary::Der
1,
3)
: 0;
const int32 StrongMethodDrillFollowUpPacketStartedCount =
QueueExecutionSummary.StartedStrongMethodDrillFollowUpPacketQueuedHandoffEventCount
+ QueueExecutionSummary.StartedStrongMethodDrillFollowUpPacketFollowUpHandoffEventCount
+ QueueExecutionSummary.StartedStrongMethodDrillFollowUpPacketRecommendedHandoffEventCount;
const int32 WeakMethodDrillFollowUpPacketStartedCount =
QueueExecutionSummary.StartedWeakMethodDrillFollowUpPacketQueuedHandoffEventCount
+ QueueExecutionSummary.StartedWeakMethodDrillFollowUpPacketFollowUpHandoffEventCount
+ QueueExecutionSummary.StartedWeakMethodDrillFollowUpPacketRecommendedHandoffEventCount;
if (StrongMethodDrillFollowUpPacketStartedCount > 0
&& StrongMethodDrillFollowUpPacketStartedCount
>= WeakMethodDrillFollowUpPacketStartedCount)
{
const int32 MethodDrillFollowUpPacketBias = FMath::Clamp(
StrongMethodDrillFollowUpPacketStartedCount
- WeakMethodDrillFollowUpPacketStartedCount
+ 1,
1,
3
);
Snapshot.FollowUpGuidanceContinueBias += MethodDrillFollowUpPacketBias;
Snapshot.SuppressedPrimaryQueuePressureCount += FMath::Max(
1,
MethodDrillFollowUpPacketBias - 1
);
if (Snapshot.PreferredGuidanceLane == EHyperTwistTrainingCoachGuidanceLane::None
|| Snapshot.PreferredGuidanceLane
== EHyperTwistTrainingCoachGuidanceLane::Recommended
|| Snapshot.PreferredGuidanceSourceLabel.StartsWith(TEXT("recommendation-history"))
|| Snapshot.PreferredGuidanceSourceLabel.StartsWith(TEXT("coach-memory-method-drill")))
{
Snapshot.PreferredGuidanceLane =
EHyperTwistTrainingCoachGuidanceLane::FollowUp;
Snapshot.PreferredGuidanceSourceLabel =
TEXT("coach-memory-method-drill-follow-up-packet-strong");
}
}
else if (WeakMethodDrillFollowUpPacketStartedCount > 0)
{
const int32 MethodDrillFollowUpPacketRedirectBias = FMath::Clamp(
WeakMethodDrillFollowUpPacketStartedCount
- StrongMethodDrillFollowUpPacketStartedCount
+ 1,
1,
2
);
Snapshot.RecommendedGuidanceContinueBias += MethodDrillFollowUpPacketRedirectBias;
Snapshot.SuppressedFollowUpQueuePressureCount += MethodDrillFollowUpPacketRedirectBias;
if (Snapshot.PreferredGuidanceLane == EHyperTwistTrainingCoachGuidanceLane::None
|| Snapshot.PreferredGuidanceLane
== EHyperTwistTrainingCoachGuidanceLane::FollowUp
|| Snapshot.PreferredGuidanceSourceLabel.StartsWith(TEXT("coach-memory-method-drill")))
{
Snapshot.PreferredGuidanceLane =
EHyperTwistTrainingCoachGuidanceLane::Recommended;
Snapshot.PreferredGuidanceSourceLabel =
TEXT("coach-memory-method-drill-follow-up-packet-weak");
}
}
const bool bStrongMethodDrillRecoveryPacketQueuedHandoff =
QueueExecutionSummary.StartedStrongMethodDrillRecoveryPacketQueuedHandoffEventCount > 0;
const bool bStrongMethodDrillRecoveryPacketFollowUpHandoff =
QueueExecutionSummary.StartedStrongMethodDrillRecoveryPacketFollowUpHandoffEventCount > 0;
const bool bStrongMethodDrillRecoveryPacketRecommendedHandoff =
QueueExecutionSummary.StartedStrongMethodDrillRecoveryPacketRecommendedHandoffEventCount > 0;
const bool bStrongMethodDrillFollowUpPacketQueuedHandoff =
QueueExecutionSummary.StartedStrongMethodDrillFollowUpPacketQueuedHandoffEventCount > 0;
const bool bStrongMethodDrillFollowUpPacketFollowUpHandoff =
QueueExecutionSummary.StartedStrongMethodDrillFollowUpPacketFollowUpHandoffEventCount > 0;
const bool bStrongMethodDrillFollowUpPacketRecommendedHandoff =
QueueExecutionSummary.StartedStrongMethodDrillFollowUpPacketRecommendedHandoffEventCount > 0;
const bool bWeakMethodDrillRecoveryPacketQueuedHandoff =
QueueExecutionSummary.StartedWeakMethodDrillRecoveryPacketQueuedHandoffEventCount > 0;
const bool bWeakMethodDrillRecoveryPacketFollowUpHandoff =
QueueExecutionSummary.StartedWeakMethodDrillRecoveryPacketFollowUpHandoffEventCount > 0;
const bool bWeakMethodDrillRecoveryPacketRecommendedHandoff =
QueueExecutionSummary.StartedWeakMethodDrillRecoveryPacketRecommendedHandoffEventCount > 0;
const bool bWeakMethodDrillFollowUpPacketQueuedHandoff =
QueueExecutionSummary.StartedWeakMethodDrillFollowUpPacketQueuedHandoffEventCount > 0;
const bool bWeakMethodDrillFollowUpPacketFollowUpHandoff =
QueueExecutionSummary.StartedWeakMethodDrillFollowUpPacketFollowUpHandoffEventCount > 0;
const bool bWeakMethodDrillFollowUpPacketRecommendedHandoff =
QueueExecutionSummary.StartedWeakMethodDrillFollowUpPacketRecommendedHandoffEventCount > 0;
if (ExplicitQueuedHandoffSignal > 0
|| ExplicitFollowUpHandoffSignal > 0
|| ExplicitRecommendedHandoffSignal > 0)
@ -7150,7 +7246,11 @@ FHyperTwistTrainingCoachMemorySnapshot UHyperTwistTrainingRepositoryLibrary::Der
: HyperTwistTrainingRepositoryLibraryInternal::EMethodDrillRecoveryMemoryBias::None);
Snapshot.PreferredCoachHandoffKind = EHyperTwistTrainingCoachHandoffKind::Queue;
Snapshot.PreferredCoachHandoffSourceLabel =
bStrongMethodDrillRecoveryPacketQueuedHandoff
bStrongMethodDrillFollowUpPacketQueuedHandoff
? TEXT("coach-memory-dashboard-method-drill-follow-up-packet-strong-queued")
: (bWeakMethodDrillFollowUpPacketQueuedHandoff
? TEXT("coach-memory-dashboard-method-drill-follow-up-packet-weak-queued")
: (bStrongMethodDrillRecoveryPacketQueuedHandoff
? TEXT("coach-memory-dashboard-method-drill-recovery-packet-strong-queued")
: (bWeakMethodDrillRecoveryPacketQueuedHandoff
? TEXT("coach-memory-dashboard-method-drill-recovery-packet-weak-queued")
@ -7161,7 +7261,7 @@ FHyperTwistTrainingCoachMemorySnapshot UHyperTwistTrainingRepositoryLibrary::Der
ExplicitMethodDrillQueuedHandoffSignal > 0,
MethodDrillRecoveryMemoryBias,
bRetainedMethodDrillRecoveryPostureDriven
));
))));
}
else if (ExplicitFollowUpHandoffSignal >= ExplicitRecommendedHandoffSignal)
{
@ -7178,7 +7278,11 @@ FHyperTwistTrainingCoachMemorySnapshot UHyperTwistTrainingRepositoryLibrary::Der
: HyperTwistTrainingRepositoryLibraryInternal::EMethodDrillRecoveryMemoryBias::None);
Snapshot.PreferredCoachHandoffKind = EHyperTwistTrainingCoachHandoffKind::FollowUp;
Snapshot.PreferredCoachHandoffSourceLabel =
bStrongMethodDrillRecoveryPacketFollowUpHandoff
bStrongMethodDrillFollowUpPacketFollowUpHandoff
? TEXT("coach-memory-dashboard-method-drill-follow-up-packet-strong-follow-up")
: (bWeakMethodDrillFollowUpPacketFollowUpHandoff
? TEXT("coach-memory-dashboard-method-drill-follow-up-packet-weak-follow-up")
: (bStrongMethodDrillRecoveryPacketFollowUpHandoff
? TEXT("coach-memory-dashboard-method-drill-recovery-packet-strong-follow-up")
: (bWeakMethodDrillRecoveryPacketFollowUpHandoff
? TEXT("coach-memory-dashboard-method-drill-recovery-packet-weak-follow-up")
@ -7189,7 +7293,7 @@ FHyperTwistTrainingCoachMemorySnapshot UHyperTwistTrainingRepositoryLibrary::Der
ExplicitMethodDrillFollowUpHandoffSignal > 0,
MethodDrillRecoveryMemoryBias,
bRetainedMethodDrillRecoveryPostureDriven
));
))));
}
else
{
@ -7206,7 +7310,11 @@ FHyperTwistTrainingCoachMemorySnapshot UHyperTwistTrainingRepositoryLibrary::Der
: HyperTwistTrainingRepositoryLibraryInternal::EMethodDrillRecoveryMemoryBias::None);
Snapshot.PreferredCoachHandoffKind = EHyperTwistTrainingCoachHandoffKind::Recommended;
Snapshot.PreferredCoachHandoffSourceLabel =
bStrongMethodDrillRecoveryPacketRecommendedHandoff
bStrongMethodDrillFollowUpPacketRecommendedHandoff
? TEXT("coach-memory-dashboard-method-drill-follow-up-packet-strong-recommended")
: (bWeakMethodDrillFollowUpPacketRecommendedHandoff
? TEXT("coach-memory-dashboard-method-drill-follow-up-packet-weak-recommended")
: (bStrongMethodDrillRecoveryPacketRecommendedHandoff
? TEXT("coach-memory-dashboard-method-drill-recovery-packet-strong-recommended")
: (bWeakMethodDrillRecoveryPacketRecommendedHandoff
? TEXT("coach-memory-dashboard-method-drill-recovery-packet-weak-recommended")
@ -7217,7 +7325,7 @@ FHyperTwistTrainingCoachMemorySnapshot UHyperTwistTrainingRepositoryLibrary::Der
ExplicitMethodDrillRecommendedHandoffSignal > 0,
MethodDrillRecoveryMemoryBias,
bRetainedMethodDrillRecoveryPostureDriven
));
))));
}
}
const int32 WeightedFollowUpRecoverySignal =
@ -9209,12 +9317,18 @@ FHyperTwistTrainingCoachSessionQueueExecutionSummary UHyperTwistTrainingReposito
const bool bStrongMethodDrillRecoveryDashboardHandoff =
HyperTwistTrainingRepositoryLibraryInternal::IsStrongMethodDrillRecoveryDashboardHandoffSource(
HistoryEntry.StartActionSourceLabel);
const bool bStrongMethodDrillFollowUpPacketDashboardHandoff =
HyperTwistTrainingRepositoryLibraryInternal::IsStrongMethodDrillFollowUpPacketDashboardHandoffSource(
HistoryEntry.StartActionSourceLabel);
const bool bStrongMethodDrillRecoveryPacketDashboardHandoff =
HyperTwistTrainingRepositoryLibraryInternal::IsStrongMethodDrillRecoveryPacketDashboardHandoffSource(
HistoryEntry.StartActionSourceLabel);
const bool bWeakMethodDrillRecoveryDashboardHandoff =
HyperTwistTrainingRepositoryLibraryInternal::IsWeakMethodDrillRecoveryDashboardHandoffSource(
HistoryEntry.StartActionSourceLabel);
const bool bWeakMethodDrillFollowUpPacketDashboardHandoff =
HyperTwistTrainingRepositoryLibraryInternal::IsWeakMethodDrillFollowUpPacketDashboardHandoffSource(
HistoryEntry.StartActionSourceLabel);
const bool bWeakMethodDrillRecoveryPacketDashboardHandoff =
HyperTwistTrainingRepositoryLibraryInternal::IsWeakMethodDrillRecoveryPacketDashboardHandoffSource(
HistoryEntry.StartActionSourceLabel);
@ -9239,6 +9353,14 @@ FHyperTwistTrainingCoachSessionQueueExecutionSummary UHyperTwistTrainingReposito
{
Summary.StartedMethodDrillQueuedHandoffEventCount += 1;
}
if (bStrongMethodDrillFollowUpPacketDashboardHandoff)
{
Summary.StartedStrongMethodDrillFollowUpPacketQueuedHandoffEventCount += 1;
}
if (bWeakMethodDrillFollowUpPacketDashboardHandoff)
{
Summary.StartedWeakMethodDrillFollowUpPacketQueuedHandoffEventCount += 1;
}
if (bStrongMethodDrillRecoveryPacketDashboardHandoff)
{
Summary.StartedStrongMethodDrillRecoveryPacketQueuedHandoffEventCount += 1;
@ -9263,6 +9385,14 @@ FHyperTwistTrainingCoachSessionQueueExecutionSummary UHyperTwistTrainingReposito
{
Summary.StartedMethodDrillFollowUpHandoffEventCount += 1;
}
if (bStrongMethodDrillFollowUpPacketDashboardHandoff)
{
Summary.StartedStrongMethodDrillFollowUpPacketFollowUpHandoffEventCount += 1;
}
if (bWeakMethodDrillFollowUpPacketDashboardHandoff)
{
Summary.StartedWeakMethodDrillFollowUpPacketFollowUpHandoffEventCount += 1;
}
if (bStrongMethodDrillRecoveryPacketDashboardHandoff)
{
Summary.StartedStrongMethodDrillRecoveryPacketFollowUpHandoffEventCount += 1;
@ -9287,6 +9417,14 @@ FHyperTwistTrainingCoachSessionQueueExecutionSummary UHyperTwistTrainingReposito
{
Summary.StartedMethodDrillRecommendedHandoffEventCount += 1;
}
if (bStrongMethodDrillFollowUpPacketDashboardHandoff)
{
Summary.StartedStrongMethodDrillFollowUpPacketRecommendedHandoffEventCount += 1;
}
if (bWeakMethodDrillFollowUpPacketDashboardHandoff)
{
Summary.StartedWeakMethodDrillFollowUpPacketRecommendedHandoffEventCount += 1;
}
if (bStrongMethodDrillRecoveryPacketDashboardHandoff)
{
Summary.StartedStrongMethodDrillRecoveryPacketRecommendedHandoffEventCount += 1;

View file

@ -223,8 +223,12 @@ namespace HyperTwistTrainingSubsystemInternal
{
if (CoachMemorySnapshot.PreferredGuidanceSourceLabel
== TEXT("coach-memory-method-drill-follow-up-strong")
|| CoachMemorySnapshot.PreferredGuidanceSourceLabel
== TEXT("coach-memory-method-drill-follow-up-packet-strong")
|| CoachMemorySnapshot.PreferredCoachHandoffSourceLabel
== TEXT("coach-memory-method-drill-follow-up-strong"))
== TEXT("coach-memory-method-drill-follow-up-strong")
|| CoachMemorySnapshot.PreferredCoachHandoffSourceLabel.StartsWith(
TEXT("coach-memory-dashboard-method-drill-follow-up-packet-strong-")))
{
return true;
}
@ -240,8 +244,12 @@ namespace HyperTwistTrainingSubsystemInternal
{
if (CoachMemorySnapshot.PreferredGuidanceSourceLabel
== TEXT("coach-memory-method-drill-follow-up-weak")
|| CoachMemorySnapshot.PreferredGuidanceSourceLabel
== TEXT("coach-memory-method-drill-follow-up-packet-weak")
|| CoachMemorySnapshot.PreferredCoachHandoffSourceLabel
== TEXT("coach-memory-method-drill-follow-up-weak"))
== TEXT("coach-memory-method-drill-follow-up-weak")
|| CoachMemorySnapshot.PreferredCoachHandoffSourceLabel.StartsWith(
TEXT("coach-memory-dashboard-method-drill-follow-up-packet-weak-")))
{
return true;
}

View file

@ -3669,6 +3669,24 @@ struct FHyperTwistTrainingCoachSessionQueueExecutionSummary
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
int32 StartedMethodDrillRecommendedHandoffEventCount = 0;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
int32 StartedStrongMethodDrillFollowUpPacketQueuedHandoffEventCount = 0;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
int32 StartedStrongMethodDrillFollowUpPacketFollowUpHandoffEventCount = 0;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
int32 StartedStrongMethodDrillFollowUpPacketRecommendedHandoffEventCount = 0;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
int32 StartedWeakMethodDrillFollowUpPacketQueuedHandoffEventCount = 0;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
int32 StartedWeakMethodDrillFollowUpPacketFollowUpHandoffEventCount = 0;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
int32 StartedWeakMethodDrillFollowUpPacketRecommendedHandoffEventCount = 0;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
int32 StartedStrongMethodDrillRecoveryPacketQueuedHandoffEventCount = 0;