//----------------------------------------------------------------------------------
        // 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
        }