/// <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); }
/// <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); }
/// <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); }
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); }
private bool IsBuildingCompleted(ushort buildingId) { return(buildingManager.BuildingHasFlags(buildingId, Building.Flags.Completed)); }