Exemplo n.º 1
0
        /** Changer l'État du véhicule (Delegate)
         *  Passer au prochain État lorsque l'État actuel annonce qu'il est prêt à changer
         */
        public override void ChangerEtat(object source)
        {
            string EtatAvant = m_etat.ToString();
            int    surplus   = m_etat.Surplus;
            Usine  usine     = Usine.obtenirUsine();


            //Si l'etat de l'avion est dans le hangar et qu'un client est assigné
            if (m_etat.ToString() == "Hangar" && m_client != null)
            {
                PosCarte posDestination = m_client.PositionDepart;
                PosCarte posActuelle    = usine.creerPosition(m_posDepart.X, m_posDepart.Y);
                int      tempsVol       = PosCarte.Distance(m_posDepart, posDestination) * 4; //Calcul du temps de vol

                //Créer l'Etat et s'abonner (Observer)
                m_etat = usine.creerObserver(m_posDepart, posActuelle, posDestination, tempsVol, surplus, this);
                m_etat.eventEtatFini += new DelegateEtatFini(ChangerEtat);

                if (surplus > 0)
                {
                    m_etat.Avance(surplus);
                }
            }
            else if (m_etat.ToString() == "Observation")
            {
                //Créer l'Etat et s'abonner (Maintenance)
                m_etat = usine.creerMaintenance(m_tempsMaintenance, surplus, this);
                m_etat.eventEtatFini += new DelegateEtatFini(ChangerEtat);

                if (surplus > 0)
                {
                    m_etat.Avance(surplus);
                }
            }
            else if (m_etat.ToString() == "Maintenance")
            {
                //Créer l'Etat et s'abonner (Hangar)
                m_etat = usine.creerHangar(this);
                m_etat.eventEtatFini += new DelegateEtatFini(ChangerEtat);

                ResetClient();
            }
        }
Exemplo n.º 2
0
        /** Changer l'État du véhicule (Delegate)
         *  Passer au prochain État lorsque l'État actuel annonce qu'il est prêt à changer
         */
        public override void ChangerEtat(object source)
        {
            int   surplus = m_etat.Surplus;
            Usine usine   = Usine.obtenirUsine();

            //Si l'etat de l'avion est dans le hangar et que le minimum de clients est atteint
            if (m_etat.ToString() == "Hangar" && (m_client != null) && (m_client.NbClients >= (nbMax * pourcentage)))
            {
                //Créer l'Etat et s'abonner (Embarquement)
                m_etat = usine.creerEmbarquement(m_tempsEmbarquement, surplus, this);
                m_etat.eventEtatFini += new DelegateEtatFini(ChangerEtat);

                if (surplus > 0)
                {
                    m_etat.Avance(surplus);
                }
            }
            else if (m_etat.ToString() == "Embarquement")
            {
                PosCarte posDestination = m_client.Destination;
                PosCarte posActuelle    = usine.creerPosition(m_posDepart.X, m_posDepart.Y);
                int      nbClients      = m_client.NbClients;
                int      tempsVol       = PosCarte.Distance(m_posDepart, posDestination) * 4; //Calcul du temps de vol

                //Créer l'Etat et s'abonner (Aller)
                m_etat = usine.creerAller(m_posDepart, posActuelle, posDestination, nbClients, tempsVol, surplus, this);
                m_etat.eventEtatFini += new DelegateEtatFini(ChangerEtat);

                if (surplus > 0)
                {
                    m_etat.Avance(surplus);
                }
            }
            else if (m_etat.ToString() == "Aller")
            {
                int nbClients = m_client.NbClients;
                m_aeroport.transfererVehicule(this, m_etat.DestinationFinale());

                //Créer l'Etat et s'abonner (Debarquement)
                m_etat = usine.creerDebarquement(nbClients, m_tempsDebarquement, surplus, this);
                m_etat.eventEtatFini += new DelegateEtatFini(ChangerEtat);

                if (surplus > 0)
                {
                    m_etat.Avance(surplus);
                }
            }
            else if (m_etat.ToString() == "Debarquement")
            {
                m_client.NbClients = 0;

                //Créer l'Etat et s'abonner (Maintenance)
                m_etat = usine.creerMaintenance(m_tempsMaintenance, surplus, this);
                m_etat.eventEtatFini += new DelegateEtatFini(ChangerEtat);

                if (surplus > 0)
                {
                    m_etat.Avance(surplus);
                }
            }
            else if (m_etat.ToString() == "Maintenance")
            {
                //Créer l'Etat et s'abonner  (Hangar)
                m_etat = usine.creerHangar(this);
                m_etat.eventEtatFini += new DelegateEtatFini(ChangerEtat);

                ResetClient();
            }
        }