Skip to content
Snippets Groups Projects
RunnersFactory.cs 3.18 KiB
namespace Scripts.IA
{
    using UnityEngine;
    using Scripts.Waypoints;
    using Mapbox.Unity.Map;
    using System.Collections.Generic;

    //! @authors Wakestufou
    //! @brief "Insérer description rapide"
    //! @details "Insérer description détaillée"
    public class RunnersFactory : MonoBehaviour
    {
        // Champs publiques
        public int nbJoueur; //<! "Insérer description de la variable"
        public Transform parent; //<! "Insérer description de la variable"
        public Runners copy; //<! "Insérer description de la variable"
        public List<GameObject> _listRunners; //<! "Insérer description de la variable"
        public float moyenneMotivation = 0; //<! "Insérer description de la variable"

        private System.Random rdn; //<! "Insérer description de la variable"
        private static RunnersFactory instance; //<! "Insérer description de la variable"
        private AbstractMap _map; //<! "Insérer description de la variable"

        //! @brief Se lance au lancement du script.
        //! @details "Insérer description détaillée"
        void Start()
        {
            _listRunners = new List<GameObject>();
            _map = GameObject.Find("Map").GetComponent<AbstractMap>();
            instance = this;
            rdn = new System.Random();

            nbJoueur = 5 + Ui.fame * 2;

            for (int i = 0; i < nbJoueur; i++)
            {
                _listRunners.Add(Instantiate(copy, _map.GeoToWorldPosition(WaypointsFactory.getInstance().getWp()[0]),
                            new Quaternion(0, 0, 0, 0), parent).gameObject);
                moyenneMotivation += _listRunners[i].GetComponent<Runners>().motivation;
            }

            moyenneMotivation /= float.Parse(_listRunners.Count.ToString());
        }

        //! @brief Se répète toutes les 14ms (temps par défaut dans Unity).
        //! @details "Insérer description détaillée"
        private void Update()
        {
            _listRunners.Clear();
            moyenneMotivation = 0;
            for (int i = 0; i < GameObject.Find("Sportifs").transform.childCount; i++)
            {
                _listRunners.Add(GameObject.Find("Sportifs").transform.GetChild(i).gameObject);
                moyenneMotivation += _listRunners[i].GetComponent<Runners>().motivation;
            }
            moyenneMotivation /= float.Parse(_listRunners.Count.ToString());

            if (GameObject.Find("Sportifs").transform.childCount != 0)
            {
                Ui.motiv = moyenneMotivation;

                if (Ui.motiv < 0)
                {
                    Ui.motiv = 0;
                }
                else if (Ui.motiv > 100)
                {
                    Ui.motiv = 100;
                }
            }
            else
            {

            }
        }

        //! @brief "Insérer description rapide"
        //! @details "Insérer description détaillée"
        public System.Random getRandom()
        {
            return rdn;
        }

        //! @brief "Insérer description rapide"
        //! @details "Insérer description détaillée"
        public static RunnersFactory getInstance()
        {
            return instance;
        }

    }
}