/// <summary> /// Permet de mettre à jour les activités en fonction de si elles sont passées ou non /// </summary> public void mettreAJourActiviteEnCours() { TimeMartien heureActuelle = TimeMartien.calculerJours(debutMission); for (int k = 1; k <= journeeActuelle.getNumero(); ++k) { Journee j = journeesMission[k]; for (int i = 0; i < heures.Count; ++i) { if (heures[i].Tag.ToString().Equals(heureActuelle.getHeures().ToString()) && journeeActuelle.getNumero() == k) { j.trouverActivite(heureActuelle, ((heureActuelle.getHeures() == 0 && heureActuelle.getMinutes() == 0) ? true : false)).activiteEnCours(); } else if (int.Parse(heures[i].Tag.ToString()) < heureActuelle.getHeures() || journeeActuelle.getNumero() != k) { foreach (Activite a in j.getActivites()) { TimeMartien tm = new TimeMartien(0, int.Parse(heures[i].Tag.ToString()), 0, 0); if ((a.getHeureFin() < heureActuelle || journeeActuelle.getNumero() != k)) { a.activitePassee(); } if ((j.getNumero() > journeeActuelle.getNumero()) || (j.getNumero() == journeeActuelle.getNumero() && a.getHeureFin().getHeures() == 0 && a.getHeureFin().getMinutes() == 0)) { a.activiteAVenir(); } } } } } }
/// <summary> /// Constructeur paramétré /// </summary> /// <param name="dt">Début de la mission</param> /// <param name="chargement">Chargement des données par XML ?</param> public CalendrierMission(DateTime dt, bool chargement) { InitializeComponent(); debutMission = dt; periode = 1; journeeSelectionnee = 1; panels = new Dictionary <int, Panel>(); icones = new Dictionary <int, PictureBox>(); iconesActivite = new Dictionary <int, PictureBox>(); numeros = new Dictionary <int, Label>(); heures = new Dictionary <int, Label>(); domaines = new List <Domaine>(); astronautes = new List <Astronaute>(); initialiserDomaines(); if (!chargement) { Astronaute a = new Astronaute("Baudry", "Patrick", 69); astronauteSelectionne = a; astronautes.Add(a); journeesMission = astronauteSelectionne.getJourneesMission(); initialisationInterface(); TimeMartien nb = TimeMartien.calculerJours(debutMission); int numJour = nb.getJours() + 1; if (numJour > 500) { numJour = 500; } foreach (Astronaute astro in astronautes) { astro.creerEdT(numJour); astroList.Items.Add(astro); } journeeActuelle = journeesMission[numJour]; changerPeriode(periode); verificationChangementPeriode(); mettreAJourHeures(); miseAJourEdt(journeesMission[journeeSelectionnee]); descriptionTexte.Text = journeesMission[journeeSelectionnee].getDescription(); astroList.SelectedItem = astronauteSelectionne; mettreAJourActiviteEnCours(); } }
/// <summary> /// Permet d'ajouter un astronaute /// </summary> /// <param name="sender">Objet source</param> /// <param name="e">Evènement</param> private void ajoutAstro_Click(object sender, EventArgs e) { TimeMartien nb = TimeMartien.calculerJours(debutMission); int numJour = nb.getJours() + 1; if (numJour > 500) { numJour = 500; } NouveauAstronaute na = new NouveauAstronaute(astronautes, astroList, numJour); na.Show(); }
/// <summary> /// Permet de mettre à jour les jours en fonction de s'ils sont passés ou non /// </summary> /// <param name="sender">Objet source</param> /// <param name="e">Evènement</param> private void timerJour_Tick(object sender, EventArgs e) { TimeMartien nb = TimeMartien.calculerJours(debutMission); int numJour = nb.getJours() + 1; if (numJour > 500) { numJour = 500; } for (int i = 1; i < numJour; ++i) { journeesMission[i].journeePassee(); } journeeActuelle = journeesMission[numJour]; journeesMission[numJour].journeeEnCours(); changerPeriode(periode); verificationChangementPeriode(); mettreAJourHeures(); miseAJourEdt(journeesMission[journeeSelectionnee]); }
/// <summary> /// Permet de créer les données par défaut, et d'ouvrir le menu "principal" de l'application /// </summary> /// <param name="sender">Objet source</param> /// <param name="e">Evènement</param> private void button1_Click(object sender, EventArgs e) { DateTime picker = dateTimePicker1.Value; DateTime dt = new DateTime(picker.Year, picker.Month, picker.Day, (int)heures.Value, (int)minutes.Value, 0); if (dt > DateTime.Now) { erreurDate.Visible = true; erreurDate.Text = "La date de début de mission ne peut pas être supérieure à la date actuelle"; return; } if (TimeMartien.calculerJours(dt).getJours() > 500) { erreurDate.Visible = true; erreurDate.Text = "La durée de la mission dépasse les 500 jours..."; return; } CalendrierMission cm = new CalendrierMission(dt, false); cm.Show(); this.cacherFenetre(); }
/// <summary> /// Permet de mettre à jour les heures terrestre et martienne /// </summary> public void mettreAJourHeures() { terre.Text = DateTime.Now.ToLocalTime().ToString(); mars.Text = TimeMartien.calculerJours(debutMission).ToString(); }
/// <summary> /// Permet de charger les données depuis un fichier XML /// </summary> /// <param name="marsOMatic">Le fichier XML Mars-o-Matic</param> /// <param name="activitesRefs">Le fichier XML ActivitesRefs associé au fichier précédent</param> private void chargerXml(String marsOMatic, String activitesRefs) { XmlDocument mars = new XmlDocument(); mars.Load(marsOMatic); XmlDocument acts = new XmlDocument(); acts.Load(activitesRefs); Dictionary <int, Activite> activitesBase = new Dictionary <int, Activite>(); int nbElements = int.Parse(mars.SelectSingleNode("Donnees").SelectSingleNode("NbElements").InnerText); Progression p = new Progression(nbElements); p.Show(); /* Chargement données des activités de base */ XmlNodeList activites = acts.GetElementsByTagName("Activite"); foreach (XmlNode n in activites) { Activite a; int num = int.Parse(n.SelectSingleNode("Numero").InnerText); bool exterieure = bool.Parse(n.SelectSingleNode("Exterieure").InnerText); bool exploration = bool.Parse(n.SelectSingleNode("Exploration").InnerText); TypeActivite ta = new TypeActivite(n.SelectSingleNode("TypeActivite").SelectSingleNode("Nom").InnerText); if (exterieure) { if (exploration) { a = new ExplorationExterieure(ta, "", null, null, null, null); } else { a = new ExperienceExterieure(ta, "", null, null, null, null); } } else { a = new Activite(ta); } activitesBase.Add(num, a); p.incrementer(); } /* Chargement données */ int jour = int.Parse(mars.SelectSingleNode("Donnees").SelectSingleNode("DebutMission").SelectSingleNode("Jour").InnerText); int mois = int.Parse(mars.SelectSingleNode("Donnees").SelectSingleNode("DebutMission").SelectSingleNode("Mois").InnerText); int annee = int.Parse(mars.SelectSingleNode("Donnees").SelectSingleNode("DebutMission").SelectSingleNode("Annee").InnerText); int heures = int.Parse(mars.SelectSingleNode("Donnees").SelectSingleNode("DebutMission").SelectSingleNode("Heures").InnerText); int minutes = int.Parse(mars.SelectSingleNode("Donnees").SelectSingleNode("DebutMission").SelectSingleNode("Minutes").InnerText); int secondes = int.Parse(mars.SelectSingleNode("Donnees").SelectSingleNode("DebutMission").SelectSingleNode("Secondes").InnerText); this.debutMission = new DateTime(annee, mois, jour, heures, minutes, secondes); TimeMartien nb = TimeMartien.calculerJours(debutMission); int numJour = nb.getJours() + 1; if (numJour > 500) { numJour = 500; } XmlNodeList astronautesNodes = mars.GetElementsByTagName("Astronaute"); foreach (XmlNode n in astronautesNodes) { String nom = n.SelectSingleNode("Nom").InnerText; String prenom = n.SelectSingleNode("Prenom").InnerText; int age = int.Parse(n.SelectSingleNode("Age").InnerText); Astronaute a = new Astronaute(nom, prenom, age); Dictionary <int, Journee> joursMission = new Dictionary <int, Journee>(); a.setJourneesMission(joursMission); astronautes.Add(a); a.getJourneesMission().Clear(); astroList.Items.Add(a); // Ajout dans la liste => interface XmlNodeList missionNode = n.SelectSingleNode("JourneesMission").SelectNodes("Journee"); foreach (XmlNode nn in missionNode) { int num = int.Parse(nn.SelectSingleNode("Numero").InnerText); String etat = nn.SelectSingleNode("Etat").InnerText; IEtat etatJournee = new Passe(); if (etat.Equals("EnCours")) { etatJournee = new EnCours(); } else if (etat.Equals("Futur")) { etatJournee = new Futur(); } String rapport = nn.SelectSingleNode("Rapport").InnerText; Journee j = new Journee(num, rapport, etatJournee, false); j.getActivites().Clear(); joursMission.Add(num, j); XmlNodeList activitesNode = nn.SelectSingleNode("Activites").SelectNodes("Activite"); foreach (XmlNode nnn in activitesNode) { int numA = int.Parse(nnn.SelectSingleNode("Numero").InnerText); String transport = nnn.SelectSingleNode("Transport").InnerText; ITransport transportAct = null; if (transport.Equals("Scaphandre")) { transportAct = new Scaphandre(); } else if (transport.Equals("Vehicule")) { transportAct = new Vehicule(); } String description = nnn.SelectSingleNode("Description").InnerText; etat = nnn.SelectSingleNode("Etat").InnerText; IEtat etatAct = new Passe(); if (etat.Equals("EnCours")) { etatAct = new EnCours(); } else if (etat.Equals("Futur")) { etatAct = new Futur(); } int mD = int.Parse(nnn.SelectSingleNode("HeureDebut").InnerText); int mF = int.Parse(nnn.SelectSingleNode("HeureFin").InnerText); String xy = nnn.SelectSingleNode("XY").InnerText; int x = int.Parse(xy.Split(',')[0]); int y = int.Parse(xy.Split(',')[1]); Lieu l = new Lieu(x, y); Activite aBase = activitesBase[numA]; Activite act; if (aBase.isActiviteExterieure()) { if (aBase.isExperience()) { act = new ExperienceExterieure(aBase.getTypeActivite(), description, new TimeMartien(0, 0, mD, 0), new TimeMartien(0, 0, mF, 0), l, transportAct); } else { act = new ExplorationExterieure(aBase.getTypeActivite(), description, new TimeMartien(0, 0, mD, 0), new TimeMartien(0, 0, mF, 0), l, transportAct); } } else { act = new Activite(aBase.getTypeActivite(), description, new TimeMartien(0, 0, mD, 0), new TimeMartien(0, 0, mF, 0), l); } act.setDescription(description); act.setEtat(etatAct); j.ajouterActivite(act); p.incrementer(); } p.incrementer(); } p.incrementer(); } initialisationInterface(); astronauteSelectionne = astronautes[0]; journeesMission = astronauteSelectionne.getJourneesMission(); journeeActuelle = journeesMission[numJour]; modificationJourneeActuelle(numJour); changerPeriode(periode); verificationChangementPeriode(); mettreAJourHeures(); miseAJourEdt(journeesMission[journeeSelectionnee]); descriptionTexte.Text = journeesMission[journeeSelectionnee].getDescription(); astroList.SelectedItem = astronauteSelectionne; p.fermerFenetre(); }