RouteLoader.cs 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. using UnityEngine;
  2. using System;
  3. using System.Collections;
  4. namespace ARLocation.MapboxRoutes
  5. {
  6. public class RouteLoader
  7. {
  8. MapboxApi mapbox;
  9. bool verbose;
  10. private string error;
  11. private RouteResponse result;
  12. public string Error => error;
  13. public RouteResponse Result => result;
  14. public RouteLoader(MapboxApi api, bool verboseMode = false)
  15. {
  16. mapbox = api;
  17. verbose = verboseMode;
  18. if (api == null)
  19. {
  20. Debug.LogError("[RouteLoader]: api is null.");
  21. }
  22. if (mapbox == null)
  23. {
  24. Debug.LogError("[RouteLoader]: mapbox is null.");
  25. }
  26. }
  27. public IEnumerator LoadRoute(RouteWaypoint start, RouteWaypoint end, Action<string, RouteResponse> callback)
  28. {
  29. yield return LoadRoute(start, end);
  30. callback?.Invoke(error, result);
  31. }
  32. public IEnumerator LoadRoute(RouteWaypoint start, RouteWaypoint end)
  33. {
  34. Debug.Assert(mapbox != null);
  35. if (verbose)
  36. {
  37. Utils.Logger.LogFromMethod("RouteLoader", "LoadRoute", $"Loading route from {start} to {end}", verbose);
  38. }
  39. // Resolve start location
  40. var resolver = new RouteWaypointResolveLocation(mapbox, start);
  41. yield return resolver.Resolve();
  42. if (resolver.IsError)
  43. {
  44. if (verbose)
  45. {
  46. Utils.Logger.LogFromMethod("RouteLoader", "LoadRoute", $"Failed to resolve start waypoint: {resolver.ErrorMessage}", verbose);
  47. }
  48. error = resolver.ErrorMessage;
  49. result = null;
  50. yield break;
  51. }
  52. Location startLocation = resolver.result;
  53. // Resolve end location
  54. resolver = new RouteWaypointResolveLocation(mapbox, end);
  55. yield return resolver.Resolve();
  56. if (resolver.IsError)
  57. {
  58. if (verbose)
  59. {
  60. Utils.Logger.LogFromMethod("RouteLoader", "LoadRoute", $"Failed to resolve end waypoint: {resolver.ErrorMessage}", verbose);
  61. }
  62. error = resolver.ErrorMessage;
  63. result = null;
  64. yield break;
  65. }
  66. Location endLocation = resolver.result;
  67. if (verbose)
  68. {
  69. Utils.Logger.LogFromMethod("RouteLoader", "LoadRoute", "Querying route...", verbose);
  70. }
  71. // Query the route from startLocation to endLocation
  72. yield return mapbox.QueryRoute(startLocation, endLocation, false, verbose);
  73. if (mapbox.errorMessage != null)
  74. {
  75. if (verbose)
  76. {
  77. Utils.Logger.LogFromMethod("RouteLoader", "LoadRoute", $"Route query failed: {mapbox.errorMessage}", verbose);
  78. }
  79. error = resolver.ErrorMessage;
  80. result = null;
  81. yield break;
  82. }
  83. if (verbose)
  84. {
  85. Utils.Logger.LogFromMethod("RouteLoader", "LoadRoute", $"Done! {mapbox.QueryLocalResult}", verbose);
  86. }
  87. error = null;
  88. result = mapbox.QueryRouteResult;
  89. }
  90. }
  91. }