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 private string coordonnee1; //<! Coordonnées du point de départ private string coordonnee2; //<! Coordonnées du point de fin 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. //! @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 //! @return @e WaypointsFactory Instance actuelle. 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); } //! @param res Réponse de la direction. //! @brief Enregistre les informations //! @details Enregistre les informations en format json deserialize void HandleDirectionsResponse(DirectionsResponse res) { _DirectionResourceResultat = res; test = false; } //! @param coord1 Coordonnée 1 //! @param coord2 Coordonnée 2 //! @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 //! @return @e IEnumerator Permet d'assigner un délai à la répétition de la coroutine. 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; } } //! @param coordonnesPoints Coordonnées du point à ajouter. //! @brief Enregistre un waypoints //! @details Enregistre les coordonnées d'un waypoints void PlacementWaypoint(Vector2d coordonnesPoints) { points.Add(coordonnesPoints); } } }