Skip to content
Snippets Groups Projects
WaypointsFactory.cs 5.08 KiB
Newer Older
MrWarzo's avatar
MrWarzo committed
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
MrWarzo's avatar
MrWarzo committed
        public Transform prefabs_parent; //<! Objet qui va contenir les waypoints

        // Champs privés
        Directions _directions; //<! Contient les informations gps de la course
MrWarzo's avatar
MrWarzo committed
        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
MrWarzo's avatar
MrWarzo committed
        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
MrWarzo's avatar
MrWarzo committed
            _instance = this;
            _map = GameObject.Find("Map");
            _abstractmap = _map.GetComponent<AbstractMap>();
            points = new List<Vector2d>();
MrWarzo's avatar
MrWarzo committed
            _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()
        {
MrWarzo's avatar
MrWarzo committed
            return _instance;
MrWarzo's avatar
MrWarzo committed
        /*
        //! @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()

        //! @brief Créer la route
        //! @details Créer la route avec le point de départ et de fin
MrWarzo's avatar
MrWarzo committed
            _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;
MrWarzo's avatar
MrWarzo committed
            _test = false;
        //! @brief Lance la création de route
        //! @details Lance la création de route
        public void click(string coord1, string coord2)
        {
MrWarzo's avatar
MrWarzo committed
            _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()
        {
MrWarzo's avatar
MrWarzo committed
            if (_coordonnee1 == "" || _coordonnee2 == "")
MrWarzo's avatar
MrWarzo committed
                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);
                    }
                }

MrWarzo's avatar
MrWarzo committed
                PlacementWaypoint(_abstractmap.WorldToGeoPosition(GameObject.FindGameObjectWithTag("end_wp").transform.position));

                GameObject.FindGameObjectWithTag("start_wp").Destroy();
                GameObject.FindGameObjectWithTag("end_wp").Destroy();

MrWarzo's avatar
MrWarzo committed
                _map.GetComponent<SpawnOnMap>().enabled = true;
        //! @brief Enregistre un waypoints
        //! @details Enregistre les coordonnées d'un waypoints
        void PlacementWaypoint(Vector2d coordonnesPoints)
        {
            points.Add(coordonnesPoints);
MrWarzo's avatar
MrWarzo committed
}