Expose dashboard method-drill recovery history status and detail surfaces
This commit is contained in:
parent
1ff81deecc
commit
38a86cd3b5
5 changed files with 359 additions and 2 deletions
|
|
@ -8057,6 +8057,120 @@ UHyperTwistCoachDashboardWidget::GetSelectedMethodDrillRecoveryOutcomeHistoryIns
|
|||
return Surface;
|
||||
}
|
||||
|
||||
FHyperTwistTrainingCoachDashboardMethodDrillRecoveryOutcomeHistoryStatusInspectSurface
|
||||
UHyperTwistCoachDashboardWidget::GetDisplayedMethodDrillRecoveryOutcomeHistoryStatusInspectSurface() const
|
||||
{
|
||||
FHyperTwistTrainingCoachDashboardMethodDrillRecoveryOutcomeHistoryStatusInspectSurface Surface;
|
||||
Surface.Headline = TEXT("Method-drill recovery outcome history status");
|
||||
|
||||
const FHyperTwistTrainingCoachDashboardMethodDrillRecoveryOutcomeHistoryInspectSurface HistorySurface =
|
||||
GetSelectedMethodDrillRecoveryOutcomeHistoryInspectSurface();
|
||||
const FHyperTwistTrainingCoachDashboardMethodDrillRecoveryOutcomeHistoryNavigationInspectSurface NavigationSurface =
|
||||
GetDisplayedMethodDrillRecoveryOutcomeHistoryNavigationInspectSurface();
|
||||
|
||||
Surface.StatusLine = !DisplayedMethodDrillRecoveryOutcomeHistoryStatusLine.IsEmpty()
|
||||
? DisplayedMethodDrillRecoveryOutcomeHistoryStatusLine
|
||||
: HistorySurface.StatusLine;
|
||||
Surface.SelectedEntryOrdinal = NavigationSurface.SelectedEntryOrdinal.IsEmpty()
|
||||
? TEXT("none")
|
||||
: NavigationSurface.SelectedEntryOrdinal;
|
||||
Surface.RecordedAtUtc =
|
||||
HistorySurface.RecordedAtUtc.IsEmpty() ? TEXT("n/a") : HistorySurface.RecordedAtUtc;
|
||||
Surface.AppliedActionLabel = !HistorySurface.AppliedActionLabel.IsEmpty()
|
||||
? HistorySurface.AppliedActionLabel
|
||||
: (NavigationSurface.AppliedActionLabel.IsEmpty()
|
||||
? TEXT("n/a")
|
||||
: NavigationSurface.AppliedActionLabel);
|
||||
Surface.VerdictLine = !HistorySurface.VerdictLine.IsEmpty()
|
||||
? HistorySurface.VerdictLine
|
||||
: (NavigationSurface.VerdictLine.IsEmpty() ? TEXT("n/a") : NavigationSurface.VerdictLine);
|
||||
Surface.SourceDescription = !HistorySurface.SourceDescription.IsEmpty()
|
||||
? HistorySurface.SourceDescription
|
||||
: (NavigationSurface.SourceDescription.IsEmpty()
|
||||
? TEXT("n/a")
|
||||
: NavigationSurface.SourceDescription);
|
||||
Surface.PacketStructureRecoveryLine = HistorySurface.PacketStructureRecoveryLine.IsEmpty()
|
||||
? TEXT("none")
|
||||
: HistorySurface.PacketStructureRecoveryLine;
|
||||
Surface.RetainedPostureLine = HistorySurface.RetainedPostureLine.IsEmpty()
|
||||
? TEXT("n/a")
|
||||
: HistorySurface.RetainedPostureLine;
|
||||
Surface.ReliablePlanRecoveryLine = HistorySurface.ReliablePlanRecoveryLine.IsEmpty()
|
||||
? TEXT("none")
|
||||
: HistorySurface.ReliablePlanRecoveryLine;
|
||||
Surface.SelectedHistoryIndex = HistorySurface.SelectedHistoryIndex;
|
||||
Surface.HistoryEntryCount = HistorySurface.HistoryEntryCount;
|
||||
Surface.bHasSelectedEntry = HistorySurface.bHasSelectedEntry;
|
||||
Surface.bSelectedEntryIsLatest = NavigationSurface.bSelectedEntryIsLatest;
|
||||
return Surface;
|
||||
}
|
||||
|
||||
FHyperTwistTrainingCoachDashboardMethodDrillRecoveryOutcomeHistoryDetailInspectSurface
|
||||
UHyperTwistCoachDashboardWidget::GetDisplayedMethodDrillRecoveryOutcomeHistoryDetailInspectSurface() const
|
||||
{
|
||||
FHyperTwistTrainingCoachDashboardMethodDrillRecoveryOutcomeHistoryDetailInspectSurface Surface;
|
||||
Surface.Headline = TEXT("Method-drill recovery outcome history detail");
|
||||
|
||||
const FHyperTwistTrainingCoachDashboardMethodDrillRecoveryOutcomeHistoryInspectSurface HistorySurface =
|
||||
GetSelectedMethodDrillRecoveryOutcomeHistoryInspectSurface();
|
||||
|
||||
Surface.DetailLine = !DisplayedMethodDrillRecoveryOutcomeHistoryDetailLine.IsEmpty()
|
||||
? DisplayedMethodDrillRecoveryOutcomeHistoryDetailLine
|
||||
: HistorySurface.DetailLine;
|
||||
Surface.SourceLabel = HistorySurface.SourceLabel.IsEmpty() ? TEXT("n/a") : HistorySurface.SourceLabel;
|
||||
Surface.SourceDescription =
|
||||
HistorySurface.SourceDescription.IsEmpty() ? TEXT("n/a") : HistorySurface.SourceDescription;
|
||||
Surface.AppliedActionLabel =
|
||||
HistorySurface.AppliedActionLabel.IsEmpty() ? TEXT("n/a") : HistorySurface.AppliedActionLabel;
|
||||
Surface.VerdictLine = HistorySurface.VerdictLine.IsEmpty() ? TEXT("n/a") : HistorySurface.VerdictLine;
|
||||
Surface.PacketStructureRecoveryLine = HistorySurface.PacketStructureRecoveryLine.IsEmpty()
|
||||
? TEXT("none")
|
||||
: HistorySurface.PacketStructureRecoveryLine;
|
||||
Surface.RetainedPostureLine = HistorySurface.RetainedPostureLine.IsEmpty()
|
||||
? TEXT("n/a")
|
||||
: HistorySurface.RetainedPostureLine;
|
||||
Surface.ReliablePlanRecoveryLine = HistorySurface.ReliablePlanRecoveryLine.IsEmpty()
|
||||
? TEXT("none")
|
||||
: HistorySurface.ReliablePlanRecoveryLine;
|
||||
Surface.SelectedHistoryIndex = HistorySurface.SelectedHistoryIndex;
|
||||
Surface.HistoryEntryCount = HistorySurface.HistoryEntryCount;
|
||||
Surface.BeforePressureScore = HistorySurface.BeforePressureScore;
|
||||
Surface.AfterPressureScore = HistorySurface.AfterPressureScore;
|
||||
Surface.BeforeDeferredEventCount = HistorySurface.BeforeDeferredEventCount;
|
||||
Surface.AfterDeferredEventCount = HistorySurface.AfterDeferredEventCount;
|
||||
Surface.AppliedAction = HistorySurface.AppliedAction;
|
||||
Surface.bHasSelectedEntry = HistorySurface.bHasSelectedEntry;
|
||||
Surface.bSucceeded = HistorySurface.bSucceeded;
|
||||
Surface.bReducedFriction = HistorySurface.bReducedFriction;
|
||||
Surface.bShiftedFriction = HistorySurface.bShiftedFriction;
|
||||
Surface.bBeforeBlockedFollowUp = HistorySurface.bBeforeBlockedFollowUp;
|
||||
Surface.bAfterBlockedFollowUp = HistorySurface.bAfterBlockedFollowUp;
|
||||
Surface.bBeforeOutstandingDeferred = HistorySurface.bBeforeOutstandingDeferred;
|
||||
Surface.bAfterOutstandingDeferred = HistorySurface.bAfterOutstandingDeferred;
|
||||
Surface.bBeforeCompletionGap = HistorySurface.bBeforeCompletionGap;
|
||||
Surface.bAfterCompletionGap = HistorySurface.bAfterCompletionGap;
|
||||
Surface.bUsedDeferredFirstSuppressionSignal =
|
||||
HistorySurface.bUsedDeferredFirstSuppressionSignal;
|
||||
Surface.bUsedMethodDrillHandoffSignal = HistorySurface.bUsedMethodDrillHandoffSignal;
|
||||
Surface.bUsedNarrowMethodDrillPacketStructureRecovery =
|
||||
HistorySurface.bUsedNarrowMethodDrillPacketStructureRecovery;
|
||||
Surface.bUsedBroadMethodDrillPacketStructureRecovery =
|
||||
HistorySurface.bUsedBroadMethodDrillPacketStructureRecovery;
|
||||
Surface.bUsedStrongRetainedMethodDrillRecoveryPosture =
|
||||
HistorySurface.bUsedStrongRetainedMethodDrillRecoveryPosture;
|
||||
Surface.bUsedWeakRetainedMethodDrillRecoveryPosture =
|
||||
HistorySurface.bUsedWeakRetainedMethodDrillRecoveryPosture;
|
||||
Surface.bUsedReliableTrustedTightStructurePlanRecovery =
|
||||
HistorySurface.bUsedReliableTrustedTightStructurePlanRecovery;
|
||||
Surface.bUsedReliableTrustedBroadStructurePlanRecovery =
|
||||
HistorySurface.bUsedReliableTrustedBroadStructurePlanRecovery;
|
||||
Surface.bUsedReliableAlignedTrustedTightStructurePlanRecovery =
|
||||
HistorySurface.bUsedReliableAlignedTrustedTightStructurePlanRecovery;
|
||||
Surface.bUsedReliableAlignedTrustedBroadStructurePlanRecovery =
|
||||
HistorySurface.bUsedReliableAlignedTrustedBroadStructurePlanRecovery;
|
||||
return Surface;
|
||||
}
|
||||
|
||||
FHyperTwistTrainingCoachDashboardMethodDrillRecoveryOutcomeHistoryNavigationInspectSurface
|
||||
UHyperTwistCoachDashboardWidget::GetDisplayedMethodDrillRecoveryOutcomeHistoryNavigationInspectSurface() const
|
||||
{
|
||||
|
|
@ -27652,11 +27766,13 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation()
|
|||
MethodDrillRecoveryHistoryHeaderTextBlock->SetText(FText::FromString(
|
||||
TEXT("[Drill Recovery History]")));
|
||||
}
|
||||
DisplayedMethodDrillRecoveryOutcomeHistoryStatusLine = MethodDrillRecoveryHistoryStatusLine;
|
||||
if (MethodDrillRecoveryHistoryStatusTextBlock != nullptr)
|
||||
{
|
||||
MethodDrillRecoveryHistoryStatusTextBlock->SetText(FText::FromString(
|
||||
MethodDrillRecoveryHistoryStatusLine));
|
||||
}
|
||||
DisplayedMethodDrillRecoveryOutcomeHistoryDetailLine = MethodDrillRecoveryHistoryDetailLine;
|
||||
if (MethodDrillRecoveryHistoryDetailTextBlock != nullptr)
|
||||
{
|
||||
MethodDrillRecoveryHistoryDetailTextBlock->SetText(FText::FromString(
|
||||
|
|
|
|||
|
|
@ -767,6 +767,14 @@ public:
|
|||
FHyperTwistTrainingCoachDashboardMethodDrillRecoveryOutcomeHistoryInspectSurface
|
||||
GetSelectedMethodDrillRecoveryOutcomeHistoryInspectSurface() const;
|
||||
|
||||
UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
|
||||
FHyperTwistTrainingCoachDashboardMethodDrillRecoveryOutcomeHistoryStatusInspectSurface
|
||||
GetDisplayedMethodDrillRecoveryOutcomeHistoryStatusInspectSurface() const;
|
||||
|
||||
UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
|
||||
FHyperTwistTrainingCoachDashboardMethodDrillRecoveryOutcomeHistoryDetailInspectSurface
|
||||
GetDisplayedMethodDrillRecoveryOutcomeHistoryDetailInspectSurface() const;
|
||||
|
||||
UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
|
||||
FHyperTwistTrainingCoachDashboardMethodDrillRecoveryOutcomeHistoryNavigationInspectSurface
|
||||
GetDisplayedMethodDrillRecoveryOutcomeHistoryNavigationInspectSurface() const;
|
||||
|
|
@ -2152,6 +2160,8 @@ private:
|
|||
FString DisplayedSchedulePolicyLine;
|
||||
FString DisplayedClosureRecoveryStatusLine;
|
||||
FString DisplayedClosureRecoveryDetailLine;
|
||||
FString DisplayedMethodDrillRecoveryOutcomeHistoryStatusLine;
|
||||
FString DisplayedMethodDrillRecoveryOutcomeHistoryDetailLine;
|
||||
FString DisplayedHandoffHistoryStatusLine;
|
||||
FString DisplayedHandoffHistoryDetailLine;
|
||||
FString DisplayedGuidanceDecisionHistoryStatusLine;
|
||||
|
|
|
|||
|
|
@ -9216,6 +9216,183 @@ struct FHyperTwistTrainingCoachDashboardMethodDrillRecoveryOutcomeHistoryInspect
|
|||
}
|
||||
};
|
||||
|
||||
USTRUCT(BlueprintType)
|
||||
struct FHyperTwistTrainingCoachDashboardMethodDrillRecoveryOutcomeHistoryStatusInspectSurface
|
||||
{
|
||||
GENERATED_BODY()
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString Headline;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString StatusLine;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString SelectedEntryOrdinal;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString RecordedAtUtc;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString AppliedActionLabel;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString VerdictLine;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString SourceDescription;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString PacketStructureRecoveryLine;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString RetainedPostureLine;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString ReliablePlanRecoveryLine;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
int32 SelectedHistoryIndex = INDEX_NONE;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
int32 HistoryEntryCount = 0;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bHasSelectedEntry = false;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bSelectedEntryIsLatest = false;
|
||||
|
||||
bool IsStructurallyValid() const
|
||||
{
|
||||
return !StatusLine.IsEmpty()
|
||||
|| bHasSelectedEntry
|
||||
|| HistoryEntryCount > 0;
|
||||
}
|
||||
};
|
||||
|
||||
USTRUCT(BlueprintType)
|
||||
struct FHyperTwistTrainingCoachDashboardMethodDrillRecoveryOutcomeHistoryDetailInspectSurface
|
||||
{
|
||||
GENERATED_BODY()
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString Headline;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString DetailLine;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString SourceLabel;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString SourceDescription;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString AppliedActionLabel;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString VerdictLine;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString PacketStructureRecoveryLine;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString RetainedPostureLine;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString ReliablePlanRecoveryLine;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
int32 SelectedHistoryIndex = INDEX_NONE;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
int32 HistoryEntryCount = 0;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
float BeforePressureScore = 0.0f;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
float AfterPressureScore = 0.0f;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
int32 BeforeDeferredEventCount = 0;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
int32 AfterDeferredEventCount = 0;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
EHyperTwistTrainingQueueRecoveryAction AppliedAction =
|
||||
EHyperTwistTrainingQueueRecoveryAction::None;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bHasSelectedEntry = false;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bSucceeded = false;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bReducedFriction = false;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bShiftedFriction = false;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bBeforeBlockedFollowUp = false;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bAfterBlockedFollowUp = false;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bBeforeOutstandingDeferred = false;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bAfterOutstandingDeferred = false;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bBeforeCompletionGap = false;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bAfterCompletionGap = false;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bUsedDeferredFirstSuppressionSignal = false;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bUsedMethodDrillHandoffSignal = false;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bUsedNarrowMethodDrillPacketStructureRecovery = false;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bUsedBroadMethodDrillPacketStructureRecovery = false;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bUsedStrongRetainedMethodDrillRecoveryPosture = false;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bUsedWeakRetainedMethodDrillRecoveryPosture = false;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bUsedReliableTrustedTightStructurePlanRecovery = false;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bUsedReliableTrustedBroadStructurePlanRecovery = false;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bUsedReliableAlignedTrustedTightStructurePlanRecovery = false;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bUsedReliableAlignedTrustedBroadStructurePlanRecovery = false;
|
||||
|
||||
bool IsStructurallyValid() const
|
||||
{
|
||||
return !DetailLine.IsEmpty()
|
||||
|| bHasSelectedEntry
|
||||
|| HistoryEntryCount > 0;
|
||||
}
|
||||
};
|
||||
|
||||
USTRUCT(BlueprintType)
|
||||
struct FHyperTwistTrainingCoachDashboardMethodDrillRecoveryOutcomeHistoryNavigationInspectSurface
|
||||
{
|
||||
|
|
|
|||
|
|
@ -69,8 +69,8 @@ Current correction call from the source-exposed audit and current execution refr
|
|||
- the latest landed bounded `Phase 4` packet closes the retained-idle comparison/outcome actionability gap at the end of the recognition-assisted coach-to-review continuity lane, and the final retained-surface confirmation pass now leaves that closure lane functionally complete
|
||||
- the retained idle widget surface now keeps retained comparison and decision history inspectable without continuing to advertise live launch or guidance-outcome actions once the coach-to-review loop has already collapsed to truthful closed-loop idle
|
||||
- the now-complete deliberate `UHyperTwistTrainingRuntimeLibrary` world-context consumer lane reaches through active generated-mode selector option owned-execution split-phase current-selection merged ordered roster phase-id lookup, normalized-order lookup, and evaluation-order lookup inspect surfaces, so gameplay/Blueprint callers can inspect one retained merged-roster row directly by phase id, normalized order, or evaluation order without scanning the merged roster array or re-running inspect derivation details directly
|
||||
- the latest landed bounded `Phase 4` packet stays adjacent in that same retained-history dashboard lane and adds the dedicated method-drill follow-up history status/detail inspect pair over the exact displayed retained-history lines already shown by the widget, so gameplay/Blueprint callers can inspect the current retained drill-follow-up text band directly without scraping text blocks or routing only through the broader selected-history and navigation surfaces
|
||||
- the retained method-drill-follow-up-history band is now functionally complete enough to stop widening it by drift; the next best clean move is to stay in the same retained-history dashboard neighborhood and expose the displayed method-drill recovery outcome history status/detail pair over the current method-drill-recovery-history text band
|
||||
- the latest landed bounded `Phase 4` packet stays adjacent in that same retained-history dashboard lane and adds the dedicated method-drill recovery outcome history status/detail inspect pair over the exact displayed retained-history lines already shown by the widget, so gameplay/Blueprint callers can inspect the current retained drill-recovery text band directly without scraping text blocks or routing only through the broader selected-history and navigation surfaces
|
||||
- the retained method-drill-recovery-history band is now functionally complete enough to stop widening it by drift; the next best clean move is to stay in the same retained-history dashboard neighborhood and expose the displayed method-drill recovery memory history status/detail pair over the current method-drill-recovery-memory-history text band
|
||||
- the current execution-discipline rule that broad refactor / monolith-splitting work should not interrupt the active bounded roadmap packet unless structure is actually blocking it
|
||||
|
||||
## Donor portfolio phase taxonomy
|
||||
|
|
|
|||
|
|
@ -0,0 +1,54 @@
|
|||
# HyperTwist Phase 4 dashboard method-drill recovery outcome history status detail inspect surface packet
|
||||
|
||||
- bounded Phase `4` dashboard-consumer slice
|
||||
- date: `2026-05-11`
|
||||
|
||||
## Intent
|
||||
|
||||
Stay adjacent in the retained-history dashboard lane and expose the dedicated method-drill recovery outcome history text band directly to gameplay and Blueprint callers.
|
||||
|
||||
## Why this packet exists
|
||||
|
||||
`UHyperTwistCoachDashboardWidget` already displayed:
|
||||
|
||||
- the current `Drill Recovery History` status line
|
||||
- the current `Drill Recovery History` detail line
|
||||
|
||||
But those two lines only surfaced through `MethodDrillRecoveryHistoryStatusTextBlock` and `MethodDrillRecoveryHistoryDetailTextBlock`. Callers could inspect the selected retained recovery outcome and the prev/next navigation posture separately, but there was still no dedicated inspect surface for the exact retained-history text band the dashboard was already presenting.
|
||||
|
||||
## What changed
|
||||
|
||||
- added `FHyperTwistTrainingCoachDashboardMethodDrillRecoveryOutcomeHistoryStatusInspectSurface`
|
||||
- added `FHyperTwistTrainingCoachDashboardMethodDrillRecoveryOutcomeHistoryDetailInspectSurface`
|
||||
- added `GetDisplayedMethodDrillRecoveryOutcomeHistoryStatusInspectSurface()`
|
||||
- added `GetDisplayedMethodDrillRecoveryOutcomeHistoryDetailInspectSurface()`
|
||||
- retained the exact displayed method-drill-recovery-history status/detail lines inside the widget so the new surfaces report the same live strings the dashboard is already presenting
|
||||
- composed the status surface over the already-landed selected method-drill-recovery-outcome history and method-drill-recovery-outcome history navigation surfaces
|
||||
- composed the detail surface over the already-landed selected method-drill-recovery-outcome history surface so the packet stayed bounded and reused the same retained-history derivation
|
||||
|
||||
## Files
|
||||
|
||||
- `C:\HyperTwist\UnrealHyperTwist\Source\UnrealHyperTwist\Public\HyperTwistTraining\HyperTwistTrainingTypes.h`
|
||||
- `C:\HyperTwist\UnrealHyperTwist\Source\UnrealHyperTwist\Public\HyperTwistTraining\HyperTwistCoachDashboardWidget.h`
|
||||
- `C:\HyperTwist\UnrealHyperTwist\Source\UnrealHyperTwist\Private\HyperTwistTraining\HyperTwistCoachDashboardWidget.cpp`
|
||||
- `C:\HyperTwist\docs\HYPERTWIST_ROADMAP_OVERHAUL_EXPANSION_GUIDE.md`
|
||||
|
||||
## Outcome
|
||||
|
||||
Gameplay and Blueprint callers can now inspect:
|
||||
|
||||
- the exact displayed method-drill-recovery-history status line
|
||||
- the exact displayed method-drill-recovery-history detail line
|
||||
- selected retained entry ordinal, recorded time, applied action, verdict, source description, packet recovery posture, retained posture, and reliable-plan recovery context
|
||||
- selected retained before/after pressure and deferred counts plus blocked-follow-up, deferred, completion-gap, and weighted recovery signal posture
|
||||
|
||||
without scraping widget text blocks or stitching together the selected-history and navigation wrappers manually.
|
||||
|
||||
## Validation
|
||||
|
||||
- full `Development Editor | Win64` MSBuild on `UnrealHyperTwist.sln`
|
||||
- passed with `0 Warning(s), 0 Error(s)`
|
||||
|
||||
## Next clean slice
|
||||
|
||||
Treat the retained method-drill-recovery-history band as functionally complete enough and stay in the same retained-history dashboard neighborhood to expose the displayed method-drill recovery memory history status/detail pair over the current method-drill-recovery-memory-history text band.
|
||||
Loading…
Add table
Reference in a new issue