Newer
Older
using UnityEngine;
using Mapbox.Utils;
using Mapbox.Unity.Map;
using Mapbox.Unity.Utilities;
using System.Collections.Generic;
//! @authors MapBox
//! Wakestufou
//! @brief Fait apparaître des waypoints sur la Map.
//! @details Cette classe s'occupe de transformer une liste de coordonnées GPS en waypoints liés à la map.
//! De cette maniètre la caméra peut bouger, les waypoints resterons à leur position de base.
//! du placement des waypoints et tu tracé de la route.
{
// Champs publiques
public List<GameObject> spawnedObjects; //!< Liste des waypoints placés.
public Transform parent; //!< Parent de la liste des waypoints placés.
// Champs privés
private float _zoom; //!< Valeur du zoom de la caméra sur la map.
private static SpawnOnMap _instance; //!< Instance actuelle.
[SerializeField] AbstractMap _map; //!< Map Google Street View.
[SerializeField] [Geocode] Vector2d[] _locations; //!< Liste des positions GPS des waypoints à placer.
[SerializeField] float _spawnScale = 1f; //!< Taille d'un waypoint de base.
[SerializeField] float _spawnScaleStartEnd = 6f; //!< Taille des waypoints de départ et d'arrivée.
[SerializeField] GameObject _markerPrefab; //!< Préfabriqué d'un waypoint de base.
[SerializeField] GameObject _startPrefab; //!< Préfabriqué du waypoint de départ.
[SerializeField] GameObject _endPrefab; //!< Préfabriqué du waypoint d'arrivée.
//! @brief Se lance au lancement du script.
//! @details Crée les waypoints sur la map à partir des coordonnées GPS.
List<Vector2d> Waypoints = new List<Vector2d>(WaypointsFactory.getInstance().getWp());
_locations = new Vector2d[Waypoints.Count];
for (int i = 0; i < _locations.Length; i++)
{
_locations[i] = Waypoints[i];
var _instances = Instantiate(_markerPrefab, parent); ;
_instances = Instantiate(_startPrefab, parent);
_instances.transform.localScale = new Vector3(_spawnScaleStartEnd, _spawnScaleStartEnd, _spawnScaleStartEnd);
}
else if (i == _locations.Length - 1)
{
_instances = Instantiate(_endPrefab, parent);
_instances.transform.localScale = new Vector3(_spawnScaleStartEnd, _spawnScaleStartEnd, _spawnScaleStartEnd);
_instances.transform.localScale = new Vector3(_spawnScale, _spawnScale, _spawnScale);
_instances.transform.localPosition = _map.GeoToWorldPosition(_locations[i], true);
spawnedObjects.Add(_instances);
//! @brief Se répète toutes les 14ms (temps par défaut dans Unity).
//! @details Met à jour les waypoints de la map afin qu'ils gardent leur place réelle et non leur position Unity.
var location = _locations[i];
spawnedObject.transform.localPosition = _map.GeoToWorldPosition(location, true);
spawnedObject.transform.localScale = new Vector3(_spawnScale, _spawnScale, _spawnScale);
}
if (VerifVisible())
{
GameObject.Find("GameManager").GetComponent<RouteTracer>().enabled = true;
{
GameObject.Find("GameManager").GetComponent<RouteTracer>().enabled = true;
_map.UpdateMap(_map.CenterLatitudeLongitude, _zoom);
}
}
//! @brief Test la visibilité des waypoints.
//! @details Si un waypoints n'est dans le champs de vision de la caméra.
//! @return @e bool Si un waypoint n'est pas visible renvoie @b false, sinon renvoie @b true
private bool VerifVisible()
{
bool verif = true;
if (!spawnedObjects[i].GetComponent<Renderer>().isVisible) verif = false;
//! @brief Récupère les objets crées.
//! @return @e List<GameObject> Liste des waypoints qui ont été placés.
public List<GameObject> getSpawnedObject()
{
//! @brief Récupère l'instance de Waypoints.SpawnOnMap
//! @details Récupère l'instance du script actuel afin de respecter un patterne @b singleton.
//! @return @e SpawnOnMap Instance actuelle.
public static SpawnOnMap getInstance()
{