//Метод для назначения самолёта на контракт public bool AssignPlaneToContract(string planeID, uint flightNum) { //Ищем связываемые самолёт и контракт Contract contract = contracts[flightNum]; Plane assignedPlane = planes[planeID]; //Назначаем проверку предлагаемого самолёта Predicate <Plane> predicate = null; switch (contract.ConnectedFlights[0].FlightType) { case FType.Freight: predicate = plane => plane.MaxSeatings >= contract.ConnectedFlights[0].PasCount; break; case FType.Passenger: predicate = plane => plane.Payload >= contract.ConnectedFlights[0].Weight; break; } if (!predicate(assignedPlane) || assignedPlane.Range < CitiesInfo.GetRoute(contract.ConnectedFlights[0].IDFrom, contract.ConnectedFlights[0].IDTo).Distance) { return(false); } contract.AssignedPlane = assignedPlane; return(true); }
//Метод для перегонки самолёта из его текущего положения в другой город private decimal SendPlane(string planeID, string destinationID, uint?flightNum) { double distance = CitiesInfo.GetRoute(planesAndCities[planeID].ID, destinationID).Distance; decimal minus = (decimal)distance * fuelPrice; currentSavings -= minus; SavingsChanged?.Invoke(this, currentSavings); planesAndCities[planeID] = null; PlaneFlight ongoingFlight = new PlaneFlight { AssociatedFlightNum = flightNum, AssociatedPlaneID = planeID, DestinationID = destinationID, DistanceLeft = distance }; planesProgress.Add(ongoingFlight); return(minus); }
//Метод для получения карты расстояний между городами public List <Tuple <City, City, double> > GetCitiesDistanceInfo() { return(CitiesInfo.GetCityDistanceGraph()); }