Пример #1
0
        protected static void PopulateLotList(List<IceCreamTruckManager.LotData> data)
        {
            foreach (Lot lot in LotManager.AllLots)
            {
                if (!IsValidLot(lot, null)) continue;

                IceCreamTruckManager.LotData item = new IceCreamTruckManager.LotData(lot);

                item.mDistanceReduction = 0f;

                float openHour = 0f;
                float closingHour = 0f;
                if (lot.LotType == LotType.Commercial)
                {
                    if ((Bartending.TryGetHoursOfOperation(lot, ref openHour, ref closingHour)) && (SimClock.IsTimeBetweenTimes(SimClock.HoursPassedOfDay, openHour, closingHour)))
                    {
                        if (lot.CountObjects<ISchoolRabbitHole>() > 0x0)
                        {
                            item.mDistanceReduction += IceCreamTruckManager.kSchoolLotDistanceReduction;
                        }
                    }
                }

                if (lot.Household != null)
                {
                    item.mDistanceReduction += lot.Household.GetNumberOfKids() * IceCreamTruckManager.kKidsLotDistanceReduction;
                    if (lot.Household.IsActive)
                    {
                        item.mDistanceReduction += IceCreamTruckManager.kSelectableSimLotDistanceReduction;
                    }
                }

                switch (lot.CommercialLotSubType)
                {
                    case CommercialLotSubType.kSmallPark:
                    case CommercialLotSubType.kBigPark:
                    case CommercialLotSubType.kEP5_DogPark:
                    case CommercialLotSubType.kEP5_CatJungle:
                    case CommercialLotSubType.kEP11_RecreationPark:
                        item.mDistanceReduction += IceCreamTruckManager.kParkLotDistanceReduction;
                        break;
                }

                data.Add(item);
            }
        }
Пример #2
0
        public static void Update(IceCreamTruckManager ths)
        {
            bool winter = SeasonsManager.Enabled && (SeasonsManager.CurrentSeason == Season.Winter);
            int[] numArray = (SeasonsManager.Enabled && (SeasonsManager.CurrentSeason == Season.Summer)) ? IceCreamTruckManager.kHoursOfOperationSummer : IceCreamTruckManager.kHoursOfOperation;

            if ((winter || !SimClock.IsTimeBetweenTimes((float)numArray[0], (float)numArray[1])) || ((SimClock.IsNightTime()) && (!Traffic.Settings.mAllowIceCreamAtNight)))
            {
                foreach (IceCreamTruck truck in new List<IceCreamTruck>(ths.mIceCreamTrucks))
                {
                    truck.EndService();
                }

                ths.mIceCreamTrucks.Clear();
            }
            else
            {
                List<IceCreamTruckManager.LotData> data = null;
                if (data == null)
                {
                    data = new List<IceCreamTruckManager.LotData>();
                    PopulateLotList(data);
                }

                if ((data.Count > 0) && (ths.mIceCreamTrucks.Count < Traffic.Settings.mMaxIceCreamTrucks))
                {
                    IceCreamTruckManager.LotData randomObjectFromList = RandomUtil.GetRandomObjectFromList(data);
                    data.Remove(randomObjectFromList);

                    AddTruckIntoWorld(ths, randomObjectFromList.mLot);
                }
                else if ((ths.mIceCreamTrucks.Count > 0) && ((data.Count == 0) || (ths.mIceCreamTrucks.Count > Traffic.Settings.mMaxIceCreamTrucks)))
                {
                    IceCreamTruck truck = RandomUtil.GetRandomObjectFromList(ths.mIceCreamTrucks);

                    ths.mIceCreamTrucks.Remove(truck);

                    truck.FadeOut(false, true);
                }

                //Common.DebugNotify("Ice Cream Trucks " + ths.mIceCreamTrucks.Count);

                foreach (IceCreamTruck truck in ths.mIceCreamTrucks)
                {
                    if ((truck.MoveToNewLot()) || (!IsValidLot(TruckController.GetLot(truck), truck)))
                    {
                        if (data.Count == 0) continue;

                        ths.PopulateLotListDistanceAndScore(truck, data);
                        ths.RouteToNextBestSpot(truck, data);

                        for (int i = 0; i < data.Count; i++)
                        {
                            if (data[i].mLot == truck.mDestinationLot)
                            {
                                data.RemoveAt(i);
                                break;
                            }
                        }

                        Common.DebugNotify("Ice Cream Truck", truck.ObjectId, truck.mDestinationLot.ObjectId);

                        TruckController.AddTruck(truck);
                    }
                }
            }
        }