AR + GPS Location  3.0.0
All Classes Namespaces Functions Variables Properties Events Pages
VuforiaSessionManager.cs
1 #if ARGPS_USE_VUFORIA
2 using Logger = ARLocation.Utils.Logger;
3 using System;
4 using Vuforia;
5 
6 namespace ARLocation.Session
7 {
8  public class VuforiaSessionManager : IARSessionManager
9  {
10  private PositionalDeviceTracker positionalDeviceTracker;
11  private string sessionInfoString;
12  private bool trackingStarted;
13  private Action trackingStartedCallback;
14  private Action onAfterReset;
15  private Action trackingRestoredCallback;
16  private TrackableBehaviour.Status currentStatus = TrackableBehaviour.Status.NO_POSE;
17  private Action trackingLostCallback;
18 
19  public bool DebugMode { get; set; }
20 
21  public VuforiaSessionManager()
22  {
23  positionalDeviceTracker = TrackerManager.Instance.GetTracker<PositionalDeviceTracker>();
24 
25  if (positionalDeviceTracker == null)
26  {
27  sessionInfoString = "NO POSITIONAL TRACKER";
28  }
29 
30  VuforiaARController.Instance.RegisterVuforiaStartedCallback(OnVuforiaStarted);
31  VuforiaARController.Instance.RegisterOnPauseCallback(OnVuforiaPaused);
32  DeviceTrackerARController.Instance.RegisterTrackerStartedCallback(OnTrackerStarted);
33  DeviceTrackerARController.Instance.RegisterDevicePoseStatusChangedCallback(OnDevicePoseStatusChanged);
34  }
35 
36  private void OnDevicePoseStatusChanged(TrackableBehaviour.Status arg1, TrackableBehaviour.StatusInfo arg2)
37  {
38  sessionInfoString = $"OnDevicePoseStatusChanged: {arg1} - {arg2}";
39 
40  Logger.LogFromMethod("VuforiaSessionManager", "OnDevicePoseStatusChanged", sessionInfoString, DebugMode);
41 
42  if (arg1 != TrackableBehaviour.Status.NO_POSE)
43  {
44  if (!trackingStarted)
45  {
46  trackingStarted = true;
47  Logger.LogFromMethod("VuforiaSessionManager", "OnDevicePoseStatusChanged", "Tracking Started!.", DebugMode);
48  trackingStartedCallback?.Invoke();
49  }
50  else if (currentStatus == TrackableBehaviour.Status.NO_POSE)
51  {
52  Logger.LogFromMethod("VuforiaSessionManager", "OnDevicePoseStatusChanged", "Tracking Restored!", DebugMode);
53  trackingRestoredCallback?.Invoke();
54  }
55 
56  if (onAfterReset != null)
57  {
58  Logger.LogFromMethod("VuforiaSessionManager", "OnDevicePoseStatusChanged", "Emitting 'OnAfterReset' event.", DebugMode);
59  onAfterReset.Invoke();
60  onAfterReset = null;
61  }
62  }
63  else if (currentStatus != TrackableBehaviour.Status.NO_POSE)
64  {
65  Logger.LogFromMethod("VuforiaSessionManager", "OnDevicePoseStatusChanged", "Tracking Lost!", DebugMode);
66  trackingLostCallback?.Invoke();
67  }
68 
69  currentStatus = arg1;
70  }
71 
72  private void OnTrackerStarted()
73  {
74  sessionInfoString = $"OnTrackerStarted";
75  }
76 
77  private void OnVuforiaPaused(bool obj)
78  {
79  sessionInfoString = $"OnVuforiaPaused";
80  }
81 
82  private void OnVuforiaStarted()
83  {
84  sessionInfoString = $"OnVuforiaStarted";
85  }
86 
87 
88  public void Reset(Action callback)
89  {
90  positionalDeviceTracker?.Reset();
91  onAfterReset += callback;
92  }
93 
94  public string GetSessionInfoString()
95  {
96  return sessionInfoString;
97  }
98 
99  public string GetProviderString()
100  {
101  return "Vuforia (" + VuforiaUnity.GetVuforiaLibraryVersion() + ")";
102  }
103 
104  public void OnARTrackingStarted(Action callback)
105  {
106  if (trackingStarted)
107  {
108  callback?.Invoke();
109  return;
110  }
111 
112  trackingStartedCallback += callback;
113  }
114 
115  public void OnARTrackingRestored(Action callback)
116  {
117  trackingRestoredCallback += callback;
118  }
119 
120  public void OnARTrackingLost(Action callback)
121  {
122  trackingLostCallback += callback;
123  }
124  }
125 }
126 #endif
ARLocation.Utils.Logger
Definition: Logger.cs:8
ARLocation.Session
Definition: ARFoundationSessionManager.cs:40
ARLocation.Utils
Definition: CreatePointOfInterestTextMeshes.cs:9
ARLocation
Definition: ARLocationConfigInspector.cs:7