Пример #1
0
        public bool ParcourirTrajectoire(Trajectoire traj)
        {
            TrajectoireEnCours = traj;
            DateTime debut = DateTime.Now;

            Console.WriteLine("Lancement traj");
            TrajectoireCoupee = false;
            TrajectoireEchouee = false;

            foreach (IAction action in traj.ToActions())
            {
                action.Executer();

                if (TrajectoireCoupee || TrajectoireEchouee)
                    break;

                if ( action is ActionAvance || action is ActionRecule)
                {
                    Historique.Log("Noeud atteint " + TrajectoireEnCours.PointsPassage[0].X + ":" + TrajectoireEnCours.PointsPassage[0].Y, TypeLog.PathFinding);
                    TrajectoireEnCours.PointsPassage.RemoveAt(0);
                    TrajectoireEnCours.Segments.RemoveAt(0);
                }
            }
            Console.WriteLine("Traj terminée");

            if(!TrajectoireCoupee && !TrajectoireEchouee)
            {
                Historique.Log("Trajectoire parcourue en " + Math.Round((((DateTime.Now - debut).TotalMilliseconds) / 1000.0), 1) + "s", TypeLog.PathFinding);
                Console.WriteLine("Temps prévu :" + traj.Duree + "ms / Temps effectif : " + (DateTime.Now - debut).TotalMilliseconds + "ms");

                if(semTrajectoire != null)
                    semTrajectoire.Release();
                TrajectoireEnCours = null;
                return true;
            }

            if(TrajectoireEchouee)
            {
                Historique.Log("Echec du parcours de la trajectoire (dérapage, blocage...)", TypeLog.PathFinding);

                if (semTrajectoire != null)
                    semTrajectoire.Release();
                TrajectoireEnCours = null;
                return true;
            }

            TrajectoireEnCours = null;

            if (semTrajectoire != null)
                semTrajectoire.Release();
            return false;
        }