示例#1
0
        public static DiningSpot FindDiningSpotFor([NotNull] Pawn pawn, bool allowDrug, Predicate <Thing> extraSpotValidator = null)
        {
            const int maxRegionsToScan  = 1000;
            const int maxDistanceToScan = 1000; // TODO: Make mod option?

            var restaurant = pawn.GetRestaurant();

            if (restaurant == null)
            {
                return(null);
            }
            if (!restaurant.Stock.HasAnyFoodFor(pawn, allowDrug))
            {
                return(null);
            }

            bool Validator(Thing thing)
            {
                var spot = (DiningSpot)thing;

                //Log.Message($"Validating spot for {pawn.NameShortColored}: social = {spot.IsSociallyProper(pawn)}, political = {spot.IsPoliticallyProper(pawn)}, "
                //            + $"canReserve = {pawn.CanReserve(spot, spot.GetMaxReservations(), 0)}, canDineHere = {spot.MayDineHere(pawn)}, "
                //            + $"extraValidator = { extraSpotValidator == null || extraSpotValidator.Invoke(spot)}");
                return(!spot.IsForbidden(pawn) && spot.IsSociallyProper(pawn) && spot.IsPoliticallyProper(pawn) && CanReserve(pawn, spot) && !spot.HostileTo(pawn) &&
                       spot.CanDineHere(pawn) && !RestaurantUtility.IsRegionDangerous(pawn, JobUtility.MaxDangerDining, spot.GetRegion()) && (extraSpotValidator == null || extraSpotValidator.Invoke(spot)));
            }

            var diningSpot = (DiningSpot)GenClosest.ClosestThingReachable(pawn.Position, pawn.Map, ThingRequest.ForDef(diningSpotDef),
                                                                          PathEndMode.ClosestTouch, TraverseParms.For(pawn), maxDistanceToScan, Validator, null, 0,
                                                                          maxRegionsToScan);

            return(diningSpot);
        }
示例#2
0
        public override bool HasJobOnThing(Pawn pawn, Thing t, bool forced = false)
        {
            if (!(t is DiningSpot spot))
            {
                return(false);
            }
            if (RestaurantUtility.IsRegionDangerous(pawn, spot.GetRegion()) && !forced)
            {
                return(false);
            }
            if (spot.GetReservationSpots().Any(s => s == SpotState.Clear || s > SpotState.Ready))
            {
                var canReserve = pawn.Map.reservationManager.CanReserve(pawn, spot);
                if (!canReserve)
                {
                    //var reserver = pawn.Map.reservationManager.FirstRespectedReserver(spot, pawn);
                    //Log.Message($"{pawn.NameShortColored} can't reserve {spot.Position} for making. Is reserved by {reserver?.NameShortColored}. ");
                    return(false);
                }

                //Log.Message($"{pawn.NameShortColored} can make table at {spot.Position}.");
                return(true);
            }

            return(false);
        }
示例#3
0
        public override bool HasJobOnThing(Pawn pawn, Thing t, bool forced = false)
        {
            if (!(t is Pawn patron))
            {
                return(false);
            }
            if (pawn == t)
            {
                return(false);
            }
            var driver = patron.GetDriver <JobDriver_Dine>();

            if (driver == null || !driver.wantsToOrder)
            {
                return(false);
            }

            var canReserve = pawn.Map.reservationManager.CanReserve(pawn, patron, 1, -1, null, forced);

            if (!canReserve)
            {
                var reserver = pawn.Map.reservationManager.FirstRespectedReserver(patron, pawn);
                //Log.Message($"{pawn.NameShortColored} can't reserve {patron.NameShortColored}. Is reserved by {reserver?.NameShortColored}. ");
                return(false);
            }
            if (RestaurantUtility.IsRegionDangerous(pawn, patron.GetRegion()) && !forced)
            {
                return(false);
            }

            return(true);
        }
        public static void Main(string[] args)
        {
            try
            {
                RestaurantUtility rest = new RestaurantUtility();
                DButilities       db   = new DButilities();

                Console.WriteLine("------------Welcome to Revature Eats!------------");
                Console.WriteLine("Please select from the following options:");
                Console.WriteLine("1. Display top 3 restaurants");
                Console.WriteLine("2. Display all restaurants");
                Console.WriteLine("3. Display a restaurant's details");
                Console.WriteLine("4. Display all reviews of a restaurant");
                Console.WriteLine("5. Search restaurants");
                Console.WriteLine("6. Sort Restaurants by name");
                Console.WriteLine("7. Sort Restaurants by rating");
                Console.WriteLine("8. Quit Application");

                int x = Convert.ToInt32(Console.ReadLine());
                switch (x)
                {
                case 1:
                    //Display top 3 restaurants based on average rating
                    rest.DisplayTop3();
                    break;

                case 2:
                    //Display all restaurants
                    foreach (var restaurant in RestaurantUtility.DisplayAllRestaurants())
                    {
                        Console.WriteLine(
                            "Restaurant: " + restaurant.name +
                            " || Address: " + restaurant.address +
                            " || Email: " + restaurant.email +
                            " || Phone Number: " + restaurant.phone);
                    }
                    break;

                case 3:
                    //Display info of each restaurant
                    break;

                case 4:
                    //Display all reviews of a restaurant
                    break;

                case 5:
                    Console.WriteLine("Search Restaurant Name: ");
                    string            query          = Console.ReadLine();
                    List <Restaurant> restaurantName = JsonConvert.DeserializeObject <List <Restaurant> >(RestaurantUtility.SearchRestaurant(query));
                    foreach (var restaurant in restaurantName)
                    {
                        Console.WriteLine(restaurant.name);
                    }
                    break;

                case 6:
                    foreach (var restaurant in RestaurantUtility.SortByName())
                    {
                        Console.WriteLine(restaurant.name);
                    }
                    break;

                case 7:
                    foreach (var restaurant in RestaurantUtility.SortByRating())
                    {
                        Console.WriteLine(restaurant.name + "Average Rating: " + restaurant.AvgRating);
                    }
                    break;

                case 8:
                    Console.WriteLine("Thank you and come again!");
                    break;

                default:
                    Console.WriteLine("Invalid option. Please try again.");
                    break;
                }
            } catch (Exception e)
            {
                Logger logger = LogManager.GetCurrentClassLogger();
                logger.Error(e.ToString());
            }
            Console.ReadLine();
        }
示例#5
0
 public RestaurantsController()
 {
     rutility = new RestaurantUtility();
 }
示例#6
0
        public override bool HasJobOnThing(Pawn pawn, Thing t, bool forced = false)
        {
            if (!(t is Pawn patron))
            {
                return(false);
            }

            if (pawn == t)
            {
                return(false);
            }

            var driver = patron.GetDriver <JobDriver_Dine>();

            if (driver == null || driver.wantsToOrder)
            {
                return(false);
            }

            var restaurant = pawn.GetRestaurant();
            var order      = restaurant.Orders.GetOrderFor(patron);

            if (order == null)
            {
                return(false);
            }
            if (order.delivered)
            {
                return(false);
            }

            if (restaurant.Orders.IsBeingDelivered(order))
            {
                return(false);
            }

            if (!patron.Spawned || patron.Dead)
            {
                Log.Message($"Order canceled. null? {order.patron == null} dead? {order.patron.Dead} unspawned? {!order.patron?.Spawned}");
                restaurant.Orders.CancelOrder(order);
                return(false);
            }

            //Log.Message($"{pawn.NameShortColored} is trying to serve {patron.NameShortColored} a {order.consumableDef.label}.");
            var consumable = restaurant.Stock.GetServableThing(order, pawn);

            if (consumable == null)
            {
                Log.Message($"Nothing found that matches order.");
                return(false);
            }

            if (RestaurantUtility.IsRegionDangerous(pawn, JobUtility.MaxDangerServing, patron.GetRegion()) && !forced)
            {
                return(false);
            }
            if (RestaurantUtility.IsRegionDangerous(pawn, JobUtility.MaxDangerServing, consumable.GetRegion()) && !forced)
            {
                return(false);
            }

            //Log.Message($"{pawn.NameShortColored} can serve {consumable.Label} to {order.patron.NameShortColored}.");
            order.consumable = consumable; // Store for JobOnThing
            return(true);
        }
示例#7
0
    IEnumerator Start()
    {
        ru = GameObject.FindObjectOfType <RestaurantUtility>();


#if !UNITY_EDITOR
        if (!Input.location.isEnabledByUser)
        {
            yield break;
        }

        // Start service before querying location
        Input.location.Start();

        // Wait until service initializes
        int maxWait = 20;
        while (Input.location.status == LocationServiceStatus.Initializing && maxWait > 0)
        {
            yield return(new WaitForSeconds(1));

            maxWait--;
        }

        Input.location.Stop();
#endif
#if UNITY_EDITOR
        yield return(null);

        yield return(new WaitForSeconds(3));
#endif

        loadingAnimation.SetActive(false);
        TextAsset      r    = Resources.Load <TextAsset>("Restaurants");
        RestaurantList json = JsonUtility.FromJson <RestaurantList>(r.ToString());

        ru.RestaurantList = json;

        foreach (var restaurant in json.restaurants)
        {
            GameObject newRestaurant = Instantiate(restuarantPrefab, transform);

            TextMeshProUGUI name = newRestaurant.transform.Find("Name").GetComponent <TextMeshProUGUI>();
            name.text = restaurant.name;

            TextMeshProUGUI type = newRestaurant.transform.Find("Type").GetComponent <TextMeshProUGUI>();
            type.text = restaurant.foodType;

            TextMeshProUGUI meal     = newRestaurant.transform.Find("Meal").GetComponent <TextMeshProUGUI>();
            string          tempText = "";
            foreach (var m in restaurant.mealType)
            {
                tempText = tempText + (MealType)m + " • ";
            }
            meal.text = tempText.Substring(0, tempText.Length - 3);

            TextMeshProUGUI distance = newRestaurant.transform.Find("Distance").GetComponent <TextMeshProUGUI>();
            Vector2         restaurantLocation;
            Vector2         userLocation;
#if UNITY_EDITOR
            restaurantLocation = new Vector2((float)restaurant.longitude, (float)restaurant.latitude);
            userLocation       = new Vector2((float)10.1, (float)9.9);
#endif
#if !UNITY_EDITOR
            restaurantLocation = new Vector2((float)restaurant.longitude, (float)restaurant.latitude);
            userLocation       = new Vector2(Input.location.lastData.longitude, Input.location.lastData.latitude);
#endif
            distance.text = (Mathf.Round(Vector2.Distance(restaurantLocation, userLocation) * 100) / 100.0f).ToString() + " MILES";

            ru.RestaurantButtons.Add(newRestaurant);
        }
    }