/**Constructeur vide pour XML */ public Vehicule() { Usine usine = Usine.obtenirUsine(); m_etat = usine.creerHangar(this); //Par défaut tous les véhicules sont dans le Hangar m_etat.eventEtatFini += new DelegateEtatFini(ChangerEtat); //Abonnement au délegué de l'État }
protected Aeroport m_aeroport; //Référence à l'aeroport /**Constructeur de véhicule * p_nom: le nom du véhicule * p_KMH: la vitesse de déplacement du véhicule * p_tempsMaintenance: le temps de maintenance du véhicule * p_couleur: la couleur de la ligne à l'affichage * p_posAeroport: position de l'aeroport qui le contient * p_scenario: référence sur le scenario * p_aeroport: référence sur l'aeroport dans lequel il est */ public Vehicule(string p_nom, int p_KMH, int p_tempsMain, Color p_couleur, PosCarte p_posAeroport, Scenario p_scenario, Aeroport p_aeroport) { m_nom = p_nom; m_KMH = p_KMH; m_tempsMaintenance = p_tempsMain; m_couleur = p_couleur; Usine usine = Usine.obtenirUsine(); m_etat = usine.creerHangar(this); m_etat.eventEtatFini += new DelegateEtatFini(ChangerEtat); m_posDepart = p_posAeroport; m_scenario = p_scenario; m_aeroport = p_aeroport; }
/** 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(); } }