namespace Scripts.Waypoints { using System.Collections; using System.Collections.Generic; using UnityEngine; using Mapbox.Utils; using Mapbox.Directions; using Mapbox.Unity; using Mapbox.Unity.Map; using Mapbox.Unity.Utilities; //! @authors Wakestufou //! @brief Gère les Waypoints //! @details Cette classe permet de créer les waypoints pour créer la course public class WaypointsFactory : MonoBehaviour { // Champs publiques public static List<Vector2d> points; //<! Coordonnées des waypoints public Transform prefabs_parent; //<! Objet qui va contenir les waypoints // Champs privés Directions _directions; //<! Contient les informations gps de la course private GameObject _map; //<! Map private static WaypointsFactory _instance; //<! Instance de @b Waypoints.WaypointsFactory Vector2d[] _coordinates; //<! Va contenir @a coordonnee1 et @a coordonnee2 DirectionResource _directionResource; //<! Contient les informations sous forme de json deserialize private DirectionsResponse _DirectionResourceResultat; //<! Contient les informations de @a _directionRessource private bool _test = true; //<! Test si la création des waypoints est finie private AbstractMap _abstractmap; //<! Map Google Street View. private string _coordonnee1; //<! Coordonnées du point de départ private string _coordonnee2; //<! Coordonnées du point de fin //! @brief Se lance au lancement du script. //! @details Initialise les variables void Start() { _instance = this; _map = GameObject.Find("Map"); _abstractmap = _map.GetComponent<AbstractMap>(); points = new List<Vector2d>(); _coordonnee1 = ""; _coordonnee2 = ""; _directions = MapboxAccess.Instance.Directions; _coordinates = new Vector2d[2]; _directionResource = new DirectionResource(_coordinates, RoutingProfile.Driving); _directionResource.Steps = true; } //! @brief Retourne l'instance //! @details return @a instance public static WaypointsFactory getInstance() { return _instance; } /* //! @brief Retourne si les waypoints ont fini d'être crée //! @details Retourne si les waypoints ont fini d'être crée public bool getTest() { return test; }*/ //! @brief Retourne les coordonnées des waypoints //! @details Retourne la liste des coordonnées des waypoints public List<Vector2d> getWp() { return points; } //! @brief Créer la route //! @details Créer la route avec le point de départ et de fin void Route() { _coordinates[0] = Conversions.StringToLatLon(_coordonnee1); _coordinates[1] = Conversions.StringToLatLon(_coordonnee2); _directionResource.Coordinates = _coordinates; _directions.Query(_directionResource, HandleDirectionsResponse); } //! @brief Enregistre les informations //! @details Enregistre les informations en format json deserialize void HandleDirectionsResponse(DirectionsResponse res) { _DirectionResourceResultat = res; _test = false; } //! @brief Lance la création de route //! @details Lance la création de route public void click(string coord1, string coord2) { _coordonnee1 = coord1; _coordonnee2 = coord2; Debug.Log(_coordonnee1); Debug.Log(_coordonnee2); StartCoroutine(createRoad()); } //! @brief Lance la création de route //! @details Lance la création de route IEnumerator createRoad() { if (_coordonnee1 == "" || _coordonnee2 == "") { } else { Route(); yield return new WaitUntil(() => _test == false); PlacementWaypoint(_abstractmap.WorldToGeoPosition(GameObject.FindGameObjectWithTag("start_wp").transform.position)); foreach (var val in _DirectionResourceResultat.Routes[0].Legs[0].Steps) { foreach (var inter in val.Intersections) { PlacementWaypoint(inter.Location); } } PlacementWaypoint(_abstractmap.WorldToGeoPosition(GameObject.FindGameObjectWithTag("end_wp").transform.position)); GameObject.FindGameObjectWithTag("start_wp").Destroy(); GameObject.FindGameObjectWithTag("end_wp").Destroy(); _map.GetComponent<SpawnOnMap>().enabled = true; } } //! @brief Enregistre un waypoints //! @details Enregistre les coordonnées d'un waypoints void PlacementWaypoint(Vector2d coordonnesPoints) { points.Add(coordonnesPoints); } } }