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; } }