예제 #1
0
    private IEnumerator Start()
    {
        int nbrJoueurs = 1, nbrIas = 1, i = 0;

        joueurs = new Dictionary <int, Joueur>(nbrJoueurs);
        Transform joueursGameObject            = GameObject.Find("Joueurs").transform;

        // Création des joueurs.
        for (i = 0; i < nbrJoueurs; i++)
        {
            Instantiate(playerPrefabs[0], joueursGameObject);

            Joueur joueur = joueursGameObject.GetChild(joueursGameObject.childCount - 1).GetComponent <Joueur>();
            InitialisePlayer(joueur, "Joueur" + (i + 1), true, (Utils.couleurs)i);

            joueurs.Add(i, joueur);
        }

        for (i = 0; i < nbrIas; i++)
        {
            Instantiate(playerPrefabs[1], joueursGameObject);

            IAEasy iae = joueursGameObject.GetChild(joueursGameObject.childCount - 1).GetComponent <IAEasy>();
            InitialisePlayer(iae, "IA" + (i + 1), false, (Utils.couleurs)nbrJoueurs + i);

            joueurs.Add(nbrJoueurs + i, iae);
        }

        territoires = coloredTerritories.Territoires;
        routes      = coloredTerritories.Routes;
        List <Territoire> territoireAAttribuer = new List <Territoire>(territoires.Count);

        System.Random rand                     = new System.Random();

        for (i = 0; i < territoires.Count; i++)
        {
            territoireAAttribuer.Add(territoires[i]);
        }

        i = 0;
        BoutiqueManager boutique = GameObject.Find("Boutique button").GetComponent <BoutiqueManager>();

        // Ajout de territoires aux joueurs de façon arbitraire.
        while (territoireAAttribuer.Count > 0)
        {
            // Sélection aléatoire du territoire à attribuer.
            int index = rand.Next(0, territoireAAttribuer.Count);

            while (joueurs[i % joueurs.Count].Ready == false)
            {
                yield return(null);
            }

            joueurs[i % joueurs.Count].Territoires.Add(territoireAAttribuer[index].Num, territoireAAttribuer[index]);

            // Ajout d'une infanterie pour marquer quel territoire appartient à qui.
            Infanterie newUnit = boutique.CreateUnit(
                (int)Utils.unitCode.Infanterie,
                GameObject.Find("Unites").transform,
                territoireAAttribuer[index].position,
                joueurs[i % joueurs.Count]
                ).GetComponent <Infanterie>();

            newUnit.territoire = territoireAAttribuer[index];

            territoireAAttribuer[index].unites.Add(newUnit);
            territoireAAttribuer[index].joueur = joueurs[i % joueurs.Count];
            territoireAAttribuer.RemoveAt(index);
            i++;

            // Au cas où ce serait un peu long.
            yield return(null);
        }

        // Application des bonnes couleurs pour chaque unité.
        for (i = 0; i < joueurs.Count; i++)
        {
            foreach (Unite unit in joueurs[i].Unites)
            {
                unit.lightMaterial = joueurs[i].Material;
                unit.darkMaterial  = joueurs[i].DarkMaterial;

                unit.ApplyMaterial(unit.darkMaterial);
            }
        }

        // Initialisation des fonds du premier joueur.
        joueurs[0].AjouterCredits(joueurs[0].EstimatedEarnings());
    }
예제 #2
0
    /// <summary>
    /// Active le changement de phase/tour
    /// </summary>
    public void PasserButton()
    {
        if (!GetComponent <GUIController>().dialogOpened) // S'il n'y a pas de fenêtre de dialogue d'ouverte
        {
            if (phaseActive == phases.Deploiement)
            {
                List <Unite> .Enumerator unitsEnum = joueurs[joueurActif].Unites.GetEnumerator();
                bool canPass = true;

                while (canPass && unitsEnum.MoveNext())
                {
                    if (unitsEnum.Current is Terrestre)
                    {
                        Terrestre unit = unitsEnum.Current as Terrestre;

                        if (unit.territoire == null)
                        {
                            canPass = false;
                        }
                    }
                    else if (unitsEnum.Current is Aerienne)
                    {
                        Aerienne unit = unitsEnum.Current as Aerienne;

                        if (unit.territoire == null)
                        {
                            canPass = false;
                        }
                    }
                    else
                    {
                        Maritime unit = unitsEnum.Current as Maritime;

                        if (unit.route == null)
                        {
                            canPass = false;
                        }
                    }
                }

                if (canPass)
                {
                    phaseActive = phases.Attaque;

                    if (!joueurs[joueurActif].Humain)
                    {
                        IAEasy joueurIA = joueurs[joueurActif] as IAEasy;

                        joueurIA.IAPlay();
                    }
                }
                else
                {
                    InvalidAction("Vous ne pouvez passer votre tour sans déployer toutes les unités nouvellement achetées.");
                }
            }
            else if (phaseActive == phases.Attaque)
            {
                phaseActive = phases.Mouvement;

                if (!joueurs[joueurActif].Humain)
                {
                    IAEasy joueurIA = joueurs[joueurActif] as IAEasy;

                    joueurIA.IAPlay();
                }
                else
                {
                    button.transform.GetChild(0).GetComponent <Text>().text = "Fin du tour";
                }
            }
            else if (phaseActive == phases.Mouvement)
            {
                ChangeActivePlayer();
            }
        }
    }