/** 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(); } }
/** 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(); } }