/**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 }
} //Constructeur vide et privé! public static Usine obtenirUsine() //Obtenir l'usine { if (m_usine == null) { m_usine = new Usine(); } return(m_usine); }
public void creerClients() //Créer les clients pour le tour { Usine usine = Usine.obtenirUsine(); m_clients.Add(usine.creerObservateur(rnd)); m_clients.Add(usine.creerSecours(rnd)); m_clients.Add(usine.creerFeu(rnd)); }
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(); } }
private void creerClientsTransport() //Créer les clients de ce type { Usine usine = Usine.obtenirUsine(); List <PosCarte> posAeroports = aeroportsPosListe(); //Liste de pos Aeroport aeroport; //Aéroport de départ Passager passager1 = usine.creerPassager(rnd, posAeroports); aeroport = aeroportCorrespondant(passager1.PositionDepart); aeroport.ajouterClient(passager1); Passager passager2 = usine.creerPassager(rnd, posAeroports); aeroport = aeroportCorrespondant(passager2.PositionDepart); aeroport.ajouterClient(passager2); Passager passager3 = usine.creerPassager(rnd, posAeroports); aeroport = aeroportCorrespondant(passager3.PositionDepart); aeroport.ajouterClient(passager3); Marchandise marchandise1 = usine.creerMarchandise(rnd, posAeroports); aeroport = aeroportCorrespondant(marchandise1.PositionDepart); aeroport.ajouterClient(marchandise1); Marchandise marchandise2 = usine.creerMarchandise(rnd, posAeroports); aeroport = aeroportCorrespondant(marchandise2.PositionDepart); aeroport.ajouterClient(marchandise2); Marchandise marchandise3 = usine.creerMarchandise(rnd, posAeroports); aeroport = aeroportCorrespondant(marchandise3.PositionDepart); aeroport.ajouterClient(marchandise3); }
/** 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(); } }