/// <summary> /// Lit l'ensemble des ordres d'ajustement notés dans les champs d'ordre /// (phase d'ajustement uniquement). /// </summary> /// <returns>Ensemble des ordres d'ajustement donnés pour le tour d'hiver courant.</returns> private List <Ajuster> LitAjustements() { Int32 compteur = 0; Int32 placesDisponibles = 0; String belligerant = null; List <Ajuster> ordresAjustements = new List <Ajuster>(); List <Ajuster> congediementTemporaires = new List <Ajuster>(); foreach (ChampOrdre ordre in this.metaChampOrdre.ChampsOrdres) { Ajuster ordreAjustement = ordre.RetourneAjustement(); congediementTemporaires.Add(ordreAjustement); if (ordre.NomBelligerant != belligerant) { this.TraqueUnitesSuperfetatoires(compteur, placesDisponibles, congediementTemporaires, ordresAjustements); congediementTemporaires.Clear(); belligerant = ordre.NomBelligerant; compteur = 0; String nomCompletBelligerant = Convertisseurs.DepuisEBelligerantAbrege(ordre.NomBelligerant).ToString(); placesDisponibles = this.nombreCentres[nomCompletBelligerant] - this.nombreUnites[nomCompletBelligerant]; } if (((ordreAjustement.Recrutement == EAjustement.Recrutement) && (compteur < placesDisponibles)) || (ordreAjustement.Recrutement == EAjustement.Congédiement)) { ordresAjustements.Add(ordreAjustement); compteur++; } } this.TraqueUnitesSuperfetatoires(compteur, placesDisponibles, congediementTemporaires, ordresAjustements); return(ordresAjustements); }
/// <summary> /// Retourne l'ordre d'ajustement associé au contrôle. /// </summary> /// <returns>Ordre d'ajustement associé au contrôle.</returns> public Ajuster RetourneAjustement() { EUnite unite; EAjustement ajustement; String nomRegion = this.region.Text; EBelligerant belligerant = Convertisseurs.DepuisEBelligerantAbrege(this.Belligerant.Text); if (this.comboBox.Visible == true) { String recrutement = this.comboBox.Text; if (recrutement != "") { unite = Convertisseurs.VersEUnite(recrutement); ajustement = EAjustement.Recrutement; } else { unite = EUnite.Aucune; ajustement = EAjustement.Aucun; } } else { unite = Convertisseurs.DepuisEUniteAbrege(this.Unite.Text); if (this.Ordre.Text == "*") { ajustement = EAjustement.Congédiement; } else { ajustement = EAjustement.Aucun; } } Ajuster ordre = new Ajuster(ajustement, unite, belligerant, nomRegion); return(ordre); }
/// <summary> /// Traque les unités maintenues illégalement durant l'hiver, et force leur congédiement. /// </summary> /// <param name="compteur">Nombre d'unités congédiées ce tour (si des congédiements sont nécessaires).</param> /// <param name="placesDisponibles">Différence entre le nombre de centres et le nombre d'unités.</param> /// <param name="congediementTemporaires">Ensemble des ordres d'ajustement potentiels pour le belligérant courant.</param> /// <param name="ordresAjustements">Ensemble des ordres d'ajustement pour le tour.</param> private void TraqueUnitesSuperfetatoires( Int32 compteur, Int32 placesDisponibles, List <Ajuster> congediementTemporaires, List <Ajuster> ordresAjustements) { if ((placesDisponibles < 0) && (compteur < Math.Abs(placesDisponibles))) { foreach (Ajuster ordreCongediement in congediementTemporaires) { if ((ordreCongediement.Recrutement != EAjustement.Congédiement) && (compteur < Math.Abs(placesDisponibles))) { Ajuster nouveauCongediement = new Ajuster( EAjustement.Congédiement, ordreCongediement.Unite, ordreCongediement.Belligerant, ordreCongediement.Region); ordresAjustements.Add(nouveauCongediement); compteur++; } } } }