@@ -303,7 +303,8 @@ public Pose PlayspaceFromSpongy
303303 /// <summary>
304304 /// Keep track of whether one-time initializations have been performed yet.
305305 /// </summary>
306- private bool hasBeenStarted = false ;
306+ private enum InitializationState { Uninitialized , Starting , Running } ;
307+ private InitializationState initializationState = InitializationState . Uninitialized ;
307308
308309 /// <summary>
309310 /// A handle of the class offering the optional feature of periodically logging the FrozenWorld engine state to disk
@@ -385,9 +386,9 @@ public void SetContext(WorldLockingContext context)
385386 shared = context . SharedSettings ;
386387 DiagnosticRecordings . SharedSettings = context . DiagnosticsSettings ;
387388
388- if ( ! hasBeenStarted )
389+ if ( initializationState == InitializationState . Uninitialized )
389390 {
390- OneTimeStartUp ( ) ;
391+ ResetAnchorManager ( ) ;
391392 }
392393
393394 ApplyNewSettings ( ) ;
@@ -399,9 +400,11 @@ public void SetContext(WorldLockingContext context)
399400 /// Perform any initialization only appropriate once. This is called after
400401 /// giving the caller a chance to change settings.
401402 /// </summary>
402- private void OneTimeStartUp ( )
403+ public async void ResetAnchorManager ( )
403404 {
404- anchorManager = SelectAnchorManager ( Plugin , headPoseTracker ) ;
405+ initializationState = InitializationState . Starting ;
406+
407+ anchorManager = await SelectAnchorManager ( Plugin , headPoseTracker ) ;
405408
406409 if ( AutoLoad )
407410 {
@@ -412,23 +415,23 @@ private void OneTimeStartUp()
412415 Reset ( ) ;
413416 }
414417
415- hasBeenStarted = true ;
418+ initializationState = InitializationState . Running ;
416419 }
417420
418- private IAnchorManager SelectAnchorManager ( IPlugin plugin , IHeadPoseTracker headTracker )
421+ private async Task < IAnchorManager > SelectAnchorManager ( IPlugin plugin , IHeadPoseTracker headTracker )
419422 {
420423 DebugLogSetup ( $ "Select { shared . anchorSettings . anchorSubsystem } anchor manager.") ;
421424 if ( AnchorManager != null )
422425 {
423- DebugLogSetup ( "Creating new anchormanager , but have old one. Reseting it before replacing." ) ;
426+ DebugLogSetup ( "Creating new anchor manager , but have old one. Reseting it before replacing." ) ;
424427 AnchorManager . Reset ( ) ;
425428 }
426429 var anchorSettings = shared . anchorSettings ;
427430#if WLT_ARFOUNDATION_PRESENT
428431 if ( anchorSettings . anchorSubsystem == AnchorSettings . AnchorSubsystem . ARFoundation )
429432 {
430433 DebugLogSetup ( $ "Trying to create ARF anchor manager on { anchorSettings . ARSessionSource . name } and { anchorSettings . ARSessionOriginSource . name } ") ;
431- AnchorManagerARF arfAnchorManager = AnchorManagerARF . TryCreate ( plugin , headTracker ,
434+ AnchorManagerARF arfAnchorManager = await AnchorManagerARF . TryCreate ( plugin , headTracker ,
432435 anchorSettings . ARSessionSource , anchorSettings . ARSessionOriginSource ) ;
433436 if ( arfAnchorManager != null )
434437 {
@@ -442,7 +445,7 @@ private IAnchorManager SelectAnchorManager(IPlugin plugin, IHeadPoseTracker head
442445 if ( anchorSettings . anchorSubsystem == AnchorSettings . AnchorSubsystem . XRSDK )
443446 {
444447 DebugLogSetup ( $ "Trying to create XR anchor manager") ;
445- AnchorManagerXR xrAnchorManager = AnchorManagerXR . TryCreate ( plugin , headTracker ) ;
448+ AnchorManagerXR xrAnchorManager = await AnchorManagerXR . TryCreate ( plugin , headTracker ) ;
446449 if ( xrAnchorManager != null )
447450 {
448451 DebugLogSetup ( "Success creating XR anchor manager" ) ;
@@ -483,6 +486,8 @@ private IAnchorManager SelectAnchorManager(IPlugin plugin, IHeadPoseTracker head
483486 }
484487 AnchorManagerNull nullAnchorManager = AnchorManagerNull . TryCreate ( plugin , headTracker ) ;
485488 Debug . Assert ( nullAnchorManager != null , "Creation of Null anchor manager should never fail." ) ;
489+ /// No-op await here to suppress warnings if no anchor manager system which requires asynchronous startup is compiled in.
490+ await Task . CompletedTask ;
486491 return nullAnchorManager ;
487492 }
488493
@@ -566,6 +571,11 @@ private void Update()
566571 {
567572 ErrorStatus = "" ;
568573
574+ if ( initializationState != InitializationState . Running )
575+ {
576+ ErrorStatus = $ "Init: F={ Time . frameCount } - { initializationState } ";
577+ return ;
578+ }
569579 if ( hasPendingLoadTask )
570580 {
571581 ErrorStatus = "pending background load task" ;
0 commit comments