Exemplo n.º 1
0
        /// <summary>
        /// Processes the city events simulation step. The method can be called frequently, but the processing occurs periodically
        /// at an interval specified by <see cref="EventProcessInterval"/>.
        /// </summary>
        public void ProcessEvents()
        {
            if (RemoveCanceledEvents())
            {
                OnEventsChanged();
            }

            if ((timeInfo.Now - lastProcessed) < EventProcessInterval)
            {
                return;
            }

            lastProcessed = timeInfo.Now;

            Update();
            if (upcomingEvents.Count >= MaximumEventsCount || !config.AreEventsEnabled)
            {
                return;
            }

            ushort building = buildingManager.GetRandomBuilding(EventBuildingServices);

            if (!buildingManager.BuildingHasFlags(building, Building.Flags.Active))
            {
                return;
            }

            CreateRandomEvent(building);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Determines whether the building with the specified ID is an entertainment target.
        /// </summary>
        /// <param name="buildingId">The building ID to check.</param>
        /// <returns>
        ///   <c>true</c> if the building is an entertainment target; otherwise, <c>false</c>.
        /// </returns>
        public bool IsEntertainmentTarget(ushort buildingId)
        {
            if (buildingId == 0)
            {
                return(true);
            }

            // We override the building's active flag (e.g. at night), so a building still can post outgoing offers while inactive.
            // This is to prevent those offers from being dispatched.
            if (!buildingManager.BuildingHasFlags(buildingId, Building.Flags.Active))
            {
                return(false);
            }

            string className = buildingManager.GetBuildingClassName(buildingId);

            if (string.IsNullOrEmpty(className))
            {
                return(true);
            }

            for (int i = 0; i < BannedEntertainmentBuildings.Length; ++i)
            {
                if (className.IndexOf(BannedEntertainmentBuildings[i], 0, StringComparison.OrdinalIgnoreCase) >= 0)
                {
                    return(false);
                }
            }

            return(true);
        }
Exemplo n.º 3
0
        /// <summary>
        /// Determines whether the building with the specified ID is an entertainment target.
        /// </summary>
        /// <param name="buildingId">The building ID to check.</param>
        /// <returns>
        ///   <c>true</c> if the building is an entertainment target; otherwise, <c>false</c>.
        /// </returns>
        public bool IsEntertainmentTarget(ushort buildingId)
        {
            if (buildingId == 0)
            {
                return(true);
            }

            // A building still can post outgoing offers while inactive.
            // This is to prevent those offers from being dispatched.
            if (!buildingManager.BuildingHasFlags(buildingId, Building.Flags.Active))
            {
                return(false);
            }

            var buildingService = buildingManager.GetBuildingService(buildingId);

            if (buildingService == ItemClass.Service.VarsitySports)
            {
                // Do not visit varsity sport arenas for entertainment when no active events
                return(false);
            }

            string className = buildingManager.GetBuildingClassName(buildingId);

            if (string.IsNullOrEmpty(className))
            {
                return(true);
            }

            for (int i = 0; i < BannedEntertainmentBuildings.Length; ++i)
            {
                if (className.IndexOf(BannedEntertainmentBuildings[i], 0, StringComparison.OrdinalIgnoreCase) >= 0)
                {
                    return(false);
                }
            }

            return(true);
        }
Exemplo n.º 4
0
        public void ProcessEvents()
        {
            if ((timeInfo.Now - lastProcessed) < EventProcessInterval)
            {
                return;
            }

            lastProcessed = timeInfo.Now;

            Update();
            if (upcomingEvents.Count >= MaximumEventsCount)
            {
                return;
            }

            ushort building = buildingManager.GetRandomBuilding(EventBuildingServices);

            if (!buildingManager.BuildingHasFlags(building, Building.Flags.Active))
            {
                return;
            }

            CreateRandomEvent(building);
        }
Exemplo n.º 5
0
 private bool IsBuildingCompleted(ushort buildingId)
 {
     return(buildingManager.BuildingHasFlags(buildingId, Building.Flags.Completed));
 }