Example #1
0
    // Update is called once per frame
    void LateUpdate()
    {
        if (dragNDrop)
        {
            foreach (TuileManager tuile in tuilesAmenageables)
            {
                tuile.ColorerTuile(tuile.couleurTuileSurChemin);
            }
            rectTConso.position = Input.mousePosition;
            if (Input.GetMouseButtonUp(0) && controlesActifs)
            {
                ControleSouris.Actuel.controleEstActif = true;
                LayerMask maskTuile = LayerMask.GetMask("Tuile");

                Collider2D checkTuile = Physics2D.OverlapBox(Camera.main.ScreenToWorldPoint(Input.mousePosition), new Vector2(0.01f, 0.01f), 0, maskTuile);

                if (checkTuile)
                {
                    TuileManager tuile = checkTuile.GetComponent <TuileManager>();
                    FenetreValidation.OuvrirFenetreValidation("Voulez-vous consommer cet aménagement et amnéger cette tuile ?",
                                                              "Oui", "Non", () => ConsommerAmenagement(tuile), consommable.icone, consommable.texteRetour);
                    return;
                }
                ReinitConso();
            }
            if (dragNDrop)
            {
                controlesActifs = true;
            }
        }
    }
Example #2
0
    private void Peindre()
    {
        if (modePeinture)
        {
            foreach (GameObject go in Selection.gameObjects)
            {
                if (go.GetComponent <TuileManager>())
                {
                    TuileManager tuile = go.GetComponent <TuileManager>();

                    //Debug.Log(terrainSelectionne.nom);
                    if (tuile.gameObject.name != "TuileHexa")
                    {
                        tuile.SetTerrain(terrainSelectionne);
                    }
                }
                else if (go.GetComponentInParent <TuileManager>())
                {
                    TuileManager tuile = go.GetComponentInParent <TuileManager>();

                    //Debug.Log(terrainSelectionne.nom);
                    if (tuile.gameObject.name != "TuileHexa")
                    {
                        tuile.SetTerrain(terrainSelectionne);
                    }
                }
            }
            Selection.objects = new Object[0];
        }
    }
Example #3
0
    public IEnumerator SeDeplacer()
    {
        if (chemin.Count <= 1)
        {
            ptsDeplacement = 0;
        }
        if (ptsDeplacement > 0)
        {
            prochaineTuile = chemin.Pop();

            if (CheckerFleuve(prochaineTuile.transform.position))
            {
                traverseFleuve = true;
            }

            //Tant qu'on est pas arrivé à la prochaine tuile, on avance vers elle
            //simule un Update() avec le WaitForEndOfFrame()
            while (!EstArrivePrichaineTuile())
            {
                SeDeplacerALaProchaineTuile();
                yield return(new WaitForEndOfFrame());
            }

            //On diminue les points de deplacements disponibles fonction de si on a traversé un fleuve ou pas
            if (traverseFleuve)
            {
                ptsDeplacement--;
            }
            ptsDeplacement -= tuileActuelle.connectionsDistance[tuileActuelle.RecupIndexConnection(prochaineTuile)];
            TrouverTuileActuelle();
        }

        aFaitUneAction = true;
    }
Example #4
0
    public void SpawnTroupeau()
    {
        GameObject troupeauASpawn = ListeAnimaux.Defaut.domesticables[Random.Range(0, ListeAnimaux.Defaut.domesticables.Count - 1)];

        TuileManager[]      tuilesFront  = DamierGen.Actuel.RecupTuilesFrontalieres();
        List <TuileManager> tuilesPlaine = new List <TuileManager>();

        for (int i = 0; i < tuilesFront.Length; i++)
        {
            if (tuilesFront[i].terrainTuile is TerrainPlaine && !tuilesFront[i].estOccupee)
            {
                tuilesPlaine.Add(tuilesFront[i]);
            }
        }

        if (tuilesPlaine.Count > 0)
        {
            TuileManager tuileSpawn = tuilesPlaine[Random.Range(0, tuilesPlaine.Count - 1)];

            Vector3 positionSpawn = tuileSpawn.transform.position;
            positionSpawn.z = -3.5f;

            GameObject nvTroupeau = Instantiate(troupeauASpawn, positionSpawn, new Quaternion());
            nvTroupeau.name = troupeauASpawn.name;

            CameraControle.Actuel.CentrerCamera(nvTroupeau.transform.position);
        }
    }
Example #5
0
 public void TuileReinit()
 {
     predecesseur = null;
     distance     = 0;
     parcouru     = false;
     aPortee      = false;
     ColorerTuile(Color.white);
 }
Example #6
0
 private void ConsommerAmenagement(TuileManager tuile)
 {
     if (tuilesAmenageables.Contains(tuile))
     {
         consommable.amenagement.AmenagerTuile(tuile);
         ConsommerConsommable();
     }
 }
Example #7
0
    public override void OnInspectorGUI()
    {
        TuileManager tuileManager = (TuileManager)target;


        if (DrawDefaultInspector())
        {
        }
    }
Example #8
0
    public void RevendiquerTerritoire(TuileManager tuileActuelle, bool revendiquer)
    {
        RevendiquerTuile(tuileActuelle, revendiquer);

        foreach (TuileManager tuile in tuileActuelle.connections)
        {
            RevendiquerTuile(tuile, revendiquer);
        }
    }
Example #9
0
    private void QuandClique()
    {
        if (controleEstActif)
        {
            //Gestion du clique gauche
            if (Input.GetMouseButtonUp(0))
            {
            }
            //Gestion clique droit
            else if (Input.GetMouseButtonUp(1))
            {
                Collider2D checkTuile = Physics2D.OverlapBox(Camera.main.ScreenToWorldPoint(Input.mousePosition), new Vector2(0.01f, 0.01f), 0, maskTuile);

                if (InfoTribus.TribukiJoue && checkTuile && !modeInteraction)
                {
                    TuileManager tuileSelectionnee = checkTuile.GetComponent <TuileManager>();

                    //On se déplace sur la tuile sur laquelle on a cliqué, si elle est à portée
                    if (InfoTribus.TribukiJoue.tuilesAPortee.Contains(tuileSelectionnee) && !InfoTribus.TribukiJoue.estEntreCampement)
                    {
                        InfoTribus.TribukiJoue.Destination = tuileSelectionnee;
                    }
                    else if (InfoTribus.TribukiJoue.estEntreCampement)
                    {
                        InfoTribus.TribukiJoue.EntrerCampement(false);
                    }
                }
            }
            //Gestion clique milieux
            else if (Input.GetMouseButtonDown(2))
            {
                pointAccrocheSouris         = Camera.main.ScreenToWorldPoint(Input.mousePosition);
                camControle.sourisAccrochee = true;
            }
            else if (Input.GetMouseButtonUp(2))
            {
                camControle.sourisAccrochee = false;
            }
        }

        if (modeInteraction)
        {
            //Quand on fait un clique droit et qu'on clique pas sur un enfant de l'interaction, on sort de l'interaction
            //if (Input.GetMouseButtonUp(1))
            //{
            //    Collider2D check = Physics2D.OverlapBox(Camera.main.ScreenToWorldPoint(Input.mousePosition), new Vector2(0.01f, 0.01f), 0);

            //    if (check == null ||
            //    check.GetComponentInParent<Interaction>() == null ||
            //    check.GetComponentInParent<Interaction>() != interactionEnCours)
            //    {
            //        ActiverModeInteraction(interactionEnCours, false);
            //    }
            //}
        }
    }
Example #10
0
    //algo de Dijkstra
    public Stack <TuileManager> TrouverCheminPlusCourt(TuileManager tuileDepart, TuileManager tuileCible)
    {
        ReinitGraphe(); // Juste par sécurité
        List <TuileManager> graphe = new List <TuileManager>(FindObjectsOfType <TuileManager>());

        TuileManager tuileObservee;

        //Retire les tuiles qui sont déjà occupées et donc infranchissables
        List <TuileManager> listeTampon = new List <TuileManager>(graphe);

        foreach (TuileManager noeud in graphe)
        {
            if (noeud.estOccupee)
            {
                listeTampon.Remove(noeud);
            }
        }
        graphe = listeTampon;
        graphe.Add(tuileDepart);
        graphe.Add(tuileCible);

        //On initialise toutes les distance à infini sauf la tuile de départ
        for (int i = 0; i < graphe.Count; i++)
        {
            graphe[i].distance = Mathf.Infinity;
        }
        tuileDepart.distance = 0;

        while (graphe.Count > 0)
        {
            tuileObservee = trouverTuileConnectPlusProche(graphe);
            if (!tuileObservee)
            {
                Debug.LogError("Pourquoi la tuile observée est null ?");
            }
            graphe.Remove(tuileObservee);

            //On met à jour les distances
            for (int i = 0; i < tuileObservee.connections.Count; i++)
            {
                TuileManager connection = tuileObservee.connections[i];

                if (connection.distance > tuileObservee.distance +
                    tuileObservee.connectionsDistance[i])
                {
                    connection.distance = tuileObservee.distance +
                                          tuileObservee.connectionsDistance[i];

                    connection.predecesseur = tuileObservee;
                }
            }
        }

        return(TrouverChemin(tuileDepart, tuileCible));
    }
Example #11
0
 public int RecupIndexConnection(TuileManager connection)
 {
     for (int i = 0; i < connections.Count; i++)
     {
         if (connections[i] == connection)
         {
             return(i);
         }
     }
     return(-1);
 }
Example #12
0
    public TuileManager[] TrouverTuilesParColonne(int indexColonne)
    {
        TuileManager[,] damier = Damier;
        TuileManager[] retour = new TuileManager[damier.GetLength(1)];

        for (int i = 0; i < damier.GetLength(1); i++)
        {
            retour[i] = damier[indexColonne, i];
        }

        return(retour);
    }
Example #13
0
    public TuileManager[] TrouverTuilesParLigne(int indexLigne)
    {
        TuileManager[,] damier = Damier;
        TuileManager[] retour = new TuileManager[damier.GetLength(0)];

        for (int i = 0; i < damier.GetLength(0); i++)
        {
            retour[i] = damier[i, indexLigne];
        }

        return(retour);
    }
Example #14
0
    public void GenDamier(MappeSysteme.Mappe mappe)
    {
        colonnes = mappe.colonnes;
        lignes   = mappe.lignes;

        ClearDamier(true);

        TuileManager[,] damierTuiles = new TuileManager[mappe.colonnes, mappe.lignes];

        int col   = 0;
        int ligne = -1;


        float tailleTuileX = tuileHexa.GetComponent <SpriteRenderer>().bounds.size.x;
        float tailleTuileY = tuileHexa.GetComponent <SpriteRenderer>().bounds.size.y;

        Vector3 positionTuile = new Vector3();

        for (int i = 0; i < mappe.colonnes * mappe.lignes; i++)
        {
            if (i % mappe.colonnes != 0)
            {
                col++;
            }
            else if (ligne <= mappe.lignes)
            {
                col = 0;
                ligne++;
            }

            positionTuile.x = col * tailleTuileX + ((tailleTuileX / 2) * (ligne % 2));
            positionTuile.y = ligne * (tailleTuileY / 4 * 3);
            positionTuile.z = ligne * 0.01f;

            GameObject nvlTuile = Instantiate(tuileHexa, transform);

            nvlTuile.transform.position += positionTuile;

            damierTuiles[col, ligne] = nvlTuile.GetComponent <TuileManager>();
            damierTuiles[col, ligne].SetTerrain(mappe.mappeTerrains[col, ligne]);
        }
        foreach (TuileManager tuile in damierTuiles)
        {
            tuile.Init();
        }

        damier = RecupDamier();

        RenommerTuilesDamier();

        damierFleuve.GenererDamierFleuve(mappe);
    }
Example #15
0
    public List <TuileManager> CreerGrapheTuilesAPortee(TuileManager tuileOrigine, float portee, bool peutEmbarquer)
    {
        ReinitGraphe();
        List <TuileManager> grapheAPortee = new List <TuileManager>();

        Queue <TuileManager> fileTuiles = new Queue <TuileManager>();

        fileTuiles.Enqueue(tuileOrigine);
        tuileOrigine.parcouru = true;

        //Parcours en largeur (BFS)
        while (fileTuiles.Count > 0)
        {
            TuileManager tuileObservee = fileTuiles.Dequeue();

            tuileObservee.EstAPortee();

            if (tuileObservee.distance < portee)
            {
                for (int i = 0; i < tuileObservee.connections.Count; i++)
                {
                    if (tuileObservee.connections[i] != null)
                    {
                        TuileManager tuileFille = tuileObservee.connections[i];

                        if (!tuileFille.parcouru && tuileFille.estOccupee == false) //On demande si la tuile a déjà été explorée par l'algo et si elle est occupée
                        {
                            if (peutEmbarquer)                                      // si on peut embarquer, aucune restriction concernant l'eau
                            {
                                tuileFille.parcouru     = true;
                                tuileFille.predecesseur = tuileObservee;
                                tuileFille.distance    += tuileObservee.connectionsDistance[i] + tuileObservee.distance;
                                fileTuiles.Enqueue(tuileFille);

                                grapheAPortee.Add(tuileFille);
                            }
                            else if (!tuileFille.terrainTuile.ettendueEau)// si on ne peut peux pas embarquer, alors l'algo ne prend pas en compte les tuiles d'eau
                            {
                                tuileFille.parcouru     = true;
                                tuileFille.predecesseur = tuileObservee;
                                tuileFille.distance    += tuileObservee.connectionsDistance[i] + tuileObservee.distance;
                                fileTuiles.Enqueue(tuileFille);

                                grapheAPortee.Add(tuileFille);
                            }
                        }
                    }
                }
            }
        }
        return(grapheAPortee);
    }
Example #16
0
    public Vector2Int RecupererCoordonneesTuile(TuileManager tuile)
    {
        string nomTuile = tuile.gameObject.name;
        int    x;
        int    y;

        nomTuile = nomTuile.Remove(0, "Tuile".Length);
        string[] coordonnees = nomTuile.Split(':');
        x = int.Parse(coordonnees[0]);
        y = int.Parse(coordonnees[1]);

        return(new Vector2Int(x, y));
    }
Example #17
0
    private TuileManager trouverTuileConnectPlusProche(List <TuileManager> graphe)
    {
        float        minim  = Mathf.Infinity;
        TuileManager sommet = null;

        for (int i = 0; i < graphe.Count; i++)
        {
            if (graphe[i].distance < minim)
            {
                minim  = graphe[i].distance;
                sommet = graphe[i];
            }
        }
        return(sommet);
    }
Example #18
0
    // Génère le chemin à partir du graphe de "prédécesseur" créé par la fonction CreerGrapheTuilesAPortee() et TrouverCheminPlusCourt()
    public Stack <TuileManager> TrouverChemin(TuileManager tuileOrigine, TuileManager tuileCible)
    {
        Stack <TuileManager> chemin = new Stack <TuileManager>();

        if (tuileCible.predecesseur != null)//Ne calcule ce faisant pas une tuile cible si elle n'est pas à portée.
        {
            TuileManager tuileObservee = tuileCible;
            while (tuileObservee != tuileOrigine)
            {
                chemin.Push(tuileObservee);
                tuileObservee = tuileObservee.predecesseur;
            }
        }

        return(chemin);
    }
Example #19
0
    /// <summary>
    /// Marche pas, faut pas l'utiliser
    /// </summary>
    /// <param name="coordonneesDeb"></param>
    /// <param name="coordonneesFin"></param>
    /// <returns></returns>
    public TuileManager[] TrouverTuilesParEtendue(Vector2Int coordonneesDeb, Vector2Int coordonneesFin)
    {
        TuileManager[,] damier = Damier;
        TuileManager[] retour = new TuileManager[(coordonneesFin.x - coordonneesDeb.x) * (coordonneesFin.y - coordonneesDeb.y)];

        int index = 0;

        for (int i = coordonneesDeb.y; i < coordonneesFin.y; i++)
        {
            for (int j = coordonneesDeb.x; j < coordonneesFin.x; j++)
            {
                retour[index] = damier[j, i];
                index++;
            }
        }
        return(retour);
    }
Example #20
0
    public TuileManager[] TrouverTuilesParEtendue(int minX, int minY, int maxX, int maxY)
    {
        TuileManager[,] damier = Damier;
        TuileManager[] retour = new TuileManager[(maxX - minX) * (maxY - minY)];

        int index = 0;

        for (int i = minY; i < maxY; i++)
        {
            for (int j = minX; j < maxX; j++)
            {
                retour[index] = damier[j, i];
                index++;
            }
        }
        return(retour);
    }
Example #21
0
    public void Fuire(TuileManager tuileOpposee)
    {
        jetonAttaque = false;

        Vector2 direction = transform.position - (tuileOpposee.transform.position - transform.position);

        LayerMask    maskTuile = LayerMask.GetMask("Tuile");
        RaycastHit2D ray       = Physics2D.Raycast(transform.position, direction);

        if (ray)
        {
            TuileManager tuileCible = ray.collider.GetComponent <TuileManager>();
            if (!tuileCible.estOccupee || !tuileCible.terrainTuile.ettendueEau)
            {
                StartCoroutine(Fuire(direction));
            }
        }
    }
Example #22
0
    private TuileManager[,] RecupDamier()
    {
        TuileManager[,] damier = new TuileManager[colonnes, lignes];
        TuileManager[] damierRef = GetComponentsInChildren <TuileManager>();

        int index = 0;

        for (int y = 0; y < lignes; y++)
        {
            for (int x = 0; x < colonnes; x++)
            {
                damier[x, y] = damierRef[index];
                damierRef[index].transform.SetSiblingIndex(index);

                index++;
            }
        }
        return(damier);
    }
Example #23
0
 private void RevendiquerTuile(TuileManager tuile, bool revendiquer)
 {
     if (revendiquer)
     {
         if (!tuile.revendication.revendicateurs.Contains(this))
         {
             tuile.revendication.revendicateurs.Add(this);
             tuilesRevendiquees.Add(tuile.revendication);
         }
     }
     else
     {
         if (tuile.revendication.revendicateurs.Contains(this))
         {
             tuile.revendication.revendicateurs.Remove(this);
             tuilesRevendiquees.Remove(tuile.revendication);
         }
     }
 }
Example #24
0
    private void PlacerPion()
    {
        if (typePionAAjouter != null)
        {
            foreach (GameObject go in Selection.gameObjects)
            {
                TuileManager tuile = go.GetComponentInParent <TuileManager>();
                if (tuile != null && tuile.terrainTuile.GetType() != typeof(TerrainCote))
                {
                    if (typePionAAjouter == typeof(Tribu))
                    {
                        InfoTribus.AjouterTribu(tuile.transform.position);
                    }

                    DesactiverPlacementPion();
                    break;
                }
            }
            Deselection();
        }
    }
Example #25
0
    //Génère le graphe de toutes les tuiles à portée
    public List <TuileManager> CreerGrapheTuilesAPortee(TuileManager tuileOrigine, float portee)
    {
        ReinitGraphe();
        List <TuileManager> grapheAPortee = new List <TuileManager>();

        Queue <TuileManager> fileTuiles = new Queue <TuileManager>();

        fileTuiles.Enqueue(tuileOrigine);
        tuileOrigine.parcouru = true;

        //Parcours en largeur (BFS)
        while (fileTuiles.Count > 0)
        {
            TuileManager tuileObservee = fileTuiles.Dequeue();

            tuileObservee.EstAPortee();

            if (tuileObservee.distance < portee)
            {
                for (int i = 0; i < tuileObservee.connections.Count; i++)
                {
                    if (tuileObservee.connections[i] != null)
                    {
                        TuileManager tuileFille = tuileObservee.connections[i];

                        if (!tuileFille.parcouru && tuileFille.estOccupee == false)//On demande si la tuile a déjà été explorée par l'algo et si elle est occupée
                        {
                            tuileFille.parcouru     = true;
                            tuileFille.predecesseur = tuileObservee;
                            tuileFille.distance    += tuileObservee.connectionsDistance[i] + tuileObservee.distance;
                            fileTuiles.Enqueue(tuileFille);

                            grapheAPortee.Add(tuileFille);
                        }
                    }
                }
            }
        }
        return(grapheAPortee);
    }
Example #26
0
    //Gestion de l'overing
    private void SourisSurvol()
    {
        Collider2D checkTuile = Physics2D.OverlapBox(Camera.main.ScreenToWorldPoint(Input.mousePosition), new Vector2(0.01f, 0.01f), 0, maskTuile);

        if (controleEstActif)
        {
            if (checkTuile && InfoTribus.TribukiJoue)
            {
                TuileManager tuileSurvolee = checkTuile.GetComponent <TuileManager>();

                //Colore le chemin et le met à jour toutes les frames, si la tuile qu'on survole est à portee
                if (tuileSurvolee.aPortee)
                {
                    if (!InfoTribus.TribukiJoue.estEntreCampement && controleEstActif)
                    {
                        InfoTribus.TribukiJoue.pathFinder.ColorerChemin(InfoTribus.TribukiJoue.pathFinder.
                                                                        TrouverChemin(InfoTribus.TribukiJoue.tuileActuelle, tuileSurvolee), tuileSurvolee.couleurTuileSurChemin);
                    }
                }
            }
        }
    }
Example #27
0
    private void TrouverTuilesAmenageables()
    {
        string messageAlerte = "\n<color=#" + ColorUtility.ToHtmlStringRGBA(ListeCouleurs.Defaut.couleurAlerteTexteInterface)
                               + ">Aucune tuile à portée ne peut être aménager<color=\"white\">";

        tuilesAmenageables.Clear();
        for (int i = 0; i < InfoTribus.TribukiJoue.revendication.tuilesRevendiquees.Count; i++)
        {
            TuileManager tuile = InfoTribus.TribukiJoue.revendication.tuilesRevendiquees[i].tuile;

            if (consommable.amenagement.terrainsAmenageables.Contains(tuile.terrainTuile.nom))
            {
                if (tuile != InfoTribus.TribukiJoue.tuileActuelle)
                {
                    if ((tuile.tuileAmenagement.Amenagement == consommable.amenagement && !tuile.tuileAmenagement.amenagementEstActif) ||
                        tuile.tuileAmenagement.Amenagement == null)
                    {
                        tuilesAmenageables.Add(InfoTribus.TribukiJoue.revendication.tuilesRevendiquees[i].tuile);
                    }
                }
            }
        }

        if (tuilesAmenageables.Count > 0)
        {
            if (infobulle.texteInfoBulle.Contains(messageAlerte))
            {
                infobulle.texteInfoBulle = infobulle.texteInfoBulle.Remove(infobulle.texteInfoBulle.IndexOf(messageAlerte), messageAlerte.Length);
            }
        }
        else
        {
            if (!infobulle.texteInfoBulle.Contains(messageAlerte))
            {
                iconeConsommable.GetComponent <InfoBulle>().texteInfoBulle += messageAlerte;
            }
        }
    }
Example #28
0
    public TuileManager[] RecupTuilesFrontalieres()
    {
        TuileManager[] retour = new TuileManager[2 * lignes + 2 * colonnes];

        int index = 0;

        TuileManager[] premierLigne  = TrouverTuilesParLigne(0);
        TuileManager[] derniereLigne = TrouverTuilesParLigne(lignes - 1);

        TuileManager[] premiereColonne = TrouverTuilesParColonne(0);
        TuileManager[] derniereColonne = TrouverTuilesParColonne(colonnes - 1);

        while (index < retour.Length)
        {
            if (index < premierLigne.Length)
            {
                retour[index] = premierLigne[index];
            }
            else if (index < derniereLigne.Length + premierLigne.Length)
            {
                retour[index] = derniereLigne[index - premierLigne.Length];
            }
            else if (index < premiereColonne.Length + derniereLigne.Length + premierLigne.Length)
            {
                retour[index] = premiereColonne[index - (derniereLigne.Length + premierLigne.Length)];
            }
            else
            {
                retour[index] = derniereColonne[index - (premiereColonne.Length + derniereLigne.Length + premierLigne.Length)];
            }

            index++;
        }

        return(retour);
    }
Example #29
0
    public void SpawnPillard()
    {
        GameObject pillard = ListeAnimaux.Defaut.pillard;

        TuileManager[] tuilesFront = DamierGen.Actuel.RecupTuilesFrontalieres();

        List <TuileManager> piocheTuile = new List <TuileManager>();

        foreach (TuileManager tuile in tuilesFront)
        {
            if (!tuile.estOccupee)
            {
                piocheTuile.Add(tuile);
            }
        }

        if (piocheTuile.Count > 0)
        {
            TuileManager tuileSpawn = piocheTuile[Random.Range(0, piocheTuile.Count - 1)];

            Vector3 positionSpawn = tuileSpawn.transform.position;
            positionSpawn.z = -3.5f;

            Pillard nvPillard = Instantiate(pillard, positionSpawn, new Quaternion()).GetComponent <Pillard>();

            Hostile    pillardHost = nvPillard.GetComponent <Hostile>();
            int        min;
            int        max;
            Guerrier[] guerriers = FindObjectsOfType <Guerrier>();
            int        ptAtt     = 0;
            int        ptDef     = 0;

            for (int i = 0; i < guerriers.Length; i++)
            {
                ptAtt += guerriers[i].attaque;
                ptDef += guerriers[i].defense;
            }

            if (pillardHost.attaqueMin == -1)
            {
                min = ptAtt / guerriers.Length;
            }
            else
            {
                min = pillardHost.attaqueMin;
            }
            if (pillardHost.attaqueMax == -1)
            {
                max = ptAtt / guerriers.Length + 2;
            }
            else
            {
                max = pillardHost.attaqueMax;
            }

            pillardHost.attaque = Random.Range(min, max);

            if (pillardHost.defenseMin == -1)
            {
                min = ptDef / guerriers.Length;
            }
            else
            {
                min = pillardHost.defenseMin;
            }
            if (pillardHost.defenseMax == -1)
            {
                max = ptDef / guerriers.Length + 1;
            }
            else
            {
                max = pillardHost.defenseMax;
            }

            pillardHost.defense = Random.Range(min, max);

            Tribu[]            tribus       = FindObjectsOfType <Tribu>();
            List <Demographie> demographies = new List <Demographie>();

            foreach (Tribu tribu in tribus)
            {
                demographies.Add(tribu.demographie);
            }

            int popTotale = 0;

            for (int i = 0; i < demographies.Count; i++)
            {
                popTotale += demographies[i].taillePopulation;
            }

            if (pillardHost.nbrCombattantMin == -1)
            {
                min = popTotale / demographies.Count;
            }
            else
            {
                min = pillardHost.nbrCombattantMin;
            }
            if (pillardHost.nbrCombattantMax == -1)
            {
                max = popTotale / demographies.Count + 2;
            }
            else
            {
                max = pillardHost.nbrCombattantMax;
            }

            pillardHost.nbrCombattant = Random.Range(min, max);
            nvPillard.name            = "Pillard";

            CameraControle.Actuel.CentrerCamera(nvPillard.transform.position);
        }
    }
Example #30
0
    public void SpawnLoup()
    {
        GameObject Loup = null;

        foreach (GameObject predateur in ListeAnimaux.Defaut.Predateurs)
        {
            if (predateur.name == "Loup")
            {
                Loup = predateur;
                break;
            }
        }

        TuileManager[] tuilesFront = DamierGen.Actuel.RecupTuilesFrontalieres();

        List <TuileManager> piocheTuile = new List <TuileManager>();

        foreach (TuileManager tuile in tuilesFront)
        {
            if (!tuile.estOccupee)
            {
                piocheTuile.Add(tuile);
            }
        }

        if (piocheTuile.Count > 0)
        {
            TuileManager tuileSpawn = piocheTuile[Random.Range(0, piocheTuile.Count - 1)];
            if (Loup)
            {
                Vector3 positionSpawn = tuileSpawn.transform.position;
                positionSpawn.z = -3.5f;

                Hostile nvHostile = Instantiate(Loup, positionSpawn, new Quaternion()).GetComponent <Hostile>();

                int        min;
                int        max;
                Guerrier[] guerriers = FindObjectsOfType <Guerrier>();
                int        ptAtt     = 0;
                int        ptDef     = 0;

                for (int i = 0; i < guerriers.Length; i++)
                {
                    ptAtt += guerriers[i].attaque;
                    ptDef += guerriers[i].defense;
                }

                if (nvHostile.attaqueMin == -1)
                {
                    min = ptAtt / guerriers.Length;
                }
                else
                {
                    min = nvHostile.attaqueMin;
                }
                if (nvHostile.attaqueMax == -1)
                {
                    max = ptAtt / guerriers.Length + 1;
                }
                else
                {
                    max = nvHostile.attaqueMax;
                }

                nvHostile.attaque = Random.Range(min, max);

                if (nvHostile.defenseMin == -1)
                {
                    min = ptDef / guerriers.Length;
                }
                else
                {
                    min = nvHostile.defenseMin;
                }
                if (nvHostile.defenseMax == -1)
                {
                    max = ptDef / guerriers.Length + 1;
                }
                else
                {
                    max = nvHostile.defenseMax;
                }

                nvHostile.defense = Random.Range(min, max);

                Tribu[]            tribus       = FindObjectsOfType <Tribu>();
                List <Demographie> demographies = new List <Demographie>();

                foreach (Tribu tribu in tribus)
                {
                    demographies.Add(tribu.demographie);
                }

                int popTotale = 0;

                for (int i = 0; i < demographies.Count; i++)
                {
                    popTotale += demographies[i].taillePopulation;
                }

                if (nvHostile.nbrCombattantMin == -1)
                {
                    min = popTotale / demographies.Count;
                }
                else
                {
                    min = nvHostile.nbrCombattantMin;
                }
                if (nvHostile.nbrCombattantMax == -1)
                {
                    max = popTotale / demographies.Count + 2;
                }
                else
                {
                    max = nvHostile.nbrCombattantMax;
                }

                nvHostile.nbrCombattant = Random.Range(min, max);
                nvHostile.name          = "Loup";
                CameraControle.Actuel.CentrerCamera(nvHostile.transform.position);
            }
            else
            {
                Debug.LogError("Y a pas de Loup dans la liste des animaux !!!");
            }
        }
    }