// assegno un elicottero allo spot ed effettua il blocco public bool SpotEliAssign (Elicottero eli, Spot spot) { if (spot != null && eli != null && !spot.IsReservd && !eli.IsBlocked) { // spot ed eli devono essere diversi da null spot.IsReservd = true;// spot riservato spot.eliWhoReservd = eli; // elicottero riservante eli.Spotrequested = spot;// assegna lo spot all'elicottero eli.hasSpotReserved = true; // l'elicottero riserva un posto eli.EliBlock(SpotManager.timeNeedToMoveToDeck, 3); // elicottero bloccato per attività di movimentazione per 15 primi // al termine del blocco eli.PosEli = true indica che l'elicottero ha assunto la posizione sul ponte return true;// assegnazione avvenuta con successo } else return false;// assegnazione non avvenuta }
// 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