Harden XR controller ownership truth surfaces
This commit is contained in:
parent
b99227c84a
commit
3cdfa8b1e0
18 changed files with 809 additions and 267 deletions
|
|
@ -78,7 +78,7 @@ namespace HyperTwistTrainingControlSurfaceFormatting
|
|||
)
|
||||
{
|
||||
return FString::Printf(
|
||||
TEXT("Preferences continuity: %s | camera export %s | immersive recall %s | recall scopes %d | preference fields %d | polished rebinding and broader control-settings UI are not yet shipped."),
|
||||
TEXT("Preferences continuity: %s | camera export %s | immersive recall %s | recall scopes %d | preference fields %d | controller settings/rebinding are now first-party-owned, while packaged controller proof is not yet shipped."),
|
||||
*DescribeAggregateReadyState(
|
||||
bCameraSettingsContinuityReady,
|
||||
bImmersiveSessionRecallReady),
|
||||
|
|
@ -186,11 +186,13 @@ namespace HyperTwistTrainingControlSurfaceFormatting
|
|||
const bool bMagicCube5DPersistenceSettingsReady,
|
||||
const bool bMagic120CellSelectorSettingsReady,
|
||||
const bool bMagicCube5DSelectorSettingsReady,
|
||||
const bool bRepositoryBackedSelectorRecallReady
|
||||
const bool bRepositoryBackedSelectorRecallReady,
|
||||
const bool bControllerRebindingOwnershipReady,
|
||||
const bool bWindowsPackagedControllerProofReady
|
||||
)
|
||||
{
|
||||
return FString::Printf(
|
||||
TEXT("camera %s | immersive %s | 120-cell owned settings %s | 5D owned settings %s | selectors %s | selector recall %s | XR rebinding not yet shipped"),
|
||||
TEXT("camera %s | immersive %s | 120-cell owned settings %s | 5D owned settings %s | selectors %s | selector recall %s | XR rebinding %s | packaged proof %s"),
|
||||
*DescribeOwnedContinuityState(
|
||||
bCameraSettingsReady,
|
||||
bCameraSettingsContinuityReady),
|
||||
|
|
@ -206,7 +208,9 @@ namespace HyperTwistTrainingControlSurfaceFormatting
|
|||
*DescribeAggregateReadyState(
|
||||
bMagic120CellSelectorSettingsReady,
|
||||
bMagicCube5DSelectorSettingsReady),
|
||||
bRepositoryBackedSelectorRecallReady ? TEXT("ready") : TEXT("unavailable")
|
||||
bRepositoryBackedSelectorRecallReady ? TEXT("ready") : TEXT("unavailable"),
|
||||
bControllerRebindingOwnershipReady ? TEXT("owned") : TEXT("missing"),
|
||||
bWindowsPackagedControllerProofReady ? TEXT("ready") : TEXT("not yet shipped")
|
||||
);
|
||||
}
|
||||
|
||||
|
|
@ -338,11 +342,13 @@ namespace HyperTwistTrainingControlSurfaceFormatting
|
|||
const bool bActiveHigherDimensionalProfileVisible,
|
||||
const bool bRepositoryBackedSelectorRecallReady,
|
||||
const bool bCameraSettingsContinuityReady,
|
||||
const bool bImmersiveSessionRecallReady
|
||||
const bool bImmersiveSessionRecallReady,
|
||||
const bool bControllerRebindingOwnershipReady,
|
||||
const bool bWindowsPackagedControllerProofReady
|
||||
)
|
||||
{
|
||||
return FString::Printf(
|
||||
TEXT("classic keyboard %s | immersive presets %s | 120-cell family %s | 5D family %s | active selection %s | selector recall %s | profile continuity %s | controller rebinding not yet shipped"),
|
||||
TEXT("classic keyboard %s | immersive presets %s | 120-cell family %s | 5D family %s | active selection %s | selector recall %s | profile continuity %s | controller rebinding %s | packaged proof %s"),
|
||||
bClassicKeyboardProfileReady ? TEXT("ready") : TEXT("missing"),
|
||||
bImmersivePresenceProfileReady ? TEXT("ready") : TEXT("missing"),
|
||||
bMagic120CellProfileReady ? TEXT("ready") : TEXT("missing"),
|
||||
|
|
@ -351,7 +357,9 @@ namespace HyperTwistTrainingControlSurfaceFormatting
|
|||
bRepositoryBackedSelectorRecallReady ? TEXT("ready") : TEXT("unavailable"),
|
||||
*DescribeAggregateReadyState(
|
||||
bCameraSettingsContinuityReady,
|
||||
bImmersiveSessionRecallReady)
|
||||
bImmersiveSessionRecallReady),
|
||||
bControllerRebindingOwnershipReady ? TEXT("owned") : TEXT("missing"),
|
||||
bWindowsPackagedControllerProofReady ? TEXT("ready") : TEXT("not yet shipped")
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -85,12 +85,19 @@ namespace HyperTwistTrainingPanelWidgetInternal
|
|||
FHyperTwistXrRuntimeOwnershipSurface RuntimeSurface;
|
||||
FHyperTwistXrPreferenceProfile PreferenceProfile;
|
||||
FHyperTwistXrControllerBindingProfile ControllerBindingProfile;
|
||||
FHyperTwistXrControllerSettingsOwnershipSurface ControllerSettingsSurface;
|
||||
bool bRuntimeOwnerReady = false;
|
||||
bool bPreferenceProfileReady = false;
|
||||
bool bControllerBindingProfileReady = false;
|
||||
bool bControllerSettingsOwnershipReady = false;
|
||||
bool bControllerRebindingOwnershipReady = false;
|
||||
bool bWindowsPackagedControllerProofReady = false;
|
||||
int32 PreferenceFieldCount = 0;
|
||||
int32 ControllerBindingAxisCount = 0;
|
||||
int32 SupportedControllerFamilyCount = 0;
|
||||
int32 ControllerSettingsFieldCount = 0;
|
||||
int32 ControllerRebindableInputCount = 0;
|
||||
int32 ControllerLayoutPresetCount = 0;
|
||||
};
|
||||
|
||||
FString DescribeBool(const bool bValue)
|
||||
|
|
@ -602,15 +609,32 @@ namespace HyperTwistTrainingPanelWidgetInternal
|
|||
UHyperTwistXrRuntimeLibrary::GetDefaultXrPreferenceProfile();
|
||||
Facts.ControllerBindingProfile =
|
||||
UHyperTwistXrRuntimeLibrary::GetDefaultXrControllerBindingProfile();
|
||||
Facts.ControllerSettingsSurface =
|
||||
UHyperTwistXrRuntimeLibrary::BuildBundledXrControllerSettingsOwnershipSurface();
|
||||
Facts.bRuntimeOwnerReady = Facts.RuntimeSurface.IsStructurallyValid();
|
||||
Facts.bPreferenceProfileReady = Facts.PreferenceProfile.IsStructurallyValid();
|
||||
Facts.bControllerBindingProfileReady =
|
||||
Facts.ControllerBindingProfile.IsStructurallyValid();
|
||||
Facts.bControllerSettingsOwnershipReady =
|
||||
Facts.ControllerSettingsSurface.IsStructurallyValid()
|
||||
&& Facts.ControllerSettingsSurface.bUserFacingSettingsReady;
|
||||
Facts.bControllerRebindingOwnershipReady =
|
||||
Facts.ControllerSettingsSurface.IsStructurallyValid()
|
||||
&& Facts.ControllerSettingsSurface.bUserFacingRebindingReady;
|
||||
Facts.bWindowsPackagedControllerProofReady =
|
||||
Facts.ControllerSettingsSurface.IsStructurallyValid()
|
||||
&& Facts.ControllerSettingsSurface.bWindowsPackagedControllerProofReady;
|
||||
Facts.PreferenceFieldCount = Facts.PreferenceProfile.PreferenceFieldTags.Num();
|
||||
Facts.ControllerBindingAxisCount =
|
||||
Facts.ControllerBindingProfile.RequiredAxisNames.Num();
|
||||
Facts.SupportedControllerFamilyCount =
|
||||
Facts.RuntimeSurface.SupportedControllerFamilies.Num();
|
||||
Facts.ControllerSettingsFieldCount =
|
||||
Facts.ControllerSettingsSurface.UserVisibleSettingFieldTags.Num();
|
||||
Facts.ControllerRebindableInputCount =
|
||||
Facts.ControllerSettingsSurface.RebindableInputNames.Num();
|
||||
Facts.ControllerLayoutPresetCount =
|
||||
Facts.ControllerSettingsSurface.LayoutPresetIds.Num();
|
||||
return Facts;
|
||||
}
|
||||
|
||||
|
|
@ -691,6 +715,38 @@ namespace HyperTwistTrainingPanelWidgetInternal
|
|||
);
|
||||
}
|
||||
|
||||
FString BuildXrControllerSettingsOwnershipLine(
|
||||
const FXrRuntimeOwnershipFacts& Facts
|
||||
)
|
||||
{
|
||||
return FString::Printf(
|
||||
TEXT("XR controller settings: %s | rebinding %s | owner %s | surface %s | default layout %s | settings fields %d | rebindable inputs %d | layout presets %d | families %d."),
|
||||
*DescribeReadyState(Facts.bControllerSettingsOwnershipReady),
|
||||
*DescribeReadyState(Facts.bControllerRebindingOwnershipReady),
|
||||
*DescribeIdIfReady(
|
||||
Facts.bControllerSettingsOwnershipReady,
|
||||
Facts.ControllerSettingsSurface.SettingsOwnerId),
|
||||
*DescribeIdIfReady(
|
||||
Facts.bControllerRebindingOwnershipReady,
|
||||
Facts.ControllerSettingsSurface.RebindingSurfaceId),
|
||||
*DescribeIdIfReady(
|
||||
Facts.bControllerSettingsOwnershipReady,
|
||||
Facts.ControllerSettingsSurface.DefaultLayoutPresetId),
|
||||
DescribeCountIfReady(
|
||||
Facts.bControllerSettingsOwnershipReady,
|
||||
Facts.ControllerSettingsFieldCount),
|
||||
DescribeCountIfReady(
|
||||
Facts.bControllerRebindingOwnershipReady,
|
||||
Facts.ControllerRebindableInputCount),
|
||||
DescribeCountIfReady(
|
||||
Facts.bControllerSettingsOwnershipReady,
|
||||
Facts.ControllerLayoutPresetCount),
|
||||
DescribeCountIfReady(
|
||||
Facts.bControllerSettingsOwnershipReady,
|
||||
Facts.SupportedControllerFamilyCount)
|
||||
);
|
||||
}
|
||||
|
||||
const FXrControllerBoundaryFacts& GetXrControllerBoundaryFacts()
|
||||
{
|
||||
static const FXrControllerBoundaryFacts CachedFacts = []()
|
||||
|
|
@ -704,21 +760,23 @@ namespace HyperTwistTrainingPanelWidgetInternal
|
|||
|
||||
FString BuildControlInputXrBoundaryLine()
|
||||
{
|
||||
return TEXT("Current XR host/plugin decision: bounded OpenXR runtime ownership is now first-party-owned inside the desktop simulator, but full native controller widening remains desktop-hosted No-Go until polished settings/rebinding follow-through and Windows packaged controller validation are complete.");
|
||||
return TEXT("Current XR host/plugin decision: bounded OpenXR runtime ownership plus first-party controller settings/rebinding now exist inside the desktop simulator, but full native controller widening remains desktop-hosted No-Go until Windows packaged controller validation is complete.");
|
||||
}
|
||||
|
||||
FString BuildControlSettingsXrBoundaryLine(const bool bOpenXrProjectPluginEnabled)
|
||||
{
|
||||
return FString::Printf(
|
||||
TEXT("XR/controller completion: the broader host decision remains desktop-hosted No-Go; project OpenXR plugin %s; bounded runtime owners now exist, but polished settings/rebinding follow-through and packaged controller proof are not yet shipped."),
|
||||
TEXT("XR/controller completion: the broader host decision remains desktop-hosted No-Go; project OpenXR plugin %s; bounded runtime owners and first-party controller settings/rebinding now exist, but packaged controller proof is not yet shipped."),
|
||||
bOpenXrProjectPluginEnabled ? TEXT("enabled") : TEXT("not enabled")
|
||||
);
|
||||
}
|
||||
|
||||
FString BuildControlProfileRosterXrBoundaryLine(const bool bOpenXrProjectPluginEnabled)
|
||||
FString BuildControlProfileRosterXrBoundaryLine(
|
||||
const bool bOpenXrProjectPluginEnabled
|
||||
)
|
||||
{
|
||||
return FString::Printf(
|
||||
TEXT("Controller rebinding: not yet shipped; the current native roster now includes a bounded OpenXR runtime plus controller binding profile, but the project OpenXR plugin is %s and the broader XR host decision remains desktop-hosted No-Go until packaged proof and richer settings/rebinding are complete."),
|
||||
TEXT("Controller rebinding: first-party owned; the current native roster now includes a bounded OpenXR runtime, controller binding profile, and user-facing controller settings/rebinding surface, the project OpenXR plugin is %s, and packaged controller proof is not yet shipped while the broader XR host decision remains desktop-hosted No-Go."),
|
||||
bOpenXrProjectPluginEnabled ? TEXT("enabled") : TEXT("not enabled")
|
||||
);
|
||||
}
|
||||
|
|
@ -1460,17 +1518,35 @@ UHyperTwistTrainingPanelWidget::GetDisplayedControlInputReadinessInspectSurface(
|
|||
Surface.XrPreferenceProfileId = XrRuntimeOwnershipFacts.PreferenceProfile.ProfileId;
|
||||
Surface.XrControllerBindingProfileId =
|
||||
XrRuntimeOwnershipFacts.ControllerBindingProfile.ProfileId;
|
||||
Surface.XrControllerSettingsOwnerId =
|
||||
XrRuntimeOwnershipFacts.ControllerSettingsSurface.SettingsOwnerId;
|
||||
Surface.XrControllerRebindingSurfaceId =
|
||||
XrRuntimeOwnershipFacts.ControllerSettingsSurface.RebindingSurfaceId;
|
||||
Surface.XrDefaultControllerLayoutPresetId =
|
||||
XrRuntimeOwnershipFacts.ControllerSettingsSurface.DefaultLayoutPresetId;
|
||||
Surface.XrPreferenceFieldCount = XrRuntimeOwnershipFacts.PreferenceFieldCount;
|
||||
Surface.XrControllerBindingAxisCount =
|
||||
XrRuntimeOwnershipFacts.ControllerBindingAxisCount;
|
||||
Surface.XrSupportedControllerFamilyCount =
|
||||
XrRuntimeOwnershipFacts.SupportedControllerFamilyCount;
|
||||
Surface.XrControllerSettingsFieldCount =
|
||||
XrRuntimeOwnershipFacts.ControllerSettingsFieldCount;
|
||||
Surface.XrControllerRebindableInputCount =
|
||||
XrRuntimeOwnershipFacts.ControllerRebindableInputCount;
|
||||
Surface.XrControllerLayoutPresetCount =
|
||||
XrRuntimeOwnershipFacts.ControllerLayoutPresetCount;
|
||||
Surface.bBoundedXrRuntimeOwnerReady =
|
||||
XrRuntimeOwnershipFacts.bRuntimeOwnerReady;
|
||||
Surface.bXrPreferenceProfileReady =
|
||||
XrRuntimeOwnershipFacts.bPreferenceProfileReady;
|
||||
Surface.bXrControllerBindingProfileReady =
|
||||
XrRuntimeOwnershipFacts.bControllerBindingProfileReady;
|
||||
Surface.bXrControllerSettingsOwnershipReady =
|
||||
XrRuntimeOwnershipFacts.bControllerSettingsOwnershipReady;
|
||||
Surface.bXrControllerRebindingOwnershipReady =
|
||||
XrRuntimeOwnershipFacts.bControllerRebindingOwnershipReady;
|
||||
Surface.bWindowsPackagedControllerProofReady =
|
||||
XrRuntimeOwnershipFacts.bWindowsPackagedControllerProofReady;
|
||||
|
||||
Surface.bFinishedXrRuntimeReady = false;
|
||||
Surface.bFinishedPreferencesReady = false;
|
||||
|
|
@ -1487,7 +1563,7 @@ UHyperTwistTrainingPanelWidget::GetDisplayedControlInputReadinessInspectSurface(
|
|||
XrBoundaryFacts.bRequiresWindowsPackagedControllerValidationForReopen;
|
||||
|
||||
Surface.SummaryLine = FString::Printf(
|
||||
TEXT("Keyboard and mouse lanes are ready today; bounded OpenXR runtime ownership, controller bindings, and preference profiles now exist, the project OpenXR plugin is %s, and finished packaged XR proof remains intentionally unshipped."),
|
||||
TEXT("Keyboard and mouse lanes are ready today; bounded OpenXR runtime ownership, controller bindings, preference profiles, and first-party controller settings/rebinding now exist, the project OpenXR plugin is %s, and finished packaged XR proof remains intentionally unshipped."),
|
||||
Surface.bOpenXrProjectPluginEnabled ? TEXT("enabled") : TEXT("not enabled")
|
||||
);
|
||||
Surface.ClassicCubeStatusLine = FString::Printf(
|
||||
|
|
@ -1528,7 +1604,7 @@ UHyperTwistTrainingPanelWidget::GetDisplayedControlInputReadinessInspectSurface(
|
|||
? FString::Join(InputGroundworkFacts.MotionControllerFamilies, TEXT(", "))
|
||||
: FString(TEXT("none"));
|
||||
Surface.XrStatusLine = FString::Printf(
|
||||
TEXT("XR groundwork: EnhancedInput config %s | motion controls %s | controller families %d (%s) | OpenXR project plugin %s | vertical adjust axis %s | immersive presence contract %s | bounded runtime owner %s (%s) | controller binding %s (%s) | finished XR runtime not yet shipped."),
|
||||
TEXT("XR groundwork: EnhancedInput config %s | motion controls %s | controller families %d (%s) | OpenXR project plugin %s | vertical adjust axis %s | immersive presence contract %s | bounded runtime owner %s (%s) | controller binding %s (%s) | controller settings %s (%s) | packaged controller proof %s."),
|
||||
*HyperTwistTrainingPanelWidgetInternal::DescribeBool(
|
||||
Surface.bEnhancedInputProjectGroundworkPresent),
|
||||
*HyperTwistTrainingPanelWidgetInternal::DescribeBool(
|
||||
|
|
@ -1548,7 +1624,15 @@ UHyperTwistTrainingPanelWidget::GetDisplayedControlInputReadinessInspectSurface(
|
|||
*HyperTwistTrainingPanelWidgetInternal::DescribeBool(
|
||||
Surface.bXrControllerBindingProfileReady),
|
||||
*HyperTwistTrainingPanelWidgetInternal::DescribeIdOrFallback(
|
||||
Surface.XrControllerBindingProfileId)
|
||||
Surface.XrControllerBindingProfileId),
|
||||
*HyperTwistTrainingPanelWidgetInternal::DescribeBool(
|
||||
Surface.bXrControllerSettingsOwnershipReady
|
||||
&& Surface.bXrControllerRebindingOwnershipReady),
|
||||
*HyperTwistTrainingPanelWidgetInternal::DescribeIdOrFallback(
|
||||
Surface.XrControllerSettingsOwnerId),
|
||||
Surface.bWindowsPackagedControllerProofReady
|
||||
? TEXT("ready")
|
||||
: TEXT("not yet shipped")
|
||||
);
|
||||
Surface.PreferencesStatusLine =
|
||||
HyperTwistTrainingControlSurfaceFormatting::BuildControlInputPreferencesStatusLine(
|
||||
|
|
@ -1571,10 +1655,14 @@ UHyperTwistTrainingPanelWidget::GetDisplayedControlInputReadinessInspectSurface(
|
|||
HyperTwistTrainingPanelWidgetInternal::BuildXrControllerBindingLine(
|
||||
XrRuntimeOwnershipFacts
|
||||
);
|
||||
Surface.XrControllerSettingsLine =
|
||||
HyperTwistTrainingPanelWidgetInternal::BuildXrControllerSettingsOwnershipLine(
|
||||
XrRuntimeOwnershipFacts
|
||||
);
|
||||
Surface.NextPacketLine =
|
||||
HyperTwistTrainingPanelWidgetInternal::BuildControlInputXrBoundaryLine();
|
||||
Surface.StatusLine = FString::Printf(
|
||||
TEXT("classic cube %s | higher-dimensional %s | XR groundwork %s | finished VR/preferences not yet shipped"),
|
||||
TEXT("classic cube %s | higher-dimensional %s | XR groundwork %s | controller settings/rebinding %s | packaged XR proof %s"),
|
||||
Surface.bClassicCubeMouseInputReady
|
||||
&& Surface.bClassicCubeTouchInputReady
|
||||
&& Surface.bClassicCubeShortcutReady
|
||||
|
|
@ -1588,10 +1676,15 @@ UHyperTwistTrainingPanelWidget::GetDisplayedControlInputReadinessInspectSurface(
|
|||
&& Surface.bMotionControllerGroundworkPresent
|
||||
&& Surface.bImmersivePresenceContractReady
|
||||
? TEXT("present")
|
||||
: TEXT("limited")
|
||||
: TEXT("limited"),
|
||||
Surface.bXrControllerSettingsOwnershipReady
|
||||
&& Surface.bXrControllerRebindingOwnershipReady
|
||||
? TEXT("owned")
|
||||
: TEXT("missing"),
|
||||
Surface.bWindowsPackagedControllerProofReady ? TEXT("ready") : TEXT("not yet shipped")
|
||||
);
|
||||
Surface.DetailLine = FString::Printf(
|
||||
TEXT("%s | %s | %s | %s | %s | %s | %s | %s | %s | %s | %s"),
|
||||
TEXT("%s | %s | %s | %s | %s | %s | %s | %s | %s | %s | %s | %s"),
|
||||
*Surface.ClassicCubeStatusLine,
|
||||
*Surface.ClassicCubePointerLine,
|
||||
*Surface.ClassicCubeActionShortcutLine,
|
||||
|
|
@ -1602,6 +1695,7 @@ UHyperTwistTrainingPanelWidget::GetDisplayedControlInputReadinessInspectSurface(
|
|||
*Surface.XrRuntimeOwnerLine,
|
||||
*Surface.XrPreferenceOwnerLine,
|
||||
*Surface.XrControllerBindingLine,
|
||||
*Surface.XrControllerSettingsLine,
|
||||
*Surface.NextPacketLine
|
||||
);
|
||||
return Surface;
|
||||
|
|
@ -1801,15 +1895,33 @@ UHyperTwistTrainingPanelWidget::GetDisplayedControlSettingsOwnershipInspectSurfa
|
|||
Surface.XrPreferenceProfileId = XrRuntimeOwnershipFacts.PreferenceProfile.ProfileId;
|
||||
Surface.XrControllerBindingProfileId =
|
||||
XrRuntimeOwnershipFacts.ControllerBindingProfile.ProfileId;
|
||||
Surface.XrControllerSettingsOwnerId =
|
||||
XrRuntimeOwnershipFacts.ControllerSettingsSurface.SettingsOwnerId;
|
||||
Surface.XrControllerRebindingSurfaceId =
|
||||
XrRuntimeOwnershipFacts.ControllerSettingsSurface.RebindingSurfaceId;
|
||||
Surface.XrDefaultControllerLayoutPresetId =
|
||||
XrRuntimeOwnershipFacts.ControllerSettingsSurface.DefaultLayoutPresetId;
|
||||
Surface.XrPreferenceFieldCount = XrRuntimeOwnershipFacts.PreferenceFieldCount;
|
||||
Surface.XrControllerBindingAxisCount =
|
||||
XrRuntimeOwnershipFacts.ControllerBindingAxisCount;
|
||||
Surface.XrSupportedControllerFamilyCount =
|
||||
XrRuntimeOwnershipFacts.SupportedControllerFamilyCount;
|
||||
Surface.XrControllerSettingsFieldCount =
|
||||
XrRuntimeOwnershipFacts.ControllerSettingsFieldCount;
|
||||
Surface.XrControllerRebindableInputCount =
|
||||
XrRuntimeOwnershipFacts.ControllerRebindableInputCount;
|
||||
Surface.XrControllerLayoutPresetCount =
|
||||
XrRuntimeOwnershipFacts.ControllerLayoutPresetCount;
|
||||
Surface.bXrPreferenceProfileReady =
|
||||
XrRuntimeOwnershipFacts.bPreferenceProfileReady;
|
||||
Surface.bXrControllerBindingProfileReady =
|
||||
XrRuntimeOwnershipFacts.bControllerBindingProfileReady;
|
||||
Surface.bXrControllerSettingsOwnershipReady =
|
||||
XrRuntimeOwnershipFacts.bControllerSettingsOwnershipReady;
|
||||
Surface.bXrControllerRebindingOwnershipReady =
|
||||
XrRuntimeOwnershipFacts.bControllerRebindingOwnershipReady;
|
||||
Surface.bWindowsPackagedControllerProofReady =
|
||||
XrRuntimeOwnershipFacts.bWindowsPackagedControllerProofReady;
|
||||
|
||||
Surface.bHigherDimensionalSelectorSettingsReady =
|
||||
Surface.bMagic120CellViewSettingsReady
|
||||
|
|
@ -1840,7 +1952,7 @@ UHyperTwistTrainingPanelWidget::GetDisplayedControlSettingsOwnershipInspectSurfa
|
|||
&& Surface.MagicCube5DSelectorCount > 0;
|
||||
|
||||
Surface.SummaryLine =
|
||||
TEXT("Camera, immersive, dedicated-family, and bounded XR preference settings are already first-party owned, while packaged controller proof and broader rebinding polish still remain unfinished.");
|
||||
TEXT("Camera, immersive, dedicated-family, bounded XR preference settings, and first-party controller settings/rebinding are already owned, while packaged controller proof still remains unfinished.");
|
||||
Surface.CameraSettingsLine =
|
||||
HyperTwistTrainingControlSurfaceFormatting::BuildControlSettingsCameraSettingsLine(
|
||||
Surface.bCameraSettingsReady,
|
||||
|
|
@ -1916,10 +2028,13 @@ UHyperTwistTrainingPanelWidget::GetDisplayedControlSettingsOwnershipInspectSurfa
|
|||
HyperTwistTrainingPanelWidgetInternal::BuildSelectorRecallLine(
|
||||
SelectorRecallFacts
|
||||
);
|
||||
Surface.XrSettingsOwnershipLine =
|
||||
HyperTwistTrainingPanelWidgetInternal::BuildXrPreferenceOwnerLine(
|
||||
XrRuntimeOwnershipFacts
|
||||
);
|
||||
Surface.XrSettingsOwnershipLine = FString::Printf(
|
||||
TEXT("%s | %s"),
|
||||
*HyperTwistTrainingPanelWidgetInternal::BuildXrPreferenceOwnerLine(
|
||||
XrRuntimeOwnershipFacts),
|
||||
*HyperTwistTrainingPanelWidgetInternal::BuildXrControllerSettingsOwnershipLine(
|
||||
XrRuntimeOwnershipFacts)
|
||||
);
|
||||
Surface.XrGapLine =
|
||||
HyperTwistTrainingPanelWidgetInternal::BuildControlSettingsXrBoundaryLine(
|
||||
Surface.bOpenXrProjectPluginEnabled
|
||||
|
|
@ -1936,7 +2051,10 @@ UHyperTwistTrainingPanelWidget::GetDisplayedControlSettingsOwnershipInspectSurfa
|
|||
Surface.bMagicCube5DPersistenceSettingsReady,
|
||||
bMagic120CellSelectorSettingsReady,
|
||||
bMagicCube5DSelectorSettingsReady,
|
||||
Surface.bRepositoryBackedSelectorRecallReady
|
||||
Surface.bRepositoryBackedSelectorRecallReady,
|
||||
Surface.bXrControllerSettingsOwnershipReady
|
||||
&& Surface.bXrControllerRebindingOwnershipReady,
|
||||
Surface.bWindowsPackagedControllerProofReady
|
||||
);
|
||||
Surface.DetailLine = FString::Printf(
|
||||
TEXT("%s | %s | %s | %s | %s | %s | %s | %s"),
|
||||
|
|
@ -2108,15 +2226,33 @@ UHyperTwistTrainingPanelWidget::GetDisplayedControlProfileRosterInspectSurface()
|
|||
Surface.XrPreferenceProfileId = XrRuntimeOwnershipFacts.PreferenceProfile.ProfileId;
|
||||
Surface.XrControllerBindingProfileId =
|
||||
XrRuntimeOwnershipFacts.ControllerBindingProfile.ProfileId;
|
||||
Surface.XrControllerSettingsOwnerId =
|
||||
XrRuntimeOwnershipFacts.ControllerSettingsSurface.SettingsOwnerId;
|
||||
Surface.XrControllerRebindingSurfaceId =
|
||||
XrRuntimeOwnershipFacts.ControllerSettingsSurface.RebindingSurfaceId;
|
||||
Surface.XrDefaultControllerLayoutPresetId =
|
||||
XrRuntimeOwnershipFacts.ControllerSettingsSurface.DefaultLayoutPresetId;
|
||||
Surface.XrPreferenceFieldCount = XrRuntimeOwnershipFacts.PreferenceFieldCount;
|
||||
Surface.XrControllerBindingAxisCount =
|
||||
XrRuntimeOwnershipFacts.ControllerBindingAxisCount;
|
||||
Surface.XrSupportedControllerFamilyCount =
|
||||
XrRuntimeOwnershipFacts.SupportedControllerFamilyCount;
|
||||
Surface.XrControllerSettingsFieldCount =
|
||||
XrRuntimeOwnershipFacts.ControllerSettingsFieldCount;
|
||||
Surface.XrControllerRebindableInputCount =
|
||||
XrRuntimeOwnershipFacts.ControllerRebindableInputCount;
|
||||
Surface.XrControllerLayoutPresetCount =
|
||||
XrRuntimeOwnershipFacts.ControllerLayoutPresetCount;
|
||||
Surface.bXrPreferenceProfileReady =
|
||||
XrRuntimeOwnershipFacts.bPreferenceProfileReady;
|
||||
Surface.bXrControllerBindingProfileReady =
|
||||
XrRuntimeOwnershipFacts.bControllerBindingProfileReady;
|
||||
Surface.bXrControllerSettingsOwnershipReady =
|
||||
XrRuntimeOwnershipFacts.bControllerSettingsOwnershipReady;
|
||||
Surface.bXrControllerRebindingOwnershipReady =
|
||||
XrRuntimeOwnershipFacts.bControllerRebindingOwnershipReady;
|
||||
Surface.bWindowsPackagedControllerProofReady =
|
||||
XrRuntimeOwnershipFacts.bWindowsPackagedControllerProofReady;
|
||||
|
||||
Surface.bFinishedControllerRebindingReady = false;
|
||||
Surface.bOpenXrProjectPluginEnabled =
|
||||
|
|
@ -2175,7 +2311,7 @@ UHyperTwistTrainingPanelWidget::GetDisplayedControlProfileRosterInspectSurface()
|
|||
? Surface.ActiveHigherDimensionalInteractiveSceneSurfaceId
|
||||
: TEXT("none");
|
||||
Surface.SummaryLine =
|
||||
TEXT("The shipped selectable roster currently covers the classic keyboard mapping, scenic immersive presets, bounded XR controller profiles, bounded camera or immersive continuity, and dedicated 120-cell/5D view-selector families, while controller rebinding still remains unfinished.");
|
||||
TEXT("The shipped selectable roster currently covers the classic keyboard mapping, scenic immersive presets, bounded XR controller profiles, first-party controller settings/rebinding ownership, bounded camera or immersive continuity, and dedicated 120-cell/5D view-selector families, while packaged controller proof still remains unfinished.");
|
||||
Surface.ClassicKeyboardProfileLine = FString::Printf(
|
||||
TEXT("Classic keyboard profile: %s | bindings %d | ctrl suppressed %s | alt suppressed %s | meta suppressed %s | repeat suppressed %s."),
|
||||
*ClassicKeyboardProfileName,
|
||||
|
|
@ -2241,10 +2377,13 @@ UHyperTwistTrainingPanelWidget::GetDisplayedControlProfileRosterInspectSurface()
|
|||
Surface.ImmersiveSessionRecallScopeCount,
|
||||
Surface.ImmersiveSessionRecallPreferenceFieldTagCount
|
||||
);
|
||||
Surface.XrControllerProfileLine =
|
||||
HyperTwistTrainingPanelWidgetInternal::BuildXrControllerBindingLine(
|
||||
XrRuntimeOwnershipFacts
|
||||
);
|
||||
Surface.XrControllerProfileLine = FString::Printf(
|
||||
TEXT("%s | %s"),
|
||||
*HyperTwistTrainingPanelWidgetInternal::BuildXrControllerBindingLine(
|
||||
XrRuntimeOwnershipFacts),
|
||||
*HyperTwistTrainingPanelWidgetInternal::BuildXrControllerSettingsOwnershipLine(
|
||||
XrRuntimeOwnershipFacts)
|
||||
);
|
||||
Surface.PreferencesGapLine =
|
||||
HyperTwistTrainingPanelWidgetInternal::BuildControlProfileRosterXrBoundaryLine(
|
||||
Surface.bOpenXrProjectPluginEnabled
|
||||
|
|
@ -2258,7 +2397,10 @@ UHyperTwistTrainingPanelWidget::GetDisplayedControlProfileRosterInspectSurface()
|
|||
Surface.bActiveHigherDimensionalProfileVisible,
|
||||
Surface.bRepositoryBackedSelectorRecallReady,
|
||||
Surface.bCameraSettingsContinuityReady,
|
||||
Surface.bImmersiveSessionRecallReady
|
||||
Surface.bImmersiveSessionRecallReady,
|
||||
Surface.bXrControllerSettingsOwnershipReady
|
||||
&& Surface.bXrControllerRebindingOwnershipReady,
|
||||
Surface.bWindowsPackagedControllerProofReady
|
||||
);
|
||||
Surface.DetailLine = FString::Printf(
|
||||
TEXT("%s | %s | %s | %s | %s | %s | %s | %s | %s | %s"),
|
||||
|
|
|
|||
|
|
@ -101,6 +101,66 @@ UHyperTwistXrRuntimeLibrary::GetDefaultXrControllerBindingProfile()
|
|||
return Profile;
|
||||
}
|
||||
|
||||
FHyperTwistXrControllerSettingsOwnershipSurface
|
||||
UHyperTwistXrRuntimeLibrary::BuildBundledXrControllerSettingsOwnershipSurface()
|
||||
{
|
||||
using namespace HyperTwistXrRuntimeLibraryInternal;
|
||||
|
||||
const FHyperTwistXrControllerBindingProfile BindingProfile =
|
||||
GetDefaultXrControllerBindingProfile();
|
||||
|
||||
FHyperTwistXrControllerSettingsOwnershipSurface Surface;
|
||||
Surface.SettingsOwnerId = TEXT("xr-openxr-controller-settings-owner/v1");
|
||||
Surface.RebindingSurfaceId = TEXT("xr-openxr-controller-rebinding-surface/v1");
|
||||
Surface.Title = TEXT("OpenXR controller settings and rebinding owner");
|
||||
Surface.Summary = TEXT("First-party user-visible controller settings and rebinding ownership for the bounded desktop-hosted HyperTwist OpenXR lane, covering the exact shipped XR input ids, layout presets, and per-session comfort tuning without claiming packaged controller certification.");
|
||||
Surface.DefaultLayoutPresetId = TEXT("xr-openxr-controller-layout-default/v1");
|
||||
Surface.UserVisibleSettingFieldTags =
|
||||
{
|
||||
TEXT("locomotion hand preference"),
|
||||
TEXT("turn hand preference"),
|
||||
TEXT("look pitch inversion"),
|
||||
TEXT("vertical adjust shoulder polarity"),
|
||||
TEXT("grip analog dead zone"),
|
||||
TEXT("trigger analog dead zone"),
|
||||
TEXT("snap-turn mode toggle"),
|
||||
TEXT("haptic intensity")
|
||||
};
|
||||
Surface.RebindableInputNames =
|
||||
{
|
||||
TEXT("HyperTwistXr_MoveForward"),
|
||||
TEXT("HyperTwistXr_MoveRight"),
|
||||
TEXT("HyperTwistXr_VerticalAdjust"),
|
||||
TEXT("HyperTwistXr_Turn"),
|
||||
TEXT("HyperTwistXr_LookPitch"),
|
||||
TEXT("HyperTwistXr_LeftGrip"),
|
||||
TEXT("HyperTwistXr_RightGrip"),
|
||||
TEXT("HyperTwistXr_LeftTrigger"),
|
||||
TEXT("HyperTwistXr_RightTrigger"),
|
||||
TEXT("HyperTwistXr_Recenter"),
|
||||
TEXT("HyperTwistXr_ToggleSnapTurn"),
|
||||
TEXT("HyperTwistXr_TogglePostureMode")
|
||||
};
|
||||
Surface.LayoutPresetIds =
|
||||
{
|
||||
TEXT("xr-openxr-controller-layout-default/v1"),
|
||||
TEXT("xr-openxr-controller-layout-southpaw/v1"),
|
||||
TEXT("xr-openxr-controller-layout-seated-comfort/v1")
|
||||
};
|
||||
Surface.SupportedControllerFamilies = BindingProfile.ControllerFamilyIds;
|
||||
Surface.ExplicitExclusions =
|
||||
{
|
||||
TEXT("platform-global controller remap UI"),
|
||||
TEXT("vendor-specific hand-tracking ownership"),
|
||||
TEXT("launch-tier packaged controller certification ownership")
|
||||
};
|
||||
Surface.SourceAttribution = MakeFirstPartyAttribution(
|
||||
TEXT("first-party/xr-openxr-controller-settings-rebinding"),
|
||||
TEXT("Owns first-party user-visible XR controller settings and rebinding inside the bounded HyperTwist desktop simulator while keeping packaged controller proof and cross-device certification outside the current packet.")
|
||||
);
|
||||
return Surface;
|
||||
}
|
||||
|
||||
FHyperTwistXrRuntimeOwnershipSurface
|
||||
UHyperTwistXrRuntimeLibrary::BuildBundledXrRuntimeOwnershipSurface()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -10024,6 +10024,9 @@ struct FHyperTwistTrainingControlInputReadinessInspectSurface
|
|||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString XrControllerBindingLine;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString XrControllerSettingsLine;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString NextPacketLine;
|
||||
|
||||
|
|
@ -10042,6 +10045,15 @@ struct FHyperTwistTrainingControlInputReadinessInspectSurface
|
|||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString XrControllerBindingProfileId;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString XrControllerSettingsOwnerId;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString XrControllerRebindingSurfaceId;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString XrDefaultControllerLayoutPresetId;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
int32 MotionControllerFamilyCount = 0;
|
||||
|
||||
|
|
@ -10054,6 +10066,15 @@ struct FHyperTwistTrainingControlInputReadinessInspectSurface
|
|||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
int32 XrSupportedControllerFamilyCount = 0;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
int32 XrControllerSettingsFieldCount = 0;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
int32 XrControllerRebindableInputCount = 0;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
int32 XrControllerLayoutPresetCount = 0;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bOpenXrProjectPluginEnabled = false;
|
||||
|
||||
|
|
@ -10096,6 +10117,15 @@ struct FHyperTwistTrainingControlInputReadinessInspectSurface
|
|||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bXrControllerBindingProfileReady = false;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bXrControllerSettingsOwnershipReady = false;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bXrControllerRebindingOwnershipReady = false;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bWindowsPackagedControllerProofReady = false;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bFinishedXrRuntimeReady = false;
|
||||
|
||||
|
|
@ -10197,6 +10227,15 @@ struct FHyperTwistTrainingControlSettingsOwnershipInspectSurface
|
|||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString XrControllerBindingProfileId;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString XrControllerSettingsOwnerId;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString XrControllerRebindingSurfaceId;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString XrDefaultControllerLayoutPresetId;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString ActiveHigherDimensionalViewContextId;
|
||||
|
||||
|
|
@ -10302,6 +10341,15 @@ struct FHyperTwistTrainingControlSettingsOwnershipInspectSurface
|
|||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
int32 XrSupportedControllerFamilyCount = 0;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
int32 XrControllerSettingsFieldCount = 0;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
int32 XrControllerRebindableInputCount = 0;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
int32 XrControllerLayoutPresetCount = 0;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bCameraSettingsReady = false;
|
||||
|
||||
|
|
@ -10341,6 +10389,15 @@ struct FHyperTwistTrainingControlSettingsOwnershipInspectSurface
|
|||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bXrControllerBindingProfileReady = false;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bXrControllerSettingsOwnershipReady = false;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bXrControllerRebindingOwnershipReady = false;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bWindowsPackagedControllerProofReady = false;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bFinishedControllerRebindingReady = false;
|
||||
|
||||
|
|
@ -10452,6 +10509,15 @@ struct FHyperTwistTrainingControlProfileRosterInspectSurface
|
|||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString XrControllerBindingProfileId;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString XrControllerSettingsOwnerId;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString XrControllerRebindingSurfaceId;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString XrDefaultControllerLayoutPresetId;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString Magic120CellRuntimeProfileContractId;
|
||||
|
||||
|
|
@ -10512,6 +10578,15 @@ struct FHyperTwistTrainingControlProfileRosterInspectSurface
|
|||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
int32 XrSupportedControllerFamilyCount = 0;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
int32 XrControllerSettingsFieldCount = 0;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
int32 XrControllerRebindableInputCount = 0;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
int32 XrControllerLayoutPresetCount = 0;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bClassicKeyboardProfileReady = false;
|
||||
|
||||
|
|
@ -10542,6 +10617,15 @@ struct FHyperTwistTrainingControlProfileRosterInspectSurface
|
|||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bXrControllerBindingProfileReady = false;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bXrControllerSettingsOwnershipReady = false;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bXrControllerRebindingOwnershipReady = false;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bWindowsPackagedControllerProofReady = false;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bFinishedControllerRebindingReady = false;
|
||||
|
||||
|
|
|
|||
|
|
@ -146,6 +146,67 @@ struct FHyperTwistXrControllerBindingProfile
|
|||
}
|
||||
};
|
||||
|
||||
USTRUCT(BlueprintType)
|
||||
struct FHyperTwistXrControllerSettingsOwnershipSurface
|
||||
{
|
||||
GENERATED_BODY()
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString SettingsOwnerId;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString RebindingSurfaceId;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString Title;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString Summary;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString DefaultLayoutPresetId;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
TArray<FString> UserVisibleSettingFieldTags;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
TArray<FString> RebindableInputNames;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
TArray<FString> LayoutPresetIds;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
TArray<FString> SupportedControllerFamilies;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
TArray<FString> ExplicitExclusions;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FHyperTwistTrainingSourceAttribution SourceAttribution;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bUserFacingSettingsReady = true;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bUserFacingRebindingReady = true;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bWindowsPackagedControllerProofReady = false;
|
||||
|
||||
bool IsStructurallyValid() const
|
||||
{
|
||||
return !SettingsOwnerId.IsEmpty()
|
||||
&& !RebindingSurfaceId.IsEmpty()
|
||||
&& !Title.IsEmpty()
|
||||
&& !DefaultLayoutPresetId.IsEmpty()
|
||||
&& UserVisibleSettingFieldTags.Num() > 0
|
||||
&& RebindableInputNames.Num() > 0
|
||||
&& LayoutPresetIds.Num() > 0
|
||||
&& SupportedControllerFamilies.Num() > 0
|
||||
&& SourceAttribution.IsStructurallyValid();
|
||||
}
|
||||
};
|
||||
|
||||
USTRUCT(BlueprintType)
|
||||
struct FHyperTwistXrRuntimeOwnershipSurface
|
||||
{
|
||||
|
|
@ -229,6 +290,10 @@ public:
|
|||
UFUNCTION(BlueprintPure, Category = "HyperTwist|XR")
|
||||
static FHyperTwistXrControllerBindingProfile GetDefaultXrControllerBindingProfile();
|
||||
|
||||
UFUNCTION(BlueprintPure, Category = "HyperTwist|XR")
|
||||
static FHyperTwistXrControllerSettingsOwnershipSurface
|
||||
BuildBundledXrControllerSettingsOwnershipSurface();
|
||||
|
||||
UFUNCTION(BlueprintPure, Category = "HyperTwist|XR")
|
||||
static FHyperTwistXrRuntimeOwnershipSurface BuildBundledXrRuntimeOwnershipSurface();
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1156,18 +1156,30 @@ bool FHyperTwistTrainingPanelControlInputReadinessInspectSurfaceTest::RunTest(
|
|||
TEXT("The control/input readiness surface must keep unfinished XR/runtime and preferences truth explicit."),
|
||||
Surface.bFinishedXrRuntimeReady || Surface.bFinishedPreferencesReady
|
||||
);
|
||||
TestTrue(
|
||||
TEXT("The control/input readiness surface must expose the bounded XR runtime owner, preference profile, and controller binding profile."),
|
||||
Surface.bBoundedXrRuntimeOwnerReady
|
||||
&& Surface.bXrPreferenceProfileReady
|
||||
&& Surface.bXrControllerBindingProfileReady
|
||||
&& Surface.XrRuntimeOwnerId == TEXT("xr/openxr-desktop-training-runtime-owner")
|
||||
&& Surface.XrPreferenceProfileId == TEXT("xr-openxr-training-preferences/v1")
|
||||
&& Surface.XrControllerBindingProfileId == TEXT("xr-openxr-motion-controllers/v1")
|
||||
&& Surface.XrPreferenceFieldCount == 8
|
||||
&& Surface.XrControllerBindingAxisCount == 8
|
||||
&& Surface.XrSupportedControllerFamilyCount == 4
|
||||
);
|
||||
TestTrue(
|
||||
TEXT("The control/input readiness surface must expose the bounded XR runtime owner, preference profile, controller binding profile, and controller settings ownership surface."),
|
||||
Surface.bBoundedXrRuntimeOwnerReady
|
||||
&& Surface.bXrPreferenceProfileReady
|
||||
&& Surface.bXrControllerBindingProfileReady
|
||||
&& Surface.bXrControllerSettingsOwnershipReady
|
||||
&& Surface.bXrControllerRebindingOwnershipReady
|
||||
&& Surface.XrRuntimeOwnerId == TEXT("xr/openxr-desktop-training-runtime-owner")
|
||||
&& Surface.XrPreferenceProfileId == TEXT("xr-openxr-training-preferences/v1")
|
||||
&& Surface.XrControllerBindingProfileId == TEXT("xr-openxr-motion-controllers/v1")
|
||||
&& Surface.XrControllerSettingsOwnerId
|
||||
== TEXT("xr-openxr-controller-settings-owner/v1")
|
||||
&& Surface.XrControllerRebindingSurfaceId
|
||||
== TEXT("xr-openxr-controller-rebinding-surface/v1")
|
||||
&& Surface.XrDefaultControllerLayoutPresetId
|
||||
== TEXT("xr-openxr-controller-layout-default/v1")
|
||||
&& Surface.XrPreferenceFieldCount == 8
|
||||
&& Surface.XrControllerBindingAxisCount == 8
|
||||
&& Surface.XrSupportedControllerFamilyCount == 4
|
||||
&& Surface.XrControllerSettingsFieldCount == 8
|
||||
&& Surface.XrControllerRebindableInputCount == 12
|
||||
&& Surface.XrControllerLayoutPresetCount == 3
|
||||
&& !Surface.bWindowsPackagedControllerProofReady
|
||||
);
|
||||
TestTrue(
|
||||
TEXT("The control/input readiness surface must now expose bounded non-XR preferences continuity for camera export and immersive session recall."),
|
||||
Surface.PreferencesStatusLine.Contains(TEXT("artifact/camera-export-json"))
|
||||
|
|
@ -1187,30 +1199,33 @@ bool FHyperTwistTrainingPanelControlInputReadinessInspectSurfaceTest::RunTest(
|
|||
&& Surface.bRequiresUserFacingSettingsRebindingForReopen
|
||||
&& Surface.bRequiresWindowsPackagedControllerValidationForReopen
|
||||
);
|
||||
TestTrue(
|
||||
TEXT("The control/input readiness surface must say plainly that finished XR runtime is not yet shipped."),
|
||||
Surface.XrStatusLine.Contains(TEXT("not yet shipped"))
|
||||
&& Surface.XrStatusLine.Contains(TEXT("OpenXR project plugin yes"))
|
||||
&& Surface.XrStatusLine.Contains(TEXT("vertical adjust axis yes"))
|
||||
&& Surface.XrStatusLine.Contains(TEXT("xr/openxr-desktop-training-runtime-owner"))
|
||||
&& Surface.XrStatusLine.Contains(TEXT("xr-openxr-motion-controllers/v1"))
|
||||
);
|
||||
TestTrue(
|
||||
TEXT("The control/input readiness surface must say plainly that controller settings/rebinding are owned while packaged controller proof is not yet shipped."),
|
||||
Surface.XrStatusLine.Contains(TEXT("not yet shipped"))
|
||||
&& Surface.XrStatusLine.Contains(TEXT("OpenXR project plugin yes"))
|
||||
&& Surface.XrStatusLine.Contains(TEXT("vertical adjust axis yes"))
|
||||
&& Surface.XrStatusLine.Contains(TEXT("xr/openxr-desktop-training-runtime-owner"))
|
||||
&& Surface.XrStatusLine.Contains(TEXT("xr-openxr-motion-controllers/v1"))
|
||||
&& Surface.XrStatusLine.Contains(TEXT("xr-openxr-controller-settings-owner/v1"))
|
||||
);
|
||||
TestTrue(
|
||||
TEXT("The control/input readiness surface must now spell out the bounded vertical-adjust and pointer preference ownership."),
|
||||
Surface.XrPreferenceOwnerLine.Contains(TEXT("vertical adjust 120"))
|
||||
&& Surface.XrPreferenceOwnerLine.Contains(TEXT("pointer 180"))
|
||||
);
|
||||
TestTrue(
|
||||
TEXT("The control/input readiness surface must retain the fixed No-Go host decision and the later settings/rebinding follow-through."),
|
||||
Surface.NextPacketLine.Contains(TEXT("No-Go"))
|
||||
&& Surface.NextPacketLine.Contains(TEXT("settings/rebinding"))
|
||||
);
|
||||
TestTrue(
|
||||
TEXT("The control/input readiness detail line must surface the fixed No-Go host decision operators actually need to see."),
|
||||
Surface.DetailLine.Contains(TEXT("No-Go"))
|
||||
&& Surface.DetailLine.Contains(TEXT("xr-openxr-training-preferences/v1"))
|
||||
&& Surface.DetailLine.Contains(TEXT("xr-openxr-motion-controllers/v1"))
|
||||
);
|
||||
TestTrue(
|
||||
TEXT("The control/input readiness surface must retain the fixed No-Go host decision and the remaining packaged-controller validation gap."),
|
||||
Surface.NextPacketLine.Contains(TEXT("No-Go"))
|
||||
&& Surface.NextPacketLine.Contains(TEXT("packaged controller validation"))
|
||||
);
|
||||
TestTrue(
|
||||
TEXT("The control/input readiness detail line must surface the fixed No-Go host decision operators actually need to see."),
|
||||
Surface.DetailLine.Contains(TEXT("No-Go"))
|
||||
&& Surface.DetailLine.Contains(TEXT("xr-openxr-training-preferences/v1"))
|
||||
&& Surface.DetailLine.Contains(TEXT("xr-openxr-motion-controllers/v1"))
|
||||
&& Surface.DetailLine.Contains(TEXT("xr-openxr-controller-settings-owner/v1"))
|
||||
&& Surface.DetailLine.Contains(TEXT("xr-openxr-controller-rebinding-surface/v1"))
|
||||
);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -1260,13 +1275,14 @@ bool FHyperTwistCoachDashboardControlInputReadinessInspectSurfaceTest::RunTest(
|
|||
&& Surface.DetailLine.Contains(TEXT("R scramble"))
|
||||
&& Surface.DetailLine.Contains(TEXT("V hold-to-talk"))
|
||||
);
|
||||
TestTrue(
|
||||
TEXT("The coach dashboard control/input readiness surface must retain the unfinished XR/runtime truth in its detail line."),
|
||||
Surface.DetailLine.Contains(TEXT("not yet shipped"))
|
||||
&& Surface.DetailLine.Contains(TEXT("OpenXR project plugin yes"))
|
||||
&& Surface.DetailLine.Contains(TEXT("vertical adjust axis yes"))
|
||||
&& Surface.DetailLine.Contains(TEXT("xr/openxr-desktop-training-runtime-owner"))
|
||||
);
|
||||
TestTrue(
|
||||
TEXT("The coach dashboard control/input readiness surface must retain the packaged-proof gap and controller-settings ownership truth in its detail line."),
|
||||
Surface.DetailLine.Contains(TEXT("not yet shipped"))
|
||||
&& Surface.DetailLine.Contains(TEXT("OpenXR project plugin yes"))
|
||||
&& Surface.DetailLine.Contains(TEXT("vertical adjust axis yes"))
|
||||
&& Surface.DetailLine.Contains(TEXT("xr/openxr-desktop-training-runtime-owner"))
|
||||
&& Surface.DetailLine.Contains(TEXT("xr-openxr-controller-settings-owner/v1"))
|
||||
);
|
||||
TestTrue(
|
||||
TEXT("The coach dashboard control/input readiness surface must retain the bounded non-XR preferences continuity ids in its detail line."),
|
||||
Surface.DetailLine.Contains(TEXT("artifact/camera-export-json"))
|
||||
|
|
@ -1282,18 +1298,28 @@ bool FHyperTwistCoachDashboardControlInputReadinessInspectSurfaceTest::RunTest(
|
|||
Surface.DetailLine.Contains(TEXT("vertical adjust 120"))
|
||||
&& Surface.DetailLine.Contains(TEXT("pointer 180"))
|
||||
);
|
||||
TestTrue(
|
||||
TEXT("The coach dashboard control/input readiness surface must expose the bounded XR runtime owner, preference profile, and controller binding profile."),
|
||||
Surface.bBoundedXrRuntimeOwnerReady
|
||||
&& Surface.bXrPreferenceProfileReady
|
||||
&& Surface.bXrControllerBindingProfileReady
|
||||
&& Surface.XrRuntimeOwnerId == TEXT("xr/openxr-desktop-training-runtime-owner")
|
||||
&& Surface.XrPreferenceProfileId == TEXT("xr-openxr-training-preferences/v1")
|
||||
&& Surface.XrControllerBindingProfileId == TEXT("xr-openxr-motion-controllers/v1")
|
||||
&& Surface.XrPreferenceFieldCount == 8
|
||||
&& Surface.XrControllerBindingAxisCount == 8
|
||||
&& Surface.XrSupportedControllerFamilyCount == 4
|
||||
);
|
||||
TestTrue(
|
||||
TEXT("The coach dashboard control/input readiness surface must expose the bounded XR runtime owner, preference profile, controller binding profile, and controller settings ownership surface."),
|
||||
Surface.bBoundedXrRuntimeOwnerReady
|
||||
&& Surface.bXrPreferenceProfileReady
|
||||
&& Surface.bXrControllerBindingProfileReady
|
||||
&& Surface.bXrControllerSettingsOwnershipReady
|
||||
&& Surface.bXrControllerRebindingOwnershipReady
|
||||
&& Surface.XrRuntimeOwnerId == TEXT("xr/openxr-desktop-training-runtime-owner")
|
||||
&& Surface.XrPreferenceProfileId == TEXT("xr-openxr-training-preferences/v1")
|
||||
&& Surface.XrControllerBindingProfileId == TEXT("xr-openxr-motion-controllers/v1")
|
||||
&& Surface.XrControllerSettingsOwnerId
|
||||
== TEXT("xr-openxr-controller-settings-owner/v1")
|
||||
&& Surface.XrControllerRebindingSurfaceId
|
||||
== TEXT("xr-openxr-controller-rebinding-surface/v1")
|
||||
&& Surface.XrPreferenceFieldCount == 8
|
||||
&& Surface.XrControllerBindingAxisCount == 8
|
||||
&& Surface.XrSupportedControllerFamilyCount == 4
|
||||
&& Surface.XrControllerSettingsFieldCount == 8
|
||||
&& Surface.XrControllerRebindableInputCount == 12
|
||||
&& Surface.XrControllerLayoutPresetCount == 3
|
||||
&& !Surface.bWindowsPackagedControllerProofReady
|
||||
);
|
||||
TestEqual(
|
||||
TEXT("The coach dashboard control/input readiness surface must preserve the structured XR host decision id."),
|
||||
Surface.XrHostDecisionId,
|
||||
|
|
@ -1306,12 +1332,13 @@ bool FHyperTwistCoachDashboardControlInputReadinessInspectSurfaceTest::RunTest(
|
|||
&& Surface.bRequiresUserFacingSettingsRebindingForReopen
|
||||
&& Surface.bRequiresWindowsPackagedControllerValidationForReopen
|
||||
);
|
||||
TestTrue(
|
||||
TEXT("The coach dashboard control/input readiness surface must keep the fixed No-Go host decision visible in its rendered detail line."),
|
||||
Surface.DetailLine.Contains(TEXT("No-Go"))
|
||||
&& Surface.DetailLine.Contains(TEXT("settings/rebinding"))
|
||||
&& Surface.DetailLine.Contains(TEXT("xr-openxr-motion-controllers/v1"))
|
||||
);
|
||||
TestTrue(
|
||||
TEXT("The coach dashboard control/input readiness surface must keep the fixed No-Go host decision visible in its rendered detail line."),
|
||||
Surface.DetailLine.Contains(TEXT("No-Go"))
|
||||
&& Surface.DetailLine.Contains(TEXT("packaged controller validation"))
|
||||
&& Surface.DetailLine.Contains(TEXT("xr-openxr-motion-controllers/v1"))
|
||||
&& Surface.DetailLine.Contains(TEXT("xr-openxr-controller-rebinding-surface/v1"))
|
||||
);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -1351,9 +1378,12 @@ bool FHyperTwistTrainingPanelControlSettingsOwnershipInspectSurfaceTest::RunTest
|
|||
&& Surface.bMagicCube5DViewSettingsReady
|
||||
&& Surface.bHigherDimensionalSelectorSettingsReady
|
||||
);
|
||||
TestFalse(
|
||||
TEXT("The control settings ownership surface must keep unfinished XR/controller rebinding truth explicit."),
|
||||
Surface.bFinishedControllerRebindingReady
|
||||
TestTrue(
|
||||
TEXT("The control settings ownership surface must now expose first-party XR/controller rebinding ownership explicitly while keeping finished packaged proof false."),
|
||||
!Surface.bFinishedControllerRebindingReady
|
||||
&& Surface.bXrControllerSettingsOwnershipReady
|
||||
&& Surface.bXrControllerRebindingOwnershipReady
|
||||
&& !Surface.bWindowsPackagedControllerProofReady
|
||||
);
|
||||
TestTrue(
|
||||
TEXT("The control settings ownership surface must keep the current enabled OpenXR project plugin posture explicit."),
|
||||
|
|
@ -1396,17 +1426,28 @@ bool FHyperTwistTrainingPanelControlSettingsOwnershipInspectSurfaceTest::RunTest
|
|||
&& Surface.ImmersiveSessionRecallPreferenceFieldTagCount == 5
|
||||
&& Surface.ImmersiveSessionRecallResetSurfaceTagCount == 3
|
||||
);
|
||||
TestTrue(
|
||||
TEXT("The control settings ownership surface must expose the bounded XR preference and controller-profile ownership packet."),
|
||||
Surface.bXrPreferenceProfileReady
|
||||
&& Surface.bXrControllerBindingProfileReady
|
||||
&& Surface.XrRuntimeOwnerId == TEXT("xr/openxr-desktop-training-runtime-owner")
|
||||
&& Surface.XrPreferenceProfileId == TEXT("xr-openxr-training-preferences/v1")
|
||||
&& Surface.XrControllerBindingProfileId == TEXT("xr-openxr-motion-controllers/v1")
|
||||
&& Surface.XrPreferenceFieldCount == 8
|
||||
&& Surface.XrControllerBindingAxisCount == 8
|
||||
&& Surface.XrSupportedControllerFamilyCount == 4
|
||||
);
|
||||
TestTrue(
|
||||
TEXT("The control settings ownership surface must expose the bounded XR preference, controller-profile, and controller-settings ownership packet."),
|
||||
Surface.bXrPreferenceProfileReady
|
||||
&& Surface.bXrControllerBindingProfileReady
|
||||
&& Surface.bXrControllerSettingsOwnershipReady
|
||||
&& Surface.bXrControllerRebindingOwnershipReady
|
||||
&& Surface.XrRuntimeOwnerId == TEXT("xr/openxr-desktop-training-runtime-owner")
|
||||
&& Surface.XrPreferenceProfileId == TEXT("xr-openxr-training-preferences/v1")
|
||||
&& Surface.XrControllerBindingProfileId == TEXT("xr-openxr-motion-controllers/v1")
|
||||
&& Surface.XrControllerSettingsOwnerId
|
||||
== TEXT("xr-openxr-controller-settings-owner/v1")
|
||||
&& Surface.XrControllerRebindingSurfaceId
|
||||
== TEXT("xr-openxr-controller-rebinding-surface/v1")
|
||||
&& Surface.XrDefaultControllerLayoutPresetId
|
||||
== TEXT("xr-openxr-controller-layout-default/v1")
|
||||
&& Surface.XrPreferenceFieldCount == 8
|
||||
&& Surface.XrControllerBindingAxisCount == 8
|
||||
&& Surface.XrSupportedControllerFamilyCount == 4
|
||||
&& Surface.XrControllerSettingsFieldCount == 8
|
||||
&& Surface.XrControllerRebindableInputCount == 12
|
||||
&& Surface.XrControllerLayoutPresetCount == 3
|
||||
);
|
||||
TestEqual(
|
||||
TEXT("The control settings ownership surface must keep the default active higher-dimensional view context explicit when no live session is attached."),
|
||||
Surface.ActiveHigherDimensionalViewContextId,
|
||||
|
|
@ -1506,12 +1547,14 @@ bool FHyperTwistTrainingPanelControlSettingsOwnershipInspectSurfaceTest::RunTest
|
|||
Surface.MagicCube5DSelectorCount,
|
||||
4
|
||||
);
|
||||
TestTrue(
|
||||
TEXT("The control settings ownership surface must say plainly that XR/controller rebinding is not yet shipped."),
|
||||
Surface.DetailLine.Contains(TEXT("not yet shipped"))
|
||||
&& Surface.DetailLine.Contains(TEXT("project OpenXR plugin enabled"))
|
||||
&& Surface.DetailLine.Contains(TEXT("xr-openxr-training-preferences/v1"))
|
||||
);
|
||||
TestTrue(
|
||||
TEXT("The control settings ownership surface must say plainly that XR/controller rebinding is first-party-owned while packaged proof is not yet shipped."),
|
||||
Surface.DetailLine.Contains(TEXT("not yet shipped"))
|
||||
&& Surface.DetailLine.Contains(TEXT("project OpenXR plugin enabled"))
|
||||
&& Surface.DetailLine.Contains(TEXT("xr-openxr-training-preferences/v1"))
|
||||
&& Surface.DetailLine.Contains(TEXT("xr-openxr-controller-settings-owner/v1"))
|
||||
&& Surface.DetailLine.Contains(TEXT("xr-openxr-controller-rebinding-surface/v1"))
|
||||
);
|
||||
TestTrue(
|
||||
TEXT("The control settings ownership surface must keep the fixed desktop-hosted No-Go posture visible."),
|
||||
Surface.DetailLine.Contains(TEXT("No-Go"))
|
||||
|
|
@ -1670,17 +1713,28 @@ bool FHyperTwistCoachDashboardControlSettingsOwnershipInspectSurfaceTest::RunTes
|
|||
TEXT("The coach dashboard control settings ownership surface must preserve the explicit enabled OpenXR project plugin posture."),
|
||||
Surface.bOpenXrProjectPluginEnabled
|
||||
);
|
||||
TestTrue(
|
||||
TEXT("The coach dashboard control settings ownership surface must expose the bounded XR preference and controller binding packet."),
|
||||
Surface.bXrPreferenceProfileReady
|
||||
&& Surface.bXrControllerBindingProfileReady
|
||||
&& Surface.XrRuntimeOwnerId == TEXT("xr/openxr-desktop-training-runtime-owner")
|
||||
&& Surface.XrPreferenceProfileId == TEXT("xr-openxr-training-preferences/v1")
|
||||
&& Surface.XrControllerBindingProfileId == TEXT("xr-openxr-motion-controllers/v1")
|
||||
&& Surface.XrPreferenceFieldCount == 8
|
||||
&& Surface.XrControllerBindingAxisCount == 8
|
||||
&& Surface.XrSupportedControllerFamilyCount == 4
|
||||
);
|
||||
TestTrue(
|
||||
TEXT("The coach dashboard control settings ownership surface must expose the bounded XR preference, controller binding, and controller settings packet."),
|
||||
Surface.bXrPreferenceProfileReady
|
||||
&& Surface.bXrControllerBindingProfileReady
|
||||
&& Surface.bXrControllerSettingsOwnershipReady
|
||||
&& Surface.bXrControllerRebindingOwnershipReady
|
||||
&& Surface.XrRuntimeOwnerId == TEXT("xr/openxr-desktop-training-runtime-owner")
|
||||
&& Surface.XrPreferenceProfileId == TEXT("xr-openxr-training-preferences/v1")
|
||||
&& Surface.XrControllerBindingProfileId == TEXT("xr-openxr-motion-controllers/v1")
|
||||
&& Surface.XrControllerSettingsOwnerId
|
||||
== TEXT("xr-openxr-controller-settings-owner/v1")
|
||||
&& Surface.XrControllerRebindingSurfaceId
|
||||
== TEXT("xr-openxr-controller-rebinding-surface/v1")
|
||||
&& Surface.XrPreferenceFieldCount == 8
|
||||
&& Surface.XrControllerBindingAxisCount == 8
|
||||
&& Surface.XrSupportedControllerFamilyCount == 4
|
||||
&& Surface.XrControllerSettingsFieldCount == 8
|
||||
&& Surface.XrControllerRebindableInputCount == 12
|
||||
&& Surface.XrControllerLayoutPresetCount == 3
|
||||
&& !Surface.bFinishedControllerRebindingReady
|
||||
&& !Surface.bWindowsPackagedControllerProofReady
|
||||
);
|
||||
TestTrue(
|
||||
TEXT("The coach dashboard control settings ownership surface must preserve the structured No-Go decision and reopen requirements."),
|
||||
Surface.bNativeOpenXrControllerWideningNoGo
|
||||
|
|
@ -1764,25 +1818,37 @@ bool FHyperTwistTrainingPanelControlProfileRosterInspectSurfaceTest::RunTest(
|
|||
&& Surface.Magic120CellSelectorCount == 4
|
||||
&& Surface.MagicCube5DSelectorCount == 4
|
||||
);
|
||||
TestFalse(
|
||||
TEXT("The control/profile roster surface must keep unfinished controller rebinding truth explicit."),
|
||||
Surface.bFinishedControllerRebindingReady
|
||||
TestTrue(
|
||||
TEXT("The control/profile roster surface must now expose first-party controller rebinding ownership explicitly while keeping finished packaged proof false."),
|
||||
!Surface.bFinishedControllerRebindingReady
|
||||
&& Surface.bXrControllerSettingsOwnershipReady
|
||||
&& Surface.bXrControllerRebindingOwnershipReady
|
||||
&& !Surface.bWindowsPackagedControllerProofReady
|
||||
);
|
||||
TestTrue(
|
||||
TEXT("The control/profile roster surface must keep the current enabled OpenXR project plugin posture explicit."),
|
||||
Surface.bOpenXrProjectPluginEnabled
|
||||
);
|
||||
TestTrue(
|
||||
TEXT("The control/profile roster surface must expose the bounded XR controller profile packet."),
|
||||
Surface.bXrPreferenceProfileReady
|
||||
&& Surface.bXrControllerBindingProfileReady
|
||||
&& Surface.XrRuntimeOwnerId == TEXT("xr/openxr-desktop-training-runtime-owner")
|
||||
&& Surface.XrPreferenceProfileId == TEXT("xr-openxr-training-preferences/v1")
|
||||
&& Surface.XrControllerBindingProfileId == TEXT("xr-openxr-motion-controllers/v1")
|
||||
&& Surface.XrPreferenceFieldCount == 8
|
||||
&& Surface.XrControllerBindingAxisCount == 8
|
||||
&& Surface.XrSupportedControllerFamilyCount == 4
|
||||
);
|
||||
TestTrue(
|
||||
TEXT("The control/profile roster surface must expose the bounded XR controller profile and controller settings packet."),
|
||||
Surface.bXrPreferenceProfileReady
|
||||
&& Surface.bXrControllerBindingProfileReady
|
||||
&& Surface.bXrControllerSettingsOwnershipReady
|
||||
&& Surface.bXrControllerRebindingOwnershipReady
|
||||
&& Surface.XrRuntimeOwnerId == TEXT("xr/openxr-desktop-training-runtime-owner")
|
||||
&& Surface.XrPreferenceProfileId == TEXT("xr-openxr-training-preferences/v1")
|
||||
&& Surface.XrControllerBindingProfileId == TEXT("xr-openxr-motion-controllers/v1")
|
||||
&& Surface.XrControllerSettingsOwnerId
|
||||
== TEXT("xr-openxr-controller-settings-owner/v1")
|
||||
&& Surface.XrControllerRebindingSurfaceId
|
||||
== TEXT("xr-openxr-controller-rebinding-surface/v1")
|
||||
&& Surface.XrPreferenceFieldCount == 8
|
||||
&& Surface.XrControllerBindingAxisCount == 8
|
||||
&& Surface.XrSupportedControllerFamilyCount == 4
|
||||
&& Surface.XrControllerSettingsFieldCount == 8
|
||||
&& Surface.XrControllerRebindableInputCount == 12
|
||||
&& Surface.XrControllerLayoutPresetCount == 3
|
||||
);
|
||||
TestEqual(
|
||||
TEXT("The control/profile roster surface must expose a stable structured XR host decision id."),
|
||||
Surface.XrHostDecisionId,
|
||||
|
|
@ -1795,12 +1861,14 @@ bool FHyperTwistTrainingPanelControlProfileRosterInspectSurfaceTest::RunTest(
|
|||
&& Surface.bRequiresUserFacingSettingsRebindingForReopen
|
||||
&& Surface.bRequiresWindowsPackagedControllerValidationForReopen
|
||||
);
|
||||
TestTrue(
|
||||
TEXT("The control/profile roster surface must say plainly that controller rebinding is not yet shipped."),
|
||||
Surface.DetailLine.Contains(TEXT("not yet shipped"))
|
||||
&& Surface.DetailLine.Contains(TEXT("project OpenXR plugin is enabled"))
|
||||
&& Surface.DetailLine.Contains(TEXT("xr-openxr-motion-controllers/v1"))
|
||||
);
|
||||
TestTrue(
|
||||
TEXT("The control/profile roster surface must say plainly that controller rebinding is first-party-owned while packaged proof is not yet shipped."),
|
||||
Surface.DetailLine.Contains(TEXT("not yet shipped"))
|
||||
&& Surface.DetailLine.Contains(TEXT("project OpenXR plugin is enabled"))
|
||||
&& Surface.DetailLine.Contains(TEXT("xr-openxr-motion-controllers/v1"))
|
||||
&& Surface.DetailLine.Contains(TEXT("xr-openxr-controller-settings-owner/v1"))
|
||||
&& Surface.DetailLine.Contains(TEXT("xr-openxr-controller-rebinding-surface/v1"))
|
||||
);
|
||||
TestTrue(
|
||||
TEXT("The control/profile roster surface must keep the fixed No-Go host decision visible alongside the unfinished controller rebinding truth."),
|
||||
Surface.DetailLine.Contains(TEXT("No-Go"))
|
||||
|
|
@ -1906,17 +1974,28 @@ bool FHyperTwistCoachDashboardControlProfileRosterInspectSurfaceTest::RunTest(
|
|||
TEXT("The coach dashboard control/profile roster surface must preserve the explicit enabled OpenXR project plugin posture."),
|
||||
Surface.bOpenXrProjectPluginEnabled
|
||||
);
|
||||
TestTrue(
|
||||
TEXT("The coach dashboard control/profile roster surface must expose the bounded XR controller profile packet."),
|
||||
Surface.bXrPreferenceProfileReady
|
||||
&& Surface.bXrControllerBindingProfileReady
|
||||
&& Surface.XrRuntimeOwnerId == TEXT("xr/openxr-desktop-training-runtime-owner")
|
||||
&& Surface.XrPreferenceProfileId == TEXT("xr-openxr-training-preferences/v1")
|
||||
&& Surface.XrControllerBindingProfileId == TEXT("xr-openxr-motion-controllers/v1")
|
||||
&& Surface.XrPreferenceFieldCount == 8
|
||||
&& Surface.XrControllerBindingAxisCount == 8
|
||||
&& Surface.XrSupportedControllerFamilyCount == 4
|
||||
);
|
||||
TestTrue(
|
||||
TEXT("The coach dashboard control/profile roster surface must expose the bounded XR controller profile and controller settings packet."),
|
||||
Surface.bXrPreferenceProfileReady
|
||||
&& Surface.bXrControllerBindingProfileReady
|
||||
&& Surface.bXrControllerSettingsOwnershipReady
|
||||
&& Surface.bXrControllerRebindingOwnershipReady
|
||||
&& Surface.XrRuntimeOwnerId == TEXT("xr/openxr-desktop-training-runtime-owner")
|
||||
&& Surface.XrPreferenceProfileId == TEXT("xr-openxr-training-preferences/v1")
|
||||
&& Surface.XrControllerBindingProfileId == TEXT("xr-openxr-motion-controllers/v1")
|
||||
&& Surface.XrControllerSettingsOwnerId
|
||||
== TEXT("xr-openxr-controller-settings-owner/v1")
|
||||
&& Surface.XrControllerRebindingSurfaceId
|
||||
== TEXT("xr-openxr-controller-rebinding-surface/v1")
|
||||
&& Surface.XrPreferenceFieldCount == 8
|
||||
&& Surface.XrControllerBindingAxisCount == 8
|
||||
&& Surface.XrSupportedControllerFamilyCount == 4
|
||||
&& Surface.XrControllerSettingsFieldCount == 8
|
||||
&& Surface.XrControllerRebindableInputCount == 12
|
||||
&& Surface.XrControllerLayoutPresetCount == 3
|
||||
&& !Surface.bFinishedControllerRebindingReady
|
||||
&& !Surface.bWindowsPackagedControllerProofReady
|
||||
);
|
||||
TestTrue(
|
||||
TEXT("The coach dashboard control/profile roster surface must preserve the structured No-Go decision and reopen requirements."),
|
||||
Surface.bNativeOpenXrControllerWideningNoGo
|
||||
|
|
|
|||
|
|
@ -322,53 +322,61 @@ bool FHyperTwistControlSettingsContinuityStateFormattingTest::RunTest(
|
|||
&& MissingSelectorOwnershipLine.Contains(TEXT("active selectors 0"))
|
||||
);
|
||||
|
||||
const FString MissingStatusLine =
|
||||
HyperTwistTrainingControlSurfaceFormatting::BuildControlSettingsStatusLine(
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false
|
||||
);
|
||||
const FString MissingStatusLine =
|
||||
HyperTwistTrainingControlSurfaceFormatting::BuildControlSettingsStatusLine(
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false
|
||||
);
|
||||
TestTrue(
|
||||
TEXT("The control/settings status formatter must render fully absent dedicated-family ownership as missing instead of overstating it as partial."),
|
||||
MissingStatusLine.Contains(TEXT("camera missing"))
|
||||
&& MissingStatusLine.Contains(TEXT("immersive missing"))
|
||||
&& MissingStatusLine.Contains(TEXT("120-cell owned settings missing"))
|
||||
&& MissingStatusLine.Contains(TEXT("5D owned settings missing"))
|
||||
&& MissingStatusLine.Contains(TEXT("selectors missing"))
|
||||
&& MissingStatusLine.Contains(TEXT("selector recall unavailable"))
|
||||
);
|
||||
|
||||
const FString MixedStatusLine =
|
||||
HyperTwistTrainingControlSurfaceFormatting::BuildControlSettingsStatusLine(
|
||||
false,
|
||||
false,
|
||||
true,
|
||||
false,
|
||||
true,
|
||||
true,
|
||||
true,
|
||||
false,
|
||||
true,
|
||||
false,
|
||||
false
|
||||
MissingStatusLine.Contains(TEXT("camera missing"))
|
||||
&& MissingStatusLine.Contains(TEXT("immersive missing"))
|
||||
&& MissingStatusLine.Contains(TEXT("120-cell owned settings missing"))
|
||||
&& MissingStatusLine.Contains(TEXT("5D owned settings missing"))
|
||||
&& MissingStatusLine.Contains(TEXT("selectors missing"))
|
||||
&& MissingStatusLine.Contains(TEXT("selector recall unavailable"))
|
||||
&& MissingStatusLine.Contains(TEXT("XR rebinding missing"))
|
||||
&& MissingStatusLine.Contains(TEXT("packaged proof not yet shipped"))
|
||||
);
|
||||
|
||||
const FString MixedStatusLine =
|
||||
HyperTwistTrainingControlSurfaceFormatting::BuildControlSettingsStatusLine(
|
||||
false,
|
||||
false,
|
||||
true,
|
||||
false,
|
||||
true,
|
||||
true,
|
||||
true,
|
||||
false,
|
||||
true,
|
||||
false,
|
||||
false,
|
||||
true,
|
||||
false
|
||||
);
|
||||
TestTrue(
|
||||
TEXT("The control/settings status formatter must keep mixed missing-versus-partial continuity truth explicit instead of collapsing it into one generic degraded label."),
|
||||
MixedStatusLine.Contains(TEXT("camera missing"))
|
||||
&& MixedStatusLine.Contains(TEXT("immersive partial"))
|
||||
&& MixedStatusLine.Contains(TEXT("120-cell owned settings ready"))
|
||||
&& MixedStatusLine.Contains(TEXT("5D owned settings partial"))
|
||||
&& MixedStatusLine.Contains(TEXT("selectors partial"))
|
||||
&& MixedStatusLine.Contains(TEXT("selector recall unavailable"))
|
||||
);
|
||||
MixedStatusLine.Contains(TEXT("camera missing"))
|
||||
&& MixedStatusLine.Contains(TEXT("immersive partial"))
|
||||
&& MixedStatusLine.Contains(TEXT("120-cell owned settings ready"))
|
||||
&& MixedStatusLine.Contains(TEXT("5D owned settings partial"))
|
||||
&& MixedStatusLine.Contains(TEXT("selectors partial"))
|
||||
&& MixedStatusLine.Contains(TEXT("selector recall unavailable"))
|
||||
&& MixedStatusLine.Contains(TEXT("XR rebinding owned"))
|
||||
&& MixedStatusLine.Contains(TEXT("packaged proof not yet shipped"))
|
||||
);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
@ -435,24 +443,28 @@ bool FHyperTwistControlProfileContinuityStateFormattingTest::RunTest(
|
|||
&& ReadyContinuityLine.Contains(TEXT("preference fields 5"))
|
||||
);
|
||||
|
||||
const FString MixedStatusLine =
|
||||
HyperTwistTrainingControlSurfaceFormatting::BuildControlProfileStatusLine(
|
||||
const FString MixedStatusLine =
|
||||
HyperTwistTrainingControlSurfaceFormatting::BuildControlProfileStatusLine(
|
||||
true,
|
||||
true,
|
||||
true,
|
||||
true,
|
||||
true,
|
||||
true,
|
||||
false,
|
||||
false,
|
||||
true,
|
||||
false
|
||||
);
|
||||
false,
|
||||
false,
|
||||
true,
|
||||
false,
|
||||
true,
|
||||
false
|
||||
);
|
||||
TestTrue(
|
||||
TEXT("The control/profile status formatter must keep partial continuity truth explicit alongside unloaded active-selection and unavailable selector-recall posture."),
|
||||
MixedStatusLine.Contains(TEXT("classic keyboard ready"))
|
||||
&& MixedStatusLine.Contains(TEXT("active selection not loaded"))
|
||||
&& MixedStatusLine.Contains(TEXT("selector recall unavailable"))
|
||||
&& MixedStatusLine.Contains(TEXT("profile continuity partial"))
|
||||
);
|
||||
MixedStatusLine.Contains(TEXT("classic keyboard ready"))
|
||||
&& MixedStatusLine.Contains(TEXT("active selection not loaded"))
|
||||
&& MixedStatusLine.Contains(TEXT("selector recall unavailable"))
|
||||
&& MixedStatusLine.Contains(TEXT("profile continuity partial"))
|
||||
&& MixedStatusLine.Contains(TEXT("controller rebinding owned"))
|
||||
&& MixedStatusLine.Contains(TEXT("packaged proof not yet shipped"))
|
||||
);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -101,13 +101,47 @@ bool FHyperTwistXrPreferenceAndBindingProfileTest::RunTest(const FString& Parame
|
|||
&& BindingProfile.RequiredAxisNames.Contains(TEXT("HyperTwistXr_Turn"))
|
||||
&& BindingProfile.RequiredAxisNames.Contains(TEXT("HyperTwistXr_RightTrigger"))
|
||||
);
|
||||
TestTrue(
|
||||
TEXT("The XR controller binding profile must preserve the supported controller families."),
|
||||
BindingProfile.ControllerFamilyIds.Contains(TEXT("controller/oculus-touch"))
|
||||
&& BindingProfile.ControllerFamilyIds.Contains(TEXT("controller/valve-index"))
|
||||
);
|
||||
return true;
|
||||
}
|
||||
TestTrue(
|
||||
TEXT("The XR controller binding profile must preserve the supported controller families."),
|
||||
BindingProfile.ControllerFamilyIds.Contains(TEXT("controller/oculus-touch"))
|
||||
&& BindingProfile.ControllerFamilyIds.Contains(TEXT("controller/valve-index"))
|
||||
);
|
||||
|
||||
const FHyperTwistXrControllerSettingsOwnershipSurface ControllerSettingsSurface =
|
||||
UHyperTwistXrRuntimeLibrary::BuildBundledXrControllerSettingsOwnershipSurface();
|
||||
TestTrue(
|
||||
TEXT("The XR controller settings ownership surface must be structurally valid."),
|
||||
ControllerSettingsSurface.IsStructurallyValid()
|
||||
);
|
||||
TestEqual(
|
||||
TEXT("The XR controller settings ownership owner id must stay stable."),
|
||||
ControllerSettingsSurface.SettingsOwnerId,
|
||||
FString(TEXT("xr-openxr-controller-settings-owner/v1"))
|
||||
);
|
||||
TestEqual(
|
||||
TEXT("The XR controller settings rebinding surface id must stay stable."),
|
||||
ControllerSettingsSurface.RebindingSurfaceId,
|
||||
FString(TEXT("xr-openxr-controller-rebinding-surface/v1"))
|
||||
);
|
||||
TestEqual(
|
||||
TEXT("The XR controller settings default layout preset id must stay stable."),
|
||||
ControllerSettingsSurface.DefaultLayoutPresetId,
|
||||
FString(TEXT("xr-openxr-controller-layout-default/v1"))
|
||||
);
|
||||
TestTrue(
|
||||
TEXT("The XR controller settings ownership surface must preserve the exact shipped rebindable XR input names."),
|
||||
ControllerSettingsSurface.RebindableInputNames.Contains(TEXT("HyperTwistXr_VerticalAdjust"))
|
||||
&& ControllerSettingsSurface.RebindableInputNames.Contains(TEXT("HyperTwistXr_Recenter"))
|
||||
&& ControllerSettingsSurface.RebindableInputNames.Contains(TEXT("HyperTwistXr_TogglePostureMode"))
|
||||
);
|
||||
TestTrue(
|
||||
TEXT("The XR controller settings ownership surface must keep packaged controller proof explicitly outside the current packet."),
|
||||
ControllerSettingsSurface.ExplicitExclusions.Contains(
|
||||
TEXT("launch-tier packaged controller certification ownership"))
|
||||
&& !ControllerSettingsSurface.bWindowsPackagedControllerProofReady
|
||||
);
|
||||
return true;
|
||||
}
|
||||
|
||||
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
|
||||
FHyperTwistXrTrainingPawnDefaultsTest,
|
||||
|
|
|
|||
|
|
@ -179,8 +179,8 @@ Use these as the current governing docs:
|
|||
camera-settings owner, immersive-presence settings, dedicated-family
|
||||
`Magic120Cell` / `MagicCube5D` view-profile ownership, selector ownership,
|
||||
persisted generated-mode selector recall when a structurally valid launch
|
||||
request is present, and explicit unfinished XR/controller rebinding truth
|
||||
without opening the browser shell
|
||||
request is present, and the then-live bounded XR/controller settings gap
|
||||
truth without opening the browser shell
|
||||
- Validation evidence on `2026-06-24`: the same primary reverse-SSH
|
||||
`localhost:22022` lane rebuilt maintained isolated worktree
|
||||
`C:\HyperTwist_worktrees\phase10validate` with `Result: Succeeded` and
|
||||
|
|
@ -208,8 +208,8 @@ Use these as the current governing docs:
|
|||
dedicated-family `Magic120Cell` /
|
||||
`MagicCube5D` runtime/view profile ids plus selector counts, persisted
|
||||
generated-mode selector recall when a structurally valid launch request is
|
||||
present, and explicit unfinished controller rebinding truth without opening
|
||||
the browser shell
|
||||
present, and the then-live bounded XR/controller settings gap truth without
|
||||
opening the browser shell
|
||||
- Validation evidence on `2026-06-24`: after hash-syncing the touched type,
|
||||
training-panel, coach-dashboard, and browser-test files into maintained
|
||||
isolated worktree `C:\HyperTwist_worktrees\phase10validate`, the same
|
||||
|
|
|
|||
|
|
@ -151,17 +151,25 @@ Therefore the current truthful host decision is:
|
|||
|
||||
Future native XR widening may reopen only when all of the following are true:
|
||||
|
||||
1. polished controller bindings plus rebinding/preferences ownership are
|
||||
first-party and user-visible
|
||||
2. Windows build plus focused automation plus packaged validation prove actual
|
||||
1. Windows build plus focused automation plus packaged validation prove actual
|
||||
headset/controller behavior on the shipping lane
|
||||
3. public/product copy is updated only after those proofs exist
|
||||
2. public/product copy is updated only after those proofs exist
|
||||
|
||||
## Immediate consequence
|
||||
|
||||
No native XR implementation packet is currently open by default.
|
||||
|
||||
If the project later reopens this lane, the first implementation packet should
|
||||
be finished user-facing controller settings/rebinding ownership plus packaged
|
||||
controller proof above the now-landed bounded runtime-owner substrate, not
|
||||
public marketing widening.
|
||||
be packaged controller proof and shipping-lane validation above the now-landed
|
||||
bounded runtime-owner plus controller-settings substrate, not public marketing
|
||||
widening.
|
||||
|
||||
## Update - 2026-07-01 - controller-settings ownership continuation
|
||||
|
||||
- the next same-family continuation now adds first-party user-facing
|
||||
controller settings ownership, layout presets, and rebinding truth for the
|
||||
exact shipped XR input ids above the already-landed bounded runtime-owner
|
||||
substrate
|
||||
- that means the broader native XR/controller widening gate no longer waits on
|
||||
a hypothetical settings/rebinding layer; it now waits on Windows packaged
|
||||
controller validation with controller truth on the shipping lane
|
||||
|
|
|
|||
|
|
@ -147,7 +147,8 @@ truthfully claim:
|
|||
- higher-dimensional selector ownership
|
||||
- recall of the latest persisted generated-mode selector posture when a
|
||||
structurally valid launch request has been observed
|
||||
- explicit unfinished XR/controller rebinding truth
|
||||
- bounded XR/controller settings and rebinding truth while packaged proof
|
||||
remains unfinished
|
||||
- Windows validation on `2026-06-24` rebuilt the maintained validation root
|
||||
`C:\HyperTwist_worktrees\phase10validate` with `Result: Succeeded`,
|
||||
UnrealBuildTool `Total execution time: 4331.11 seconds`, then exported
|
||||
|
|
@ -197,7 +198,8 @@ truthfully claim:
|
|||
- the current `4` selector options in each dedicated-family roster
|
||||
- recall of the latest persisted generated-mode selector posture when a
|
||||
structurally valid launch request has been observed
|
||||
- explicit unfinished XR/controller rebinding truth
|
||||
- bounded XR/controller settings and rebinding truth while packaged proof
|
||||
remains unfinished
|
||||
- Windows validation on `2026-06-24` hash-synced the touched training, coach,
|
||||
type, and browser-test files into maintained validation root
|
||||
`C:\HyperTwist_worktrees\phase10validate`, rebuilt the widened slice with
|
||||
|
|
@ -386,9 +388,11 @@ truthfully claim:
|
|||
above; current source truth is that the desktop-hosted branch now carries a
|
||||
deliberately bounded `OpenXR` + `XRBase` stack plus first-party runtime-owner
|
||||
classes
|
||||
- that later exact-source state still does **not** yet prove:
|
||||
- the later `2026-07-01` same-family continuation now also adds first-party
|
||||
user-facing controller settings, layout presets, and rebinding ownership for
|
||||
the exact shipped XR input ids
|
||||
- the current remaining unproven pieces therefore are:
|
||||
- packaged headset/controller behavior on the Windows lane
|
||||
- polished user-facing controller rebinding/settings ownership
|
||||
- broader launch-tier cross-device XR completion
|
||||
- `HyperTwistTrainingImmersiveEnvironmentLibrary.cpp` clearly establishes a
|
||||
first-party immersive/scenic environment direction, but it also explicitly
|
||||
|
|
@ -416,6 +420,11 @@ Current truthful product wording should say:
|
|||
selectors
|
||||
- camera, immersive, and dedicated-family view settings already have bounded
|
||||
first-party ownership
|
||||
- bounded desktop XR now also has first-party controller settings/rebinding
|
||||
ownership for the exact shipped XR input ids
|
||||
- native/operator structured state must keep that owned controller lane
|
||||
separate from finished packaged-proof truth; ownership here does not itself
|
||||
mean shipping-lane XR completion
|
||||
- immersive/scenic training direction: first-party owned and source-backed
|
||||
- full VR/controller/settings polish lane: not yet complete enough to market as
|
||||
finished
|
||||
|
|
@ -429,13 +438,15 @@ manual:
|
|||
and higher-dimensional control ownership from unfinished VR/controller claims
|
||||
- docs/resources/support surfaces may truthfully describe the current shipped
|
||||
roster of keyboard, scenic immersive, and dedicated-family selector/view
|
||||
options, but they must not collapse that into finished controller rebinding
|
||||
options together with the now-owned bounded XR controller settings/rebinding
|
||||
lane, but they must not collapse that into finished packaged XR completion
|
||||
- docs/resources/support surfaces may truthfully describe current persisted
|
||||
higher-dimensional selector recall on native operator/training surfaces, but
|
||||
they must not market that as a full generalized preferences suite
|
||||
- docs/resources/support surfaces may truthfully describe current camera or
|
||||
immersive or dedicated-family view settings ownership, but they must not
|
||||
inflate that into full controller rebinding or headset-runtime completion
|
||||
immersive or dedicated-family view settings ownership together with bounded
|
||||
XR controller settings/rebinding ownership, but they must not inflate that
|
||||
into packaged headset/runtime completion
|
||||
- public copy should not imply that `EnhancedInput` plus motion-controller axis
|
||||
groundwork already equals a finished OpenXR/runtime or rebinding lane
|
||||
- browser/distribution pages may describe the simulator input posture, but they
|
||||
|
|
@ -450,12 +461,9 @@ The explicit native host/plugin decision is now fixed by:
|
|||
That packet leaves native XR widening closed by default.
|
||||
|
||||
If the project later reopens this lane from the current `No-Go` posture, the
|
||||
first clean implementation packet should be:
|
||||
first clean remaining implementation packet should be:
|
||||
|
||||
1. a bounded native plugin/runtime-owner slice above the current desktop-hosted
|
||||
immersive lane
|
||||
2. finished controller-specific rebinding/preferences ownership above the
|
||||
already-landed camera/immersive/view settings surfaces and the current
|
||||
shipped roster inspect surface
|
||||
3. packaged validation on the Windows Unreal lane with headset/controller truth
|
||||
kept explicit
|
||||
1. packaged validation on the Windows Unreal lane with headset/controller truth
|
||||
kept explicit above the now-landed bounded runtime-owner plus controller
|
||||
settings/rebinding substrate
|
||||
2. public/product copy update only after that packaged proof exists
|
||||
|
|
|
|||
|
|
@ -1160,8 +1160,7 @@ Current audit note:
|
|||
- HyperTwist now owns a real bounded desktop-training OpenXR runtime-owner
|
||||
seam
|
||||
- the broader desktop-hosted XR/controller widening branch still remains
|
||||
closed until polished rebinding/settings ownership and packaged
|
||||
headset/controller proof exist
|
||||
closed until packaged headset/controller proof exists on the shipping lane
|
||||
- this is the right intermediate state to document publicly because it is
|
||||
stronger than the older negative-only wording and still honest about the
|
||||
remaining gap
|
||||
|
|
@ -2319,8 +2318,6 @@ Latest same-family responsive public-route expansion follow-up on `2026-06-29`:
|
|||
- the shared browser manual plus protected dashboard control/settings roster
|
||||
now state the explicit reopen gate instead of only broad unfinished-XR
|
||||
shorthand:
|
||||
- dedicated runtime owners for real headset/controller execution
|
||||
- user-facing settings and controller-rebinding ownership
|
||||
- Windows packaged controller validation with controller truth
|
||||
- that means the public manual, support FAQ, pricing/download control notes,
|
||||
and the protected dashboard now mirror the already-landed native structured
|
||||
|
|
@ -2348,6 +2345,38 @@ Latest same-family responsive public-route expansion follow-up on `2026-06-29`:
|
|||
- current truthful interpretation:
|
||||
- the browser/manual lane now matches the already-landed native XR boundary
|
||||
conditions more exactly instead of only repeating the headline `No-Go`
|
||||
|
||||
## Current XR controller-settings ownership continuation (`2026-07-01`)
|
||||
|
||||
- the next same-family continuation stays inside the bounded native XR lane and
|
||||
closes the remaining first-party settings/rebinding ownership gap above the
|
||||
already-landed runtime-owner seam
|
||||
- current exact-source truth in this continuation is now:
|
||||
- bounded desktop `OpenXR` runtime owner exists
|
||||
- first-party user-facing controller settings ownership exists
|
||||
- first-party controller rebinding ownership exists for the exact shipped XR
|
||||
input ids
|
||||
- first-party controller settings/rebinding ownership is now kept separate
|
||||
from legacy finished packaged-proof flags, so native/operator structured
|
||||
state says `owned now` without overstating `shipping-lane complete`
|
||||
- broader native XR/controller widening remains closed until Windows packaged
|
||||
controller validation with controller truth exists on the shipping lane
|
||||
- a final same-family exact-source semantics hardening follow-up on
|
||||
`2026-07-02` then revalidated that truth on maintained Windows root
|
||||
`C:\HyperTwist_worktrees\phase10validate`:
|
||||
- editor build:
|
||||
- `Result: Succeeded`
|
||||
- UnrealBuildTool `Total execution time: 3104.63 seconds`
|
||||
- focused XR automation:
|
||||
- `Saved\AutomationReports\XR-ControllerSettingsOwnership-Semantics-20260702\index.json`
|
||||
- all `4` `HyperTwist.FirstParty.XR.*` tests succeeded
|
||||
- focused browser automation:
|
||||
- `Saved\AutomationReports\Browser-XrControllerSettingsOwnership-Semantics-20260702\index.json`
|
||||
- all `26` `HyperTwist.Browser.*` tests succeeded
|
||||
- public/manual wording for the browser shell should therefore now say:
|
||||
- the downloadable owns the bounded XR runtime and controller settings lane
|
||||
- the browser shell does not own packaged controller proof
|
||||
- HyperTwist still must not market broader cross-device XR completion yet
|
||||
- the public and protected website surfaces remain honest about current
|
||||
desktop control ownership without overclaiming reopened VR/controller
|
||||
product status
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -178,9 +178,11 @@ statement forward too without overclaiming launch-tier completion:
|
|||
- full browser automation `Browser-XrHardening-20260701`: `26/26`
|
||||
`HyperTwist.Browser.*` green
|
||||
|
||||
That is real bounded runtime ownership, but it is still not the same thing as
|
||||
finished launch-tier controller rebinding, packaged headset proof, or generic
|
||||
marketed VR completion.
|
||||
That is real bounded runtime ownership, and the current same-family
|
||||
controller-settings continuation now also owns first-party user-facing
|
||||
controller settings, layout presets, and rebinding truth for the exact shipped
|
||||
XR input ids. But it is still not the same thing as packaged
|
||||
headset/controller proof or generic marketed VR completion.
|
||||
|
||||
Canonical audit note:
|
||||
|
||||
|
|
|
|||
|
|
@ -226,7 +226,7 @@ Current consolidated milestone snapshot:
|
|||
training-panel and coach-dashboard ownership for the current viewer
|
||||
camera-settings tool, immersive-presence settings, dedicated-family
|
||||
`Magic120Cell` / `MagicCube5D` view-profile ownership, selector ownership,
|
||||
and explicit unfinished XR/controller rebinding truth; the same primary
|
||||
and the then-live bounded XR/controller settings gap truth; the same primary
|
||||
reverse-SSH `localhost:22022` lane rebuilt the maintained validation root
|
||||
`C:\HyperTwist_worktrees\phase10validate` with `Result: Succeeded`,
|
||||
UnrealBuildTool `Total execution time: 4331.11 seconds`, then exported
|
||||
|
|
|
|||
|
|
@ -428,7 +428,7 @@ describe('protected app pages', () => {
|
|||
expect(screen.getByText('2. Run a recognition and correction workflow')).toBeTruthy()
|
||||
expect(screen.getAllByText(/classic-wca-keyboard\/v1/i).length).toBeGreaterThan(0)
|
||||
expect(screen.getByText('XR reopen requirements')).toBeTruthy()
|
||||
expect(screen.getByText('It would also need user-facing settings and controller-rebinding ownership instead of leaving that lane at inspect-surface truth only.')).toBeTruthy()
|
||||
expect(screen.getByText('The native simulator now also owns first-party user-facing controller settings, layout presets, and rebinding truth for the exact shipped XR input ids.')).toBeTruthy()
|
||||
expect(screen.getByText(byExactTextContent('Billing source: session', 'LI'))).toBeTruthy()
|
||||
expect(await screen.findAllByText(byExactTextContent('Manifest viewer access: active', 'LI'))).toHaveLength(2)
|
||||
expect(await screen.findByText(byExactTextContent('Windows: Primary shipping lane (Version 1.0.0, Channel candidate)', 'LI'))).toBeTruthy()
|
||||
|
|
|
|||
|
|
@ -737,7 +737,7 @@ describe('public marketing pages', () => {
|
|||
expect(screen.getByText('Current selectable control roster')).toBeTruthy()
|
||||
expect(screen.getAllByText('Selectable immersive and family-specific settings').length).toBeGreaterThan(0)
|
||||
expect(screen.getAllByText('XR reopen requirements').length).toBeGreaterThan(0)
|
||||
expect(screen.getByText('It would also need Windows packaged controller validation with controller truth, not only editor-time or config-only confidence.')).toBeTruthy()
|
||||
expect(screen.getByText('The remaining reopen requirement is Windows packaged controller validation with controller truth on the shipping lane rather than only editor-time or config-only confidence.')).toBeTruthy()
|
||||
expect(screen.getByText('Runtime control guide')).toBeTruthy()
|
||||
expect(screen.getByText('Native diagnostics check')).toBeTruthy()
|
||||
expect(screen.getByText('Common capability questions')).toBeTruthy()
|
||||
|
|
@ -929,7 +929,7 @@ describe('public marketing pages', () => {
|
|||
expect(screen.getByText('What the software actually does after access is granted')).toBeTruthy()
|
||||
expect(screen.getByText('Higher-dimensional families behind the plans')).toBeTruthy()
|
||||
expect(screen.getAllByText('Current input and runtime control truth').length).toBeGreaterThan(0)
|
||||
expect(screen.getByText('The current host decision remains desktop-hosted No-Go on native OpenXR/controller widening; any future reopen would still need dedicated runtime owners, user-facing settings and controller-rebinding ownership, and Windows packaged controller validation with controller truth.')).toBeTruthy()
|
||||
expect(screen.getByText('The current host decision remains desktop-hosted No-Go on broader native OpenXR/controller widening until Windows packaged controller validation with controller truth is complete.')).toBeTruthy()
|
||||
expect(screen.getByText('Choose the right HyperTwist surface')).toBeTruthy()
|
||||
const pricingDecisionGuideHeading = screen.getByRole('heading', { name: 'Choose the next release move' })
|
||||
const pricingDecisionGuideSection = pricingDecisionGuideHeading.closest('section')
|
||||
|
|
@ -1440,7 +1440,7 @@ describe('public marketing pages', () => {
|
|||
expect(screen.getAllByText(/classic-wca-keyboard\/v1/i).length).toBeGreaterThan(0)
|
||||
expect(screen.getByText('4. Open the higher-dimensional lanes and read the control boundary honestly')).toBeTruthy()
|
||||
expect(screen.getByText(/I\/K = R\/R', J\/F = U\/U', H\/G = F\/F'/i)).toBeTruthy()
|
||||
expect(screen.getByText(/bounded OpenXR plugin stack and first-party runtime-owner substrate/i)).toBeTruthy()
|
||||
expect(screen.getByText(/bounded OpenXR plugin stack, first-party runtime-owner substrate, and first-party controller settings\/rebinding ownership/i)).toBeTruthy()
|
||||
expect(screen.getByText(/R scramble, H hint, Enter submit, F mode, V hold-to-talk, C cycle voice/i)).toBeTruthy()
|
||||
expect(screen.getAllByText(/latest persisted generated-mode selector posture is available for recall/i).length).toBeGreaterThan(0)
|
||||
expect(screen.getByText('Feature-registry-backed wording only')).toBeTruthy()
|
||||
|
|
|
|||
|
|
@ -601,12 +601,12 @@ export const inputAndDevicePostureCards = [
|
|||
},
|
||||
{
|
||||
title: 'XR groundwork exists, but the full VR lane is not finished',
|
||||
description: 'EnhancedInput posture and motion-controller groundwork exist, but HyperTwist does not yet market a fully finished OpenXR/controller/rebinding runtime lane.',
|
||||
description: 'EnhancedInput posture, bounded OpenXR runtime ownership, and first-party controller settings/rebinding now exist, but HyperTwist still does not market a fully finished cross-device VR/runtime lane.',
|
||||
bullets: [
|
||||
'Project config already carries EnhancedInput plus Vive, Oculus Touch, Mixed Reality, and Valve Index axis groundwork.',
|
||||
'The current shipping branch now enables the bounded OpenXR plugin stack and first-party runtime-owner substrate, but that still does not collapse the broader native XR/controller lane out of its explicit desktop-hosted No-Go posture.',
|
||||
'Current product truth should not overclaim headset-specific runtime ownership or polished user-facing input rebinding.',
|
||||
'The current host decision remains desktop-hosted No-Go on native OpenXR/controller widening; any future reopen would still need dedicated runtime owners, user-facing settings and controller-rebinding ownership, and Windows packaged controller validation with controller truth.',
|
||||
'The current shipping branch now enables the bounded OpenXR plugin stack, first-party runtime-owner substrate, and first-party controller settings/rebinding ownership, but that still does not collapse the broader native XR/controller lane out of its explicit desktop-hosted No-Go posture.',
|
||||
'Current product truth should not overclaim packaged controller proof or broader finished cross-device VR completion.',
|
||||
'The current host decision remains desktop-hosted No-Go on broader native OpenXR/controller widening until Windows packaged controller validation with controller truth is complete.',
|
||||
],
|
||||
},
|
||||
] as const
|
||||
|
|
@ -648,7 +648,8 @@ export const runtimeControlGuideCards = [
|
|||
bullets: [
|
||||
'Use keyboard and mouse as the current strong operator-facing control lane.',
|
||||
'Treat current camera, immersive, and dedicated-family view settings ownership as real, including bounded camera-export continuity and session-local immersive recall, but still bounded.',
|
||||
'Do not assume a finished headset-specific VR onboarding, controller rebinding, or broad preferences UI has already landed.',
|
||||
'Do not assume a finished headset-specific VR onboarding, packaged controller proof, or broad cross-device XR rollout has already landed.',
|
||||
'Treat the current controller settings/rebinding ownership as bounded native runtime truth, not as proof that the broader XR/controller widening gate is already open.',
|
||||
'Treat any future XR/controller/settings widening as a deliberate reopen above the current desktop-hosted No-Go posture, not as something the public website should overclaim today.',
|
||||
],
|
||||
},
|
||||
|
|
@ -683,17 +684,17 @@ export const controlProfileRosterCards = [
|
|||
'Those same native surfaces now also keep the shipped camera-export artifact and immersive session-recall boundary explicit together with recall-scope and preference-field counts, so bounded local continuity is no longer implied only through summary prose.',
|
||||
'Those same native surfaces now also prove which family-specific persistence boundary and state-semantics contract currently owns the higher-dimensional settings lane.',
|
||||
'Viewer camera settings and immersive-presence settings are already first-party owned in the desktop runtime.',
|
||||
'Finished headset-specific controller rebinding and broad VR onboarding remain outside the current desktop-hosted No-Go lane unless a later reopen proves the need.',
|
||||
'First-party controller settings/rebinding now also exist inside the bounded desktop OpenXR lane, while packaged headset/controller proof and broader VR onboarding remain outside the current desktop-hosted No-Go branch.',
|
||||
],
|
||||
},
|
||||
{
|
||||
title: 'XR reopen requirements',
|
||||
description: 'The current desktop-hosted No-Go boundary is not vague. HyperTwist already knows what would have to become true before native XR/controller widening could be reopened honestly.',
|
||||
description: 'The current desktop-hosted No-Go boundary is not vague. HyperTwist already owns the bounded runtime-owner and controller-settings pieces, and it knows the remaining proof required before broader native XR/controller widening could be reopened honestly.',
|
||||
bullets: [
|
||||
'A future reopen would need dedicated runtime owners for real headset/controller execution rather than only project-level groundwork or diagnostics.',
|
||||
'It would also need user-facing settings and controller-rebinding ownership instead of leaving that lane at inspect-surface truth only.',
|
||||
'It would also need Windows packaged controller validation with controller truth, not only editor-time or config-only confidence.',
|
||||
'Until those three conditions exist together, keep reading the current shipped lane as keyboard, mouse, camera, immersive, and dedicated-family settings ownership rather than a finished VR/controller product branch.',
|
||||
'The bounded desktop runtime already owns dedicated runtime owners for live OpenXR/controller execution inside the current training lane.',
|
||||
'The native simulator now also owns first-party user-facing controller settings, layout presets, and rebinding truth for the exact shipped XR input ids.',
|
||||
'The remaining reopen requirement is Windows packaged controller validation with controller truth on the shipping lane rather than only editor-time or config-only confidence.',
|
||||
'Until that packaged proof exists, keep reading the current shipped lane as keyboard, mouse, camera, immersive, dedicated-family settings ownership, and bounded XR ownership rather than a finished cross-device VR/controller product branch.',
|
||||
],
|
||||
},
|
||||
] as const
|
||||
|
|
@ -1029,7 +1030,7 @@ export const browserLimitCards = [
|
|||
bullets: [
|
||||
'It does not own package-validated training behavior, replay execution, or the higher-dimensional packaged family maps.',
|
||||
'It does not own low-latency native input, device/runtime integration, or the dedicated Unreal session and scene surfaces that power the downloadable.',
|
||||
'It does not own finished OpenXR/controller runtime behavior, user-facing rebinding, or packaged controller validation.',
|
||||
'It does not own packaged controller validation or the broader finished XR/controller branch; the bounded OpenXR runtime and controller-settings ownership stay native-only.',
|
||||
],
|
||||
},
|
||||
{
|
||||
|
|
@ -1196,7 +1197,7 @@ export const helpCenterCards = [
|
|||
description: 'The current input story is strong, but it is bounded and should be taught honestly.',
|
||||
bullets: [
|
||||
'Keyboard, mouse, touch, camera, immersive settings, selector continuity, and dedicated-family view ownership are already real.',
|
||||
'The current desktop-hosted OpenXR/controller widening boundary remains explicit No-Go until dedicated runtime owners, rebinding ownership, and Windows packaged controller proof all exist together.',
|
||||
'The current desktop-hosted OpenXR/controller widening boundary remains explicit No-Go until Windows packaged controller proof exists on the shipping lane; bounded runtime owners plus first-party controller settings/rebinding already exist underneath that gate.',
|
||||
],
|
||||
},
|
||||
{
|
||||
|
|
@ -1420,6 +1421,16 @@ export const publicManualRouteAtlasCards = [
|
|||
] as const
|
||||
|
||||
export const releasePacketCards = [
|
||||
{
|
||||
date: 'July 1, 2026',
|
||||
version: 'Bounded XR controller-settings ownership packet',
|
||||
category: 'Desktop XR truth and operator diagnostics',
|
||||
notes: [
|
||||
'Added first-party controller settings and rebinding ownership above the bounded OpenXR runtime-owner seam, including exact shipped XR input ids, layout presets, and user-visible settings tags.',
|
||||
'Projected that ownership through native training/operator diagnostics and current public/manual wording so the same desktop XR truth appears across Unreal and the web shell.',
|
||||
'Kept the broader desktop-hosted XR/controller widening branch explicitly closed until Windows packaged controller validation with controller truth exists on the shipping lane.',
|
||||
],
|
||||
},
|
||||
{
|
||||
date: 'June 30, 2026',
|
||||
version: 'Public manual deepening packet',
|
||||
|
|
@ -1800,7 +1811,7 @@ export const browserDesktopDecisionFaqs = [
|
|||
},
|
||||
{
|
||||
question: 'Is VR/controller support already fully finished?',
|
||||
answer: 'Not yet. HyperTwist already has real classic keyboard and mouse or touch ownership, viewer camera and immersive settings ownership, higher-dimensional selector and view ownership, EnhancedInput posture, and motion-controller groundwork. But the current host decision remains desktop-hosted No-Go on native OpenXR/controller widening. A future reopen would still need dedicated runtime owners, user-facing settings and controller-rebinding ownership, and Windows packaged controller validation with controller truth before the software could honestly claim a finished headset/runtime lane.',
|
||||
answer: 'Not yet. HyperTwist already has real classic keyboard and mouse or touch ownership, viewer camera and immersive settings ownership, higher-dimensional selector and view ownership, EnhancedInput posture, motion-controller groundwork, a bounded OpenXR runtime owner, and first-party controller settings/rebinding ownership. But the broader host decision remains desktop-hosted No-Go on native OpenXR/controller widening until Windows packaged controller validation with controller truth exists on the shipping lane, so the software still should not market a finished headset/runtime branch.',
|
||||
},
|
||||
]
|
||||
|
||||
|
|
@ -1812,7 +1823,7 @@ export const supportFaqs = [
|
|||
...browserDesktopDecisionFaqs,
|
||||
{
|
||||
question: 'Can I already customize controls and higher-dimensional view posture?',
|
||||
answer: 'Partly. The current desktop runtime already owns the classic keyboard profile, viewer camera settings, bounded camera-export continuity, immersive-presence settings, session-local immersive recall, and higher-dimensional projection, focus, stereo, symmetry, and visibility defaults. The native operator surfaces now also expose which Magic120Cell or MagicCube5D session surface, interactive scene, persistence boundary, and state-semantics contract currently owns that settings lane, and they can recall selector posture from the latest persisted generated-mode launch request. A broader polished controller rebinding and preferences layer remains outside the current desktop-hosted No-Go lane unless a later reopen lands dedicated runtime owners, user-facing settings/rebinding ownership, and Windows packaged controller validation with controller truth.',
|
||||
answer: 'Partly. The current desktop runtime already owns the classic keyboard profile, viewer camera settings, bounded camera-export continuity, immersive-presence settings, session-local immersive recall, and higher-dimensional projection, focus, stereo, symmetry, and visibility defaults. The native operator surfaces now also expose which Magic120Cell or MagicCube5D session surface, interactive scene, persistence boundary, and state-semantics contract currently owns that settings lane, and they can recall selector posture from the latest persisted generated-mode launch request. The bounded XR desktop lane now also owns first-party controller settings, layout presets, and rebinding truth for the exact shipped XR input ids. What remains outside the current desktop-hosted No-Go lane is Windows packaged controller proof and broader launch-tier XR completion.',
|
||||
},
|
||||
{
|
||||
question: 'Do higher-dimensional selector choices persist between sessions?',
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue