Advertisement
Alior

Path finder

Jul 7th, 2018
154
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 6.20 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4.  
  5. public class DirectionFinder : MonoBehaviour
  6.     {
  7.         public enum TransitionType // Do not change.
  8.         {
  9.             WALK,
  10.             RAIL,
  11.             METRO_RAIL,
  12.             SUBWAY,
  13.             TRAM,
  14.             MONORAIL,
  15.             HEAVY_RAIL,
  16.             COMMUTER_TRAIN,
  17.             HIGH_SPEED_TRAIN,
  18.             BUS,
  19.             INTERCITY_BUS,
  20.             TROLLEYBUS,
  21.             SHARE_TAXI,
  22.             FERRY,
  23.             CABLE_CAR,
  24.             GONDOLA_LIFT,
  25.             FUNICULAR,
  26.             OTHER
  27.         }
  28.  
  29.         public TransitionType GetTransitionType(OnlineMapsGoogleDirectionsResult.Step step)
  30.         {
  31.             if (step.transit_details == null)
  32.                 return TransitionType.WALK;
  33.  
  34.             try
  35.             {
  36.                 return (TransitionType)Enum.Parse(typeof(TransitionType), step.transit_details.line.vehicle.type);
  37.             }
  38.             catch (System.Exception ex)
  39.             {
  40.                 Debug.LogException(ex);
  41.                 return TransitionType.OTHER;
  42.             }
  43.         }
  44.  
  45.         private Color GetColorForTransitionType(TransitionType type)
  46.         {
  47.             Color color = Color.magenta;
  48.             switch (type)
  49.             {
  50.                 case TransitionType.BUS:
  51.                     color = Color.green;
  52.                     break;
  53.                 case TransitionType.SUBWAY:
  54.                     color = Color.yellow;
  55.                     break;
  56.                 case TransitionType.TRAM:
  57.                     color = Color.white;
  58.                     break;
  59.             }
  60.  
  61.             return color;
  62.         }
  63.  
  64.         private void Start()
  65.         {
  66.             List<OnlineMapsGoogleDirectionsResult.Step> steps = new List<OnlineMapsGoogleDirectionsResult.Step>();
  67.  
  68.             FindPath("Los Angeles", "Compton", step => steps.Add(step), null,
  69.                 () =>
  70.                 {
  71.  
  72.                     foreach (var step in steps)
  73.                     {
  74.                         TransitionType transitionType = GetTransitionType(step);
  75.  
  76.                         OnlineMapsDrawingLine outline = new OnlineMapsDrawingLine(step.polylineD, Color.yellow, 6.0f);
  77.                         OnlineMaps.instance.AddDrawingElement(outline);
  78.                     }
  79.  
  80.                     foreach (var current in steps)
  81.                     {
  82.                         var transitionType = GetTransitionType(current);
  83.  
  84.                         var line = new OnlineMapsDrawingLine(new OnlineMapsVector2d[] { current.polylineD[0], current.polylineD[0] + new OnlineMapsVector2d(0, 0.000001f) }, Color.yellow, 15.0f);
  85.                         OnlineMaps.instance.AddDrawingElement(line);
  86.                     }
  87.  
  88.                     foreach (var step in steps)
  89.                     {
  90.                         var transitionType = GetTransitionType(step);
  91.                         OnlineMapsDrawingLine route = new OnlineMapsDrawingLine(step.polylineD, GetColorForTransitionType(transitionType), 3.0f);
  92.                         OnlineMaps.instance.AddDrawingElement(route);
  93.                     }
  94.  
  95.                     foreach (var current in steps)
  96.                     {
  97.                         var transitionType = GetTransitionType(current);
  98.                         var color = GetColorForTransitionType(transitionType);
  99.  
  100.                         var darkenColor = color;
  101.                         darkenColor *= 0.5f;
  102.                         darkenColor.a = 1.0f;
  103.  
  104.                         var line = new OnlineMapsDrawingLine(new OnlineMapsVector2d[] { current.polylineD[0], current.polylineD[0] + new OnlineMapsVector2d(0, 0.000001) }, color, 12.0f);
  105.                         OnlineMaps.instance.AddDrawingElement(line);
  106.  
  107.                         var innerLine = new OnlineMapsDrawingLine(new OnlineMapsVector2d[] { current.polylineD[0], current.polylineD[0] + new OnlineMapsVector2d(0, 0.000001) }, darkenColor, 8.0f);
  108.                         innerLine.tooltip = current.string_instructions;
  109.  
  110.                         OnlineMaps.instance.AddDrawingElement(innerLine);
  111.                     }
  112.                 });
  113.         }
  114.  
  115.         private void FindPath(object origin, object destination, Action<OnlineMapsGoogleDirectionsResult.Step> makePathPart, Action<OnlineMapsGoogleDirectionsResult.Step, OnlineMapsGoogleDirectionsResult.Step> makeSign = null, Action onTheEnd = null)
  116.         {
  117.             OnlineMapsGoogleDirections.Params parameters = new OnlineMapsGoogleDirections.Params(origin, destination);
  118.             parameters.mode = OnlineMapsGoogleDirections.Mode.transit;
  119.             parameters.traffic_model = OnlineMapsGoogleDirections.TrafficModel.optimistic;
  120.  
  121.             OnlineMapsGoogleDirections query = OnlineMapsGoogleDirections.Find(parameters);
  122.  
  123.             query.OnComplete += resultString =>
  124.                 {
  125.                     OnlineMapsGoogleDirectionsResult result = OnlineMapsGoogleDirections.GetResult(resultString);
  126.  
  127.                     // Check that the result is not null, and the number of routes is not zero.
  128.                     if (result == null || result.routes.Length == 0)
  129.                     {
  130.                         Debug.Log("Find direction failed");
  131.                         Debug.Log(resultString);
  132.                         return;
  133.                     }
  134.  
  135.                     if (makePathPart != null)
  136.                     {
  137.                         foreach (var leg in result.routes[0].legs)
  138.                             foreach (var step in leg.steps)
  139.                                 makePathPart(step);
  140.                     }
  141.  
  142.                     if (makeSign != null)
  143.                     {
  144.                         OnlineMapsGoogleDirectionsResult.Step previous = null;
  145.                         foreach (var leg in result.routes[0].legs)
  146.                         {
  147.                             foreach (var step in leg.steps)
  148.                             {
  149.                                 makeSign(previous, step);
  150.                                 previous = step;
  151.                             }
  152.                         }
  153.                     }
  154.  
  155.                     if (onTheEnd != null)
  156.                         onTheEnd();
  157.                 };
  158.         }
  159.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement