public CalcTravelRoute GetTravelRouteFromSrcLoc([NotNull] CalcLocation srcLocation, [NotNull] CalcSite dstSite, [NotNull] TimeStep startTimeStep, [NotNull] string personName, CalcRepo calcRepo) { CalcSite srcSite = LocationSiteLookup[srcLocation]; if (srcSite == dstSite) { return(SameSiteRoutes[srcSite]); } //first get the routes, no matter if busy var devicesAtSrc = AllMoveableDevices.Where(x => x.Currentsite == srcSite).ToList(); var possibleRoutes = srcSite.GetAllRoutesTo(dstSite, devicesAtSrc); if (possibleRoutes.Count == 0) { return(null); } //check if the route is busy by calculating the duration. If busy, duration will be null int? dur = null; CalcTravelRoute ctr = null; while (dur == null && possibleRoutes.Count > 0) { ctr = possibleRoutes[calcRepo.Rnd.Next(possibleRoutes.Count)]; possibleRoutes.Remove(ctr); dur = ctr.GetDuration(startTimeStep, personName, AllMoveableDevices); } if (dur == null) { ctr = null; } return(ctr); }
public void AddVehicleDepotDevice([NotNull] CalcTransportationDevice dev) { VehicleDepot.Add(dev); AllMoveableDevices.Add(dev); }