Exemple #1
0
		// restituisce il primo spot efficiente in grado di ospitare una determinata categoria di elicottero
		// se non ci sono spot efficienti allora viene restituito il valore nullo
		public Spot SpotToHostaCat (int catEli, Spot.day_night _dn)
		{

			if (this.Spotlist.Count > 0) { // controllo se il numero di spot presenti è maggiore di 0
				foreach (Spot _spot in this.Spotlist) {
					if (_spot.SpotRunnable 
						&& (!_spot.SpotOccupied) 
						&& !_spot.IsReservd) { // controllo se lo spot trovat è efficiente e non è gia occupato

						if (_dn == Spot.day_night.day) { // controllo le cateogire accettate di giorno
							if (((catEli == 1) && (_spot.DayCanAccept.Cat1 == true)) 
								|| ((catEli == 2) && (_spot.DayCanAccept.Cat2 == true)) 
								|| ((catEli == 3) && (_spot.DayCanAccept.Cat3 == true)))
								return _spot;
						} else {// qua la categoria deve essere per forza notturna
							if (((catEli == 1) && (_spot.NightCanAccept.Cat1 == true)) 
								|| ((catEli == 2) && (_spot.NightCanAccept.Cat2 == true)) 
								|| ((catEli == 3) && (_spot.NightCanAccept.Cat3 == true)))
								return _spot;
						}
					} 	
				}
			} 
			return null;
		}// fine metodo SpotToHostaCat
        //----------------------------------------------------------------------------------
        // 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
        }                                               // flag di fine simulazione

        // costruttore della classe
        public SimMover(Spot.day_night _dnOps, InfoWindow _winI, TroopsManager _troopM, EliManager _eliM, SpotManager _spotM, CargoManager _cargoM)
        {
            this.DNOps           = _dnOps;  // passo la struttua giorno notte
            this.WinI            = _winI;   // passo la finestra informazioni
            this.TroopM          = _troopM; // passo il manager truppe
            this.EliM            = _eliM;   // passo il manager elicotteri
            this.SpotM           = _spotM;  // passo il manager spot
            this.CargoM          = _cargoM; // passo il manager cargo
            this.Speed           = 100;     // set iniziale della velocità pari a 100 knots
            this.EndProgramState = false;   // inizializzo l'end state a falso
        }
        //----------------------------------------------------------------------------------

        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");
                }
            }
        }
Exemple #5
0
        public bool assignEnded;        // se TRUE indica l'assegnazione iniziale degli spot dedicati

        // al simulatore vengono passate tutte le informazioni necessarie alla simulazione degli eventi
        public Simulator(int distance, Spot.day_night _dnOps, InfoWindow _winI, TroopsManager _troopM, EliManager _eliM, SpotManager _spotM, CargoManager _cargoM)
        {
            // passo al simulatore TUTTE le informazioni necessarie
            this.DNOps    = _dnOps;        // operazione day night
            this.TroopM   = _troopM;       // manager truppe  e lista truppe
            this.EliM     = _eliM;         // manager eli e lista eli
            this.SpotM    = _spotM;        // magaer spot e lista spot
            this.CargoM   = _cargoM;       // manager cargo e lista cargo
            this.WinI     = _winI;         // information window
            this.Distance = distance;      // pass il paramentro distanz
            this.WinI.InsertSomeText("SIMULATOR: simulatore creato. Effettuo l'inizializzazione....");

            // creazione della logica di gesitione e della grafica di funzionamento
            simMoverLogic = new SimMover(this.DNOps, this.WinI, this.TroopM, this.EliM, this.SpotM, this.CargoM);
            simulG        = new GrafXNA(this.simMoverLogic);       // costruzione del supporto grafico di riferimento
        }
        // 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
        }
 // menu - opzioni simulazione - operazioni notturne
 protected void OnNotteActionActivated(object sender, EventArgs e)
 {
     DNOperation = Spot.day_night.night;             // setto lo sbarco notturne
     InformationWin.InsertSomeText("MAIN WINDOW: selezionata operazione NOTTURNA");
 }
 //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");
 }