//---------------------------------------------------------------------------------- // 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
//---------------------------------------------------------------------------------- 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"); } } }
// 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 }