using System; using System.Collections.Generic; namespace IdleSpectator; public sealed class DisasterInterestEntry { public string Id = ""; public float EventStrength = 90f; public string Category = "Disaster"; public string WorldLogId = ""; public bool CreatesInterest = true; public bool IsFallback; } /// Disaster dials from event-catalog.json disasters. public static partial class EventCatalog { public static class Disaster { private static readonly Dictionary Entries = new Dictionary(StringComparer.OrdinalIgnoreCase); private static int _appliedGeneration = -1; public static void InvalidateOverlays() { Entries.Clear(); _appliedGeneration = -1; } private static void Ensure() { if (_appliedGeneration == EventCatalogConfig.Generation) { return; } _appliedGeneration = EventCatalogConfig.Generation; EventCatalogConfig.FillDisasters(Entries); } public static IEnumerable AuthoredIds { get { Ensure(); return Entries.Keys; } } public static bool HasAuthored(string disasterId) { Ensure(); return !string.IsNullOrEmpty(disasterId) && Entries.ContainsKey(disasterId.Trim()); } public static bool TryGet(string disasterId, out DisasterInterestEntry entry) { Ensure(); entry = null; if (string.IsNullOrEmpty(disasterId)) { return false; } return Entries.TryGetValue(disasterId.Trim(), out entry); } public static DisasterInterestEntry GetOrFallback(string disasterId) { if (TryGet(disasterId, out DisasterInterestEntry entry)) { return entry; } string id = string.IsNullOrEmpty(disasterId) ? "unknown" : disasterId.Trim(); return new DisasterInterestEntry { Id = id, EventStrength = 90f, Category = "Disaster", WorldLogId = "", CreatesInterest = true, IsFallback = true }; } /// /// True when is an authored overlay or a live /// asset (not tip-string heuristics). /// public static bool IsLiveOrAuthored(string disasterId) { if (string.IsNullOrEmpty(disasterId)) { return false; } string id = disasterId.Trim(); if (HasAuthored(id)) { return true; } return ActivityAssetCatalog.TryGetDisasterAsset(id) != null; } } }