AR + GPS Location  3.0.0
All Classes Namespaces Functions Variables Properties Events Pages
ARFoundationSessionManager.cs
1 
2 #if !ARGPS_USE_VUFORIA
3 using UnityEngine.XR.ARFoundation;
4 using System;
5 using ARLocation.Utils;
6 
7 #endif
8 
9 #if !ARGPS_USE_VUFORIA
10 public static class ARSessionStateExtensions
11 {
12  public static string ToInfoString(this ARSessionState state)
13  {
14  switch (state)
15  {
16  case ARSessionState.None:
17  return "None";
18  case ARSessionState.Unsupported:
19  return "Unsupported";
20  case ARSessionState.CheckingAvailability:
21  return "CheckingAvailability";
22  case ARSessionState.NeedsInstall:
23  return "NeedsInstall";
24  case ARSessionState.Installing:
25  return "Installing";
26  case ARSessionState.Ready:
27  return "Ready";
28  case ARSessionState.SessionInitializing:
29  return "SessionInitializing";
30  case ARSessionState.SessionTracking:
31  return "SessionTracking";
32  default:
33  return "None";
34  }
35  }
36 }
37 #endif
38 
40 {
41 #if !ARGPS_USE_VUFORIA
43  {
44  private readonly ARSession arSession;
45  private Action onAfterReset;
46  private string infoString;
47  private bool trackingStarted;
48  private Action trackingStartedCallback;
49  private Action trackingRestoredCallback;
50  private Action trackingLostCallback;
51  private ARSessionState currentStatus;
52 
53  public bool DebugMode { get; set; }
54 
55  public ARFoundationSessionManager(ARSession session)
56  {
57  arSession = session;
58  ARSession.stateChanged += ARSessionOnStateChanged;
59  }
60 
61  private void ARSessionOnStateChanged(ARSessionStateChangedEventArgs args)
62  {
63  infoString = args.state.ToInfoString();
64 
65  Logger.LogFromMethod("ARFoundationSessionManager", "ARSessionOnStateChanged", infoString, DebugMode);
66 
67  if (args.state == ARSessionState.SessionTracking)
68  {
69  if (!trackingStarted)
70  {
71  trackingStarted = true;
72  Logger.LogFromMethod("ARFoundationSessionManager", "ARSessionOnStateChanged", "Tracking Started!.", DebugMode);
73  trackingStartedCallback?.Invoke();
74  }
75  else if (currentStatus != ARSessionState.SessionTracking )
76  {
77  Logger.LogFromMethod("ARFoundationSessionManager", "ARSessionOnStateChanged", "Tracking Restored!", DebugMode);
78  trackingRestoredCallback?.Invoke();
79  }
80 
81  if (onAfterReset != null)
82  {
83  Logger.LogFromMethod("ARFoundationSessionManager", "ARSessionOnStateChanged", "Emitting 'OnAfterReset' event.", DebugMode);
84  onAfterReset.Invoke();
85  onAfterReset = null;
86  }
87  }
88  else if (currentStatus == ARSessionState.SessionTracking)
89  {
90  Logger.LogFromMethod("ARFoundationSessionManager", "ARSessionOnStateChanged", "Tracking Lost!", DebugMode);
91  trackingLostCallback?.Invoke();
92  }
93 
94  currentStatus = args.state;
95  }
96 
97  public void Reset(Action callback)
98  {
99  arSession.Reset();
100  onAfterReset += callback;
101  }
102 
103  public string GetSessionInfoString()
104  {
105  return infoString;
106  }
107 
108  public string GetProviderString()
109  {
110  return "ARFoundation";
111  }
112 
113  public void OnARTrackingStarted(Action callback)
114  {
115  if (trackingStarted)
116  {
117  callback.Invoke();
118  return;
119  }
120 
121  trackingStartedCallback += callback;
122  }
123 
124  public void OnARTrackingRestored(Action callback)
125  {
126  trackingRestoredCallback += callback;
127  }
128 
129  public void OnARTrackingLost(Action callback)
130  {
131  trackingLostCallback += callback;
132  }
133  }
134 #else
135  public class ARFoundationSessionManager {}
136 #endif
137 }
ARLocation.Session.ARFoundationSessionManager
Definition: ARFoundationSessionManager.cs:43
ARLocation.Session.IARSessionManager
Definition: IARSessionManager.cs:6
ARLocation.Session
Definition: ARFoundationSessionManager.cs:40
ARLocation.Utils
Definition: CreatePointOfInterestTextMeshes.cs:9
ARLocation
Definition: ARLocationConfigInspector.cs:7