Example #1
0
    private void GenerateChemin(bool FaireChemin)
    {
        isCalculating = true;


        for (int i = 0; i < trajetObject.Count; i++)
        {
            GameObject.Destroy(trajetObject[i]);
        }
        trajetObject = new List <GameObject>();
        float now = Time.realtimeSinceStartup;

        gestionnaireTrajet.ResetAStar(PositionStart, PositionEnd);
        List <Vector2> results = gestionnaireTrajet.CalculerTrajet();

        Debug.Log("temps AStar : " + (Time.realtimeSinceStartup - now) + " Secondes ");
        bool BonChemin    = false;
        int  maxMouvement = paDispo * statCombatant.MpaCombattant;

        if (results.Count <= maxMouvement)
        {
            BonChemin = true;
        }
        for (int i = results.Count - 1; i >= 0; i--)
        {
            if (i + 1 != results.Count)
            {
                if (results[i + 1].x == results[i].x)
                {
                    if (BonChemin)
                    {
                        trajetObject.Add(Instantiate(roadGood, new Vector3(results[i].x + (results[i + 1].x - results[i].x) / 2, 0.5f, results[i].y + (results[i + 1].y - results[i].y) / 2), Quaternion.Euler(0, 90, 0)));
                    }
                    else
                    {
                        trajetObject.Add(Instantiate(road, new Vector3(results[i].x + (results[i + 1].x - results[i].x) / 2, 0.5f, results[i].y + (results[i + 1].y - results[i].y) / 2), Quaternion.Euler(0, 90, 0)));
                    }
                }
                else if (results[i + 1].y == results[i].y)
                {
                    if (BonChemin)
                    {
                        trajetObject.Add(Instantiate(roadGood, new Vector3(results[i].x + (results[i + 1].x - results[i].x) / 2, 0.5f, results[i].y + (results[i + 1].y - results[i].y) / 2), Quaternion.identity));
                    }
                    else
                    {
                        trajetObject.Add(Instantiate(road, new Vector3(results[i].x + (results[i + 1].x - results[i].x) / 2, 0.5f, results[i].y + (results[i + 1].y - results[i].y) / 2), Quaternion.identity));
                    }
                }
            }
        }
        coutTrajet = results.Count;
        int coutEnPa = Mathf.CeilToInt((float)coutTrajet / (float)statCombatant.MpaCombattant);

        if (FaireChemin)
        {
            if (paDispo >= coutEnPa)
            {
                generateurDeCarte.Tableauterrain[new Vector2Int((int)PositionStart.x, (int)PositionStart.y)].IsFree = true;
                if (unJoueurControle)
                {
                    generateurDeCarte.Tableauterrain[new Vector2Int((int)PositionStart.x, (int)PositionStart.y)].UnSoldatDessus = false;
                    generateurDeCarte.Tableauterrain[new Vector2Int((int)PositionStart.x, (int)PositionStart.y)].SoldatDessus   = null;
                }
                else
                {
                    generateurDeCarte.Tableauterrain[new Vector2Int((int)PositionStart.x, (int)PositionStart.y)].UnEnnemyDessus = false;
                    generateurDeCarte.Tableauterrain[new Vector2Int((int)PositionStart.x, (int)PositionStart.y)].EnnemyDessus   = null;
                }
                paDispo -= coutEnPa;
                trajet.Add(PositionEnd);
                trajet.AddRange(results);
                enTrajet      = true;
                isCalculating = false;
                Debug.Log("temps AStar avec affichage : " + (Time.realtimeSinceStartup - now) + " Secondes ");
            }
            else
            {
                Debug.Log("Mouvement impossible pas assez de pa");
                UiMessage = "Mouvement impossible : pas assez de pa";
            }
        }
        else
        {
            Debug.Log("Nb PA dispo : " + paDispo);
            Debug.Log("Nb Mouvement : " + coutTrajet + "\n cout en PA : " + coutEnPa);
            UiMessage = "Nb Mouvement : " + coutTrajet + "\n coût en PA : " + coutEnPa;
        }
    }