PathRouteRenderer.cs 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. using UnityEngine;
  2. namespace ARLocation.MapboxRoutes
  3. {
  4. public class PathRouteRenderer : AbstractRouteRenderer
  5. {
  6. [System.Serializable]
  7. public class SettingsData
  8. {
  9. [Tooltip("The Material used to render the line.")]
  10. public Material LineMaterial;
  11. }
  12. [System.Serializable]
  13. private class State
  14. {
  15. public GameObject Go;
  16. public LineRenderer LineRenderer;
  17. public NewPathLineRenderer PathLineRenderer;
  18. public LocationPath Path;
  19. }
  20. public SettingsData Settings;
  21. private State state = new State();
  22. public void OnDestroy()
  23. {
  24. if (state.Go != null)
  25. {
  26. GameObject.Destroy(state.Go);
  27. }
  28. }
  29. public void OnEnable()
  30. {
  31. state.Go = new GameObject("[RoutePathRenderer]");
  32. state.LineRenderer = state.Go.AddComponent<LineRenderer>();
  33. state.LineRenderer.startWidth = 0.25f;
  34. state.LineRenderer.useWorldSpace = true;
  35. state.LineRenderer.alignment = LineAlignment.TransformZ;
  36. state.LineRenderer.material = Settings.LineMaterial;
  37. state.LineRenderer.textureMode = LineTextureMode.Tile;
  38. state.LineRenderer.numCornerVertices = 2;
  39. state.LineRenderer.gameObject.transform.localRotation = Quaternion.Euler(90, 0, 0);
  40. state.PathLineRenderer = state.Go.AddComponent<NewPathLineRenderer>();
  41. state.PathLineRenderer.MaxNumberOfUpdates = 0;
  42. }
  43. public void OnDisable()
  44. {
  45. GameObject.Destroy(state.Go);
  46. state.Go = null;
  47. }
  48. public override void Init(RoutePathRendererArgs args)
  49. {
  50. state.Path = ScriptableObject.CreateInstance<LocationPath>();
  51. state.Path.Locations = new Location[args.RouteGeometry.coordinates.Count];
  52. for (var i = 0; i < state.Path.Locations.Length; i++)
  53. {
  54. state.Path.Locations[i] = args.RouteGeometry.coordinates[i].Clone();
  55. }
  56. state.Path.SplineType = SplineType.LinearSpline;
  57. state.PathLineRenderer.Init(state.Path, state.LineRenderer);
  58. }
  59. public override void OnRouteUpdate(RoutePathRendererArgs args)
  60. {
  61. state.LineRenderer.material.SetVector("_Origin", args.UserPos);
  62. }
  63. }
  64. }