Ejemplo n.º 1
0
        // BOTTONE: viene accettato il peso delle truppe
        // viene creata la lista inserendo in essa le truppe richieste.
        // La lista verra poi gestita in modo da assegnare truppe ed elicotteri
        protected void OnButton1Released(object sender, EventArgs e)
        {
            if (TroopM.TroopList.Count == 0)               // se la lista è vuota  creala
            //inserimento soldati nella lista
            {
                int i;
                for (i = 0; i < _troop; i++)
                {
                    Soldier _soldier = new Soldier((int)this.hscale1.Value);
                    try{
                        TroopM.InsertElement(_soldier);                                 // inserisco il dato truppa
                    }
                    catch {
                        System.Console.WriteLine("ERRORE DI INSERIMENTO RECORD");
                    }
                }
                TroopM.SingleSoldierW = (int)this.hscale1.Value;               // salvo il peso del soldato singolo
                winI.InsertSomeText("OPZIONI TRUPPE: effettuato l'inserimento di " + TroopM.TroopList.Count + " soldati del peso singolo di: " + TroopM.SingleSoldierW + "kg");
            }

            else
            {
                winI.InsertSomeText("OPZIONI TRUPPE: lista truppe già creata, sostituisco con i nuovi dati");

                foreach (Soldier sold in TroopM.TroopList)
                {
                    sold.Weight = (int)this.hscale1.Value;           // varia il perso di ogni soldato nella lista
                }
                winI.InsertSomeText("OPZIONI TRUPPE: nuovo peso inserito: " + this.hscale1.Value);
            }

            this.Hide();
            MainWin.Sensitive = true;
            MainWin.CheckGreenFlags(); // check green flags
        }
Ejemplo n.º 2
0
		// gli elicotteri decollano ed assumono la velocità di crociera indicata
		public void AllEliTakingOff(float speed)
		{
			foreach (Spot spot in this.Spotlist)
				// controllo che lo spot abbia un elicottero funzionanete a pale aperte e a motore acceso
				if (spot.Eli!=null  
					&& !spot.Eli.IsBlocked 
					&& spot.Eli.isREADYstatus
					&& !spot.Eli.IsFlying) 
				{
					// setto le flags
					spot.Eli.isApproaching = false; // setto l'elicottero non in apporch alla dest
					spot.Eli.IsFlying=true;// viene settata la flag di elicottero in volo 
					spot.eliWhoReservd = null; // eli che ha effettuato la riserva
					spot.SpotOccupied = false; // lo spost non è piu' occupato
					spot.IsReservd = false; // fine riserva
					spot.Eli.SpotAssigned = null; // fine spot assegnato
					spot.Eli.hasSpotReserved = false; // l'eli ha lo spot riservato
					spot.Eli.isOnDestination = false; // resetto la var di destinazione
					spot.Eli.isREADYstatus = false; // reimposta lo stato di pronto al decollo su falso in quanto è deocllato
					spot.Eli.DirToGo = Elicottero.Direction.hp; // l'elicottero assume destinazione HP
					spot.Eli.EliSpeed = speed; // impost la velocità dell'elicottero a 1

					// salvo le informazioni prima di liberare lo spot
					WinI.InsertEvent ( spot.Eli.current_time , " T/O SHIP ", spot.Eli.IdEli, spot.Eli.NumEli);
					WinI.InsertSomeText( " ELI " +spot.Eli.IdEli + " DECOLLA time: "+ spot.Eli.current_time.ToString() );
					//----------------------------------------------------
					spot.Eli = null; // libera l'elicottero elicottero assegnato spot
				}
		}
Ejemplo n.º 3
0
        //----------------------------------------------------------------------------------
        // assegnazione  degli elicotteri assegnati agli spot
        // è necessario assegnare agli spot gli elicotteri che di default sono stati posizionati sugli spot
        public void EliAutoSpotAssign(SpotManager SpotM, InfoWindow winI, Spot.day_night DN)
        {
            // cambia automanticamente il numero di elicotteri assegnati sul ponte
            // la funzione assicura che il nuemero di eli è inferiore o uguale agli spot disponibili
            // e restituisce il numero di elicotteri da gestire  per l'assegnazione automatica degli spot
            int manualAssign = this.ElisSpotAutoHangarChangeNumber(SpotM, winI);

            // una volta determinato il numero di elicotteri da assegnare procedo con l'assegnazione
            if (manualAssign > 0)               // se il numero di assegnazioni è maggiore di 0 creo la finestra per le assegnazioni

            {
                foreach (Elicottero eli in this.ElicotteriList)
                {
                    if (eli.PosEli)                       // se l'elicottero è posizionato sul ponte di default cerco di assegnarlo ad uno spot
                    {
                        Spot spot = SpotM.SpotToHostaCat(eli.CatEli, DN);
                        if (spot != null)
                        {
                            winI.InsertSomeText("SIMULATOR: Spot trovato per assegnazione AUTOMATICA: " + spot.SpotPos);
                            eli.DirToGo        = Elicottero.Direction.hp; // direzione assegnata all'eli sul ponte holding point
                            eli.SpotAssigned   = spot;                    // spot assegnato
                            eli.PosEli         = true;                    // posizione elicottero sul ponte
                            spot.IsReservd     = true;                    // lo spot viene riservato
                            spot.eliWhoReservd = eli;                     // l'elicottero che ha richiesto il reserve
                            spot.Eli           = eli;                     // assegno l'elicottero
                            spot.SpotOccupied  = true;                    // lo spot e' occupato
                        }
                    }
                }
            }
        }         // fine metodo
Ejemplo n.º 4
0
        //----------------------------------------------------------------------------------
        //-- controllo eli in hangar e moviementazione sul ponte ------------------//
        // è necessario controllare se gli eli assegnati sugli spot sono superiori al
        // numero di spot effettivamente disponibile, in tal caso gli eli devono essere riassegnati

        public int ElisSpotAutoHangarChangeNumber(SpotManager SpotM, InfoWindow WinI)
        {
            int n    = this.EliOnDEck();         // numero di elicotteri pianificati sul ponte
            int k    = SpotM.NumSpotEfficient(); // numero di spot efficienti presente
            int diff = (n - k);                  // qundo positivo indica il numero di elicotteri da ridurre

            int z = 0;                           // variabile indice
            int i = 0;                           // variabile indice

            // se il numero di elicotteri è superiore al nuemro di spot efficienti
            // allora serve ridurre il numero di elicottero sullo spot
            if (diff > 0)               // se la diff è positiva il numero di eli assegnati al ponte supera il numero degli spot disponibili
            {
                WinI.InsertSomeText(" SIMULATORE: auto correzione del numero di elicotteri sul ponte. Decremento di " + diff + " unità");

                // correzione del valore di posizione sui primi i elicotteri trovati
                while (i < diff)
                {
                    if (this.ElicotteriList [z].PosEli == true)
                    {
                        this.ElicotteriList [z].PosEli = false; // cambio a false
                        i++;                                    // valore trovato incremento indice
                    }
                    z++;                                        // incremento l'indice
                }
                return(k);                                      // restituisce il numero di elicotteri ga gestire manualmente
            }
            return(n);                                          // restituisce il numero di elicotteri da gestire manualmente
        }
Ejemplo n.º 5
0
        static private MainWindow MainWin = MainWindow.Instance(); // identifica la finestra principale in modo che possa essere ritrovata alla chiusura di questa


        protected CargoOptions(int _cargo, InfoWindow _win) :  base(Gtk.WindowType.Toplevel)
        {
            this.WinI     = _win;       // gli passo la finestra informazioni
            this.cargoTot = _cargo;
            WinI.InsertSomeText("OPZIONI CARGO: --> EFFETTUATA APERTURA FINESTRA OPZIONI CARGO <--");
            CargoM = (CargoManager)FactoryManager.Make(3, this.cargoTot, this.WinI); // viene creato lo Spot Manager tramite factory method
            CargoM.MakeList(cargoTot);                                               // crea la  lista iniziale di un numero di spot impostato
            this.Build();
            this.label1.Text = "Numero di Record cargo #  " + (this.cargoRec + 1) + " Record inseriti: " + CargoM.CargoList.Count + " Record disponibili: " + this.cargoTot;
            this.InitValue();
        }
Ejemplo n.º 6
0
        //----------------------------------------------------------------------------------

        public void CheckSpotDataConsistency(SpotManager spotm, Spot.day_night _dn)
        {
            foreach (Elicottero eli in this.ElicotteriList)
            {
                if (spotm.SpotToHostaCat(eli.CatEli, _dn) == null)
                {
                    eli.IsEfficient     = false;
                    eli.isRequiredForOP = false;
                    WinI.InsertSomeText("SIMULATOR: rimosso elicottero " + eli.IdEli + " ,nessuno spot accessibile");
                }
            }
        }
Ejemplo n.º 7
0
 // COSTRUTTORE DELLA CLASSE SPOT OPTION
 protected SpotOptions(int spot, InfoWindow _win) :  base(Gtk.WindowType.Toplevel)
 {
     this.WinI     = InfoWindow.Instance();          // gli passo la finestra informazioni
     _totSpot      = spot;
     this._spotRec = 0;
     Build();
     WinI.InsertSomeText("OPZIONI SPOT: EFFETTUATA APERTURA FINESTRA OPZIONI SPOT");
     SpotM = (SpotManager)FactoryManager.Make(2, spot, WinI); // viene creato lo Spot Manager tramite factory method
     SpotM.MakeList(spot);                                    // crea la  lista iniziale di un numero di spot impostato
     this.label1.Text = ("Numero di Record SPOT #  " + this._spotRec);
     this.InitValue();
     this.label1.Text = "Record # " + _spotRec + " Record inseriti: " + SpotM.Spotlist.Count +
                        " Record disponibli: " + this._totSpot;
 }
Ejemplo n.º 8
0
        // LIST DISPOSER METODI - metodi di movimentazione degli elementi in relazione agli altri manager
        #region list disposer
        // sposta gli elicotteri sugli spot se questi possono contenerli
        public void MoveEliOnSpot(SpotManager SpotM, Spot.day_night DN, InfoWindow WinI)
        {
            bool elidispoSuccess;             // flag disposizione avvenuta con successo

            // controllo se esistono elicotteri che possono essere ospitati dagli spot per le caratteristiche
            // che hanno elicottero e spot
            foreach (Elicottero eli in this.ElicotteriList)
            {
                if (!eli.IsBlocked &&              // controllo se l'elico non è bloccato ed è in hangar
                    !eli.PosEli &&                     // eli è in hangar
                    !eli.hasSpotReserved                        // eli non ha riservato uno spot
                    )
                {
                    Spot _spot = SpotM.SpotToHostaCat(eli.CatEli, DN);                          //ritorno il primo spot in grado di ospitare l'elicottero

                    if (_spot != null)                                                          // se lo spot è stato trovato
                    {
                        WinI.InsertSomeText("Spot trovato per assegnazione: " + _spot.SpotPos); // scrittura info

                        // viene se l'elicottero è efficiente, la posizione è in hangar
                        //e lo spot esiste e non è riservato ad altri elicotteri
                        // inoltre possono essere movimentati solo due elicotteri alla volta

                        if (elidispoSuccess = SpotM.SpotEliAssign(eli, _spot))                                   // prova ad assegnare l'elicottero
                        {
                            WinI.InsertSomeText("DISPOSER: movimentato elicottero : "
                                                + eli.IdEli + " su spot: " + eli.Spotrequested.SpotPos);
                        }
                    }
                    else
                    {
                        WinI.InsertSomeText("DISPOSER: movimentazione elicottero " + eli.IdEli + " non effettuabile");
                    }
                }         //termine IF
            }             // termin foreach elicottero ciclo
        }
Ejemplo n.º 9
0
 private void UpdateRec(int i)
 {
     SpotM.Spotlist[i].SpotRunnable        = this.checkbutton7.Active;
     SpotM.Spotlist[i].DayCanAccept.Cat1   = this.checkbutton1.Active;
     SpotM.Spotlist[i].DayCanAccept.Cat2   = this.checkbutton2.Active;
     SpotM.Spotlist[i].DayCanAccept.Cat3   = this.checkbutton3.Active;
     SpotM.Spotlist[i].NightCanAccept.Cat1 = this.checkbutton4.Active;
     SpotM.Spotlist[i].NightCanAccept.Cat2 = this.checkbutton5.Active;
     SpotM.Spotlist[i].NightCanAccept.Cat3 = this.checkbutton6.Active;
     WinI.InsertSomeText(" OPZIONI SPOT: record # " + (i + 1) + " AGGIORNATO..");
 }
Ejemplo n.º 10
0
        // update record
        private void UpdateRec(int i)
        {
            this._cargoSTR = this.entry1.Text;
            CargoM.CargoList[i].CargoString = this._cargoSTR;

            this._cargoW = (int)this.hscale1.Value;
            CargoM.CargoList[i].CargoW = this._cargoW;

            this._cargoP = (int)this.hscale2.Value;
            CargoM.CargoList[i].CargoP = this._cargoP;

            WinI.InsertSomeText(" OPZIONI CARGO: record # " + (i + 1) + " AGGIORNATO..");
        }
Ejemplo n.º 11
0
 //menu - opzioni simulazione - operazioni diurne
 protected void OnGiornoAction2Activated(object sender, EventArgs e)
 {
     DNOperation = Spot.day_night.day;             // setto lo sbarco diurno
     InformationWin.InsertSomeText("MAIN WINDOW: selezionata operazione DIURNA");
 }
Ejemplo n.º 12
0
		// LIST DISPOSER MODULES
		// - controllo il numero di spot occupati  
		// - calcolo lo spazio totate sugli eli
		// - distribuisco le truppe equamente sugli elicotteri
		public void EliSpotTroopDistribution (SpotManager SpotM , TroopsManager TroopsM , InfoWindow winI)

		{
			int totWEli=SpotM.TotalWEliSpotForTroopS(); // calcolo il peso totale disponibile dagli elicotteri sugli spot
			int totWTroops = TroopsM.TroopList.Count*TroopsM.SingleSoldierW; // calcolo il peso totale delle truppe da imbarcare
			int w_Embarcable=0;// peso imbarcabile corrispondente al minore tra il peso totale disponibile ed il peso totale truppe
			int troopsE=0;// truppe imbarcabili
			int i=0; // variabile indice

			if (totWTroops<totWEli) w_Embarcable=totWTroops; else w_Embarcable=totWEli; // se il peso totale dell truppe da imbarcare è
			// minore rispetto al peso totale disponibile sugli elicotteri
			// allora le truppe imbarcabili saranno il minimo tra i due valori
			troopsE=w_Embarcable/TroopsM.SingleSoldierW;//trasformo il peso imbarcabile in uomini da imbarcare
			winI.InsertSomeText("TROOPS DISPOSER: ponte di volo occupato da: "+SpotM.TotalElionDeck()
				 + " Elicotteri sul ponte pronti per l'imbarco di "+troopsE +" truppe");

			//trasferisco ogno uomo su ogni elicottero disponibile con una distribuzione alternata
			//su tutti gli elicotteri disponibili, la distribuzione di reitera fino a  a quando tutti gli uomini 
			// sono stati spostati sugli elicotteri.
			if (troopsE>0) // se esistono truppe da imbarcare
				while ( i<troopsE) // continua fino a quando l'indice è inferiore alle truppe 
				{
					foreach (Spot spot in SpotM.Spotlist) // per ogni spot 
					{	// se spot occupato da un elicottero in moto e pale aperte e l'elicottero puo' ospitare le truppe, allora effettuo il carico
						if (spot != null && spot.Eli != null 
							&& !spot.Eli.IsBlocked  // eli non bloccato
							&&!spot.Eli.IsFull  // eli non pieno di cargo e truppe
							&& !spot.Eli.isTroopsFull // eli non pieno di truppe
							&& spot.Eli.IsRunning  // eli in moto
							&& spot.Eli.IsBladeSpread  // eli a pale a perte
							&& (TroopsM.TroopList.Count>0) // eli con truppe a bordo
							&& (spot.Eli.WTroopsLeftOnBoard >= TroopsM.SingleSoldierW)) {// truppe accettabili superano il peso del singolo


							// scambio di lista,  simulo che la truppa imbarca sull'elicottero sistemato sul ponte, la lista verra poi passata alla landing zone 
							// per permettere lo sbarco della truppa

							TroopsM.TroopList [TroopsM.TroopList.Count - 1].IsEli = true; // imposto la truppa in elicottero
							spot.Eli.IstroopsOnBoard = true; // elicottero ha truppe a bordo
							try{
							// sposto la truppa dalla lista truppe a bordo
							TroopsM.MoveElement (TroopsM.TroopList, spot.Eli.EliSoldierList, TroopsM.TroopList [(TroopsM.TroopList.Count) - 1]);
							}
							catch{
								System.Console.WriteLine ("ERRORE SPOSTAMENTO TRUPPE");
							}																												// alla lista truppe sull'elicottero

							spot.Eli.IsBoarding = true; // l'elicottero sta imbarcando truppe
							// diminuisco il peso totale disponibile sull'eli
							spot.Eli.WTroopsLeftOnBoard = (spot.Eli.WTroopsLeftOnBoard - TroopsM.SingleSoldierW);
							if (spot.Eli.WTroopsLeftOnBoard < TroopsM.SingleSoldierW)
								spot.Eli.isTroopsFull = true; // modifico la flag di full truppe
							if (spot.Eli.isTroopsFull && spot.Eli.IsCargoFull)
								spot.Eli.IsFull = true;; // modifico la flag di full cargo e truppe
						
							i++; // VAR INDICE,indica il numero di truppe spostate
						}}}// fine metodo

			// inserisco attesa elicotteri imbarco truppe se la variaibile is boarding is TRUE
			foreach (Spot spot in SpotM.Spotlist) { // per ogni spot 

				if (spot.Eli != null && spot.Eli.IsBoarding) // gestione tempi attesa
					spot.Eli.EliBlock (StaticSimulator.timeToEmbarcTroops, 8); // blocco l'eli e resetto la variabile isBoarding to false
				}
		} // fine metodo
Ejemplo n.º 13
0
        // FINE METODI INSERIMENTO RIMOZIONE



        // ----------------------------------------------------------------------------------------------
        // list disposer methods
        // distribuzione del cargo sull'elicottero che lo puo' ospitare
        // il metodo serve per distribuire il cargo a bordo degli elicotteri
        // che possono effettuare il trasporto
        // blocca temporalmente l'elicottero che effettua il trasferimento di cargo
        public void CargoDistribution(InfoWindow winI, EliManager EliM, TroopsManager TroopM)
        {
            // variaibli d'impiego locale
            int        i           = 0;                    // index
            int        maxCargoNum = this.CargoList.Count; // quanti pacchi di cargo devo distribuire
            Cargo      cargo       = null;
            Elicottero eli         = null;

            if (this.CargoList != null && this.CargoList.Count != 0)            // controlla che la lista cargo contenga elementi


            // è stato usato un indice per l'impossibilità di operare sulla lista dinamicamente con un foreach
            // cancellando i dati e leggendoli insieme.
            {
                while ((i < this.CargoList.Count))                 // continua fino a quando l'indice raggiunge il valore massimo di elementi
                {
                    cargo = this.CargoList [i];                    // cargo da assegnare



                    if (!cargo.IsEliC &&                          // il cargo vede essere caricabile su uno degli elicotteri
                        cargo.IsFittable)                         // controlla se il cargo non è ancora stato assegnato
                    {
                        eli = EliM.EliAbleToCargo(cargo, TroopM); // definisce l'elicottero in grado di ospitare il cargo
                        //l'elicottero per ospitare il cargo non deve essere necessariamente sul ponte di volo


                        // controlla che l'elicottero assegnato esista e se esistono le condizioni per poter accettare il cargo
                        if (eli != null && !eli.IsCargoFull &&                      // elicottero non vede essere cargo full
                            !eli.IsFlying &&                             // non deve essere in volo
                            !eli.IsBlocked &&                             // no deve essere time blocked
                            eli.IsEfficient &&                              // deve essere efficiente
                            eli.isRequiredForOP)                                                             // deve essere richiesto per l'operazione
                        {
                            eli.IsBoardingCargo = true;                                                      // eli inizia ad imbarcare il cargo

                            eli.WCargoLeftOnBoard = (eli.WCargoLeftOnBoard - cargo.ChecktotalCargoWeight()); // sottraggo il peso del cargo al carico utile dell'eli
                            // tale peso comprende le truppe che fanno parte del cargo

                            this.MoveElement(this.CargoList, eli.EliCargoList, cargo);    // effettua lo spostamento necessario setto la flag del cargo a bordo

                            this.CheckThisEliCargoFull(eli);                              // controlla se esistono altri cargo che possono essere
                            //inseriti altrimenti CARGO FULL set flag

                            cargo.IsEliC = true;                           // la flag del cargo viene settata in elicottero
                            cargo.Eli    = eli;                            // assegno al cargo l'elicottero su cui viaggia

                            eli.EliBlock(CargoManager.CargoLoadTiming, 5); // blocco l'elicottero N ticks per operazioni di cargo
                            // al termine dell'attesa IsCargoOnBoard variable e' TRUE

                            winI.InsertSomeText("CARGO DISPOSER: è stato assegnato: " + cargo.CargoString +
                                                " , restano ancora " + this.CargoList.Count + " elementi CARGO da imbarcare");
                            i++;                             // passo al rec ord successivo
                        }
                        else
                        {
                            i++;                         // incremento il contatore del cargo, cambio cargo
                        }
                    }
                }                // fine while
            }
            else
            {
                winI.InsertSomeText("TROOPS DISPOSER: nessuna lista di CARGO è stata definita");
            }
        }        // NotFiniteNumberException metodo distribuzione cargo
Ejemplo n.º 14
0
        }         // fine metodo

        //----------------------------------------------------------------------------------

        // metodo di supporto alla classe serve per attuare l'inizializzazione delle macchine,
        // controllo se gli elicotteri proposti sono tutti necessari per l'operazione
        // se ad esempio ho 3 elicotteriche possono trasportarte 10 truppe per un totate di
        // 30 persone mentre ho solo 15 persone disponibili gli elciotteri necessari saranno
        // solo 2. il terzo quindi risulterà non impiegabile
        // tuttavia va controllato anche che l'elicottero risulti non necessario anche per
        // il trasporto del cargo
        public void Check_Eli_Usability(InfoWindow WinI, TroopsManager TroopM, CargoManager CargoM)
        {
            WinI.InsertSomeText("SIMULATOR : controllo effettiva NECESSITA' degli elicotteri inseriti per la missione");
            int          TroopTotW        = TroopM.TroopList.Count * TroopM.SingleSoldierW;     // peso totale delle truppe
            int          EliTotW          = this.ElicotteriList.Sum(x => x.WTroopsLeftOnBoard); // peso totale disponibile sugli elicotteri
            int          diffT_E          = EliTotW - TroopTotW;                                // calcolo la differenza tra il peso totale trsportabile e il peso totale da trasportare
            List <Cargo> SupportCargoList = new List <Cargo> ();                                // lista cargo di supporto
            Elicottero   eliMinW          = this.ElicotteriList.Find(y => y.WTroopsLeftOnBoard == (this.ElicotteriList.Min(x => x.WTroopsLeftOnBoard)));

            // elicottero con peso minimo disponibile nella lista elicotteri

            // l'algoritmo elimina tutti gli elicotteri che offrono meno peso per il trasporto
            // dopo che viene definita la quantità di peso totale necessaria
            while (diffT_E > 0 && diffT_E > eliMinW.WTroopsLeftOnBoard)
            {
                bool found          = false;        // bool di supporto al metodo
                int  supportCounter = 0;            // bool var di supporto

                if (SupportCargoList.Count > 0)
                {
                    SupportCargoList.Clear();                      // reset list
                }
                if (diffT_E > eliMinW.WTroopsLeftOnBoard)          //se la differenza tra il peso totale delle truppe
                // trasportabile ed il peso totale disponibile sugli elicotteri
                // è maggiore del peso disponibile sull'elicottero con peso trasportabile minimo allora ho trovato un
                // elicottero candidato

                {
                    this.SupportEliList.Add(eliMinW);                      // aggiungo l'elciottero alla lista
                    //di supporto come candidato all'eliminazione

                    // devo ora controllare che l'elicottero sia anche indispensabile per l'attività di trasporto cargo
                    if (CargoM != null && CargoM.CargoList != null)
                    {
                        // estrapolo elenco cargo che puo' ospitare l'elicottero candidato
                        foreach (Cargo cargo in CargoM.CargoList.FindAll(x => (x.ChecktotalCargoWeight() <= eliMinW.WCargoLeftOnBoard)))
                        {
                            SupportCargoList.Add(cargo);                              // inserisco i valori trovati all'interno della lista di supporto
                        }

                        // DEVO CONTROLLARE
                        // 1 CHE NON POSSA TRASPORTARE NESSUN CARGO
                        // 2 CHE QUALORA POSSA TRASPORTARE DEL CARGO QUESTO NON SIA TRASPORTABILE DA ALTRI ELICOTTERI
                        // SE UNA O L'ALTRA CONDIZIONE SONO VERE L'ELICOTTERO PUO' ESSERE ELIMINATO DALL'ELENCO
                        if (SupportCargoList.Count > 0)                           // controllo che non possa trasportare nessun cargo

                        // conrtollo tutti i cargo presenti nell'elenco in quanto devono essere tutti
                        // trasportabili da altri elicotteri
                        {
                            foreach (Cargo cargo in SupportCargoList)
                            {
                                found = false;                                 // resetto la variabile bool di supporto

                                // per ogni altro elicotteo NON MINIMO PESO effettuo il confronto con il cargo
                                foreach (Elicottero eli in this.ElicotteriList.FindAll(x => x != eliMinW))
                                {
                                    if (eli.WCargoLeftOnBoard >= cargo.ChecktotalCargoWeight())                                        // se esiste un elicottero che puo' imbarcare il cargo
                                    //incremento il contatore, anche gli altri cargo nell'elenco devono essere inclusi nella condizione
                                    {
                                        found = true;
                                    }
                                }                                 // end loop su eli

                                // se ho trovato almeno un elemento in grado di accettare il cargo la var bool found è settata su vero
                                // quindi posso incrementare il counter
                                if (found)
                                {
                                    supportCounter++;                                     // se lo trova il cargo nella lista cargo di supporto
                                }
                                //che poteva trasportare l'eliminW ora lo puo' trasportare qualun altro
                            }                             // end loop su cargo

                            // se il numero degli elicotteri che possono ospitare il cargo eguaglia il numero del cargo da ospitare
                            //l'elicottero non è necessario
                            if (supportCounter == SupportCargoList.Count)
                            {
                                // posso eliminare l'elicottero dall'elenco elicotteri
                                this.ElicotteriList.Remove(eliMinW);
                                WinI.InsertSomeText("SIMULATOR : rimosso elicottero: " + eliMinW.IdEli + " l'eli risulta non necessario");
                            }
                            else
                            {
                                // altrimenti devo rimuoverlo dall'elenco dei candidati
                                this.SupportEliList.Remove(eliMinW);
                            }
                        }                        // end if cargo count >0 ELICOTTERO INUTILE PER L'OPERAZIONE ELIMINARE ELICOTTERO DALL'ELENCO

                        else
                        {
                            // elicottero inutile per l'operazione
                            this.ElicotteriList.Remove(eliMinW);
                            // l'elicottero viene cosi lasciato nell'elenco
                            // degli elicotteri di supporto non utilizzabili
                            WinI.InsertSomeText("SIMULATOR : rimosso elicottero: " + eliMinW.IdEli + " l'eli risulta non necessario");
                        }
                    }                     // fine if CARGO NULL INESISTENTE

                    else
                    {
                        // elicottero inutile per l'operazione
                        this.ElicotteriList.Remove(eliMinW);
                        WinI.InsertSomeText("SIMULATOR : rimosso elicottero: " + eliMinW.IdEli + " l'eli risulta non necessario");
                    }
                }                 // fine if differenza l'elicottero è utile per l'operazione

                // update delle variabili
                EliTotW = this.ElicotteriList.Sum(x => x.WTroopsLeftOnBoard);                             // peso totale disponibile sugli elicotteri
                diffT_E = EliTotW - TroopTotW;                                                            // calcolo la differenza tra il peso totale trsportabile e il peso totale da trasportare
                eliMinW = this.ElicotteriList.Find(y => y.WTroopsLeftOnBoard ==
                                                   (this.ElicotteriList.Min(x => x.WTroopsLeftOnBoard))); //determino il nuovo min
            }                                                                                             // fine while
        }                                                                                                 // fine metodo Check_Eli_Usability
Ejemplo n.º 15
0
        // effettua l'update del record corrente sostituiendo i nuovi valori rilevati a quelli vecchi in memoria
        private void UpdateRec(int i)
        {
            this._IdEli = this.entry1.Text;
            EliM.ElicotteriList [i].IdEli = this.entry1.Text;                     // id eli
            this._catEli = (int)this.hscale1.Value;
            EliM.ElicotteriList [i].CatEli = (int)this.hscale1.Value;             // cat eli
            this._fuel = (int)this.hscale2.Value;
            EliM.ElicotteriList [i].Fuel = (int)this.hscale2.Value;               // carburante
            this._WTroopsLeftOnBoard     = (int)this.hscale4.Value;
            EliM.ElicotteriList [i].WTroopsLeftOnBoard = (int)this.hscale4.Value; // truppe
            this._WCargoLeftOnBoard = (int)this.hscale5.Value;
            EliM.ElicotteriList [i].WCargoLeftOnBoard = (int)this.hscale5.Value;  // peso cargo
            this._maxTOLoad = (int)this.hscale6.Value;
            EliM.ElicotteriList [i].MaxTOLoad = (int)this.hscale6.Value;          // MAX TO
            this._offLoadWeight = (int)this.hscale7.Value;
            EliM.ElicotteriList [i].OffLoadWeight = (int)this.hscale7.Value;      // off load W
            this._fuelConsumption         = (int)this.hscale3.Value;
            EliM.ElicotteriList [i].FuelC = (int)this.hscale3.Value;              // consumi di carburante

            if (this.button10.Label == "IN HANGAR")
            {
                this._posEli = false;
                EliM.ElicotteriList [i].PosEli = false;
            }
            else
            {
                this._posEli = true;
                EliM.ElicotteriList [i].PosEli = true;                 // posizione eli hangar o ponte
            }

            if (this.button15.Label == "PALE APERTE")
            {
                this._bladeSpread = true;
                EliM.ElicotteriList [i].IsBladeSpread = true;
            }
            else
            {
                this._bladeSpread = false;
                EliM.ElicotteriList [i].IsBladeSpread = false;                // pale aperte o chiuse
            }

            if (this.button16.Label == "ACCESO")
            {
                this._isRunning = true;
                EliM.ElicotteriList [i].IsRunning = true;
            }
            else
            {
                this._isRunning = false;
                EliM.ElicotteriList [i].IsRunning = false;                // accesso spento
            }

            if (this.button17.Label == "EFFICIENTE")
            {
                this._isEfficient = true;
                EliM.ElicotteriList [i].IsEfficient = true;
            }
            else
            {
                this._isEfficient = false;
                EliM.ElicotteriList [i].IsEfficient = false;                 // is efficient - inefficiente
            }

            win.InsertSomeText(" OPZIONI ELICOTTERO: record # " + (i + 1) + " AGGIORNATO..");
        }         // termine update record