VuforiaSessionManager.cs 4.1 KB

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