using System; using System.Collections.Generic; namespace IdleSpectator; public sealed class StatusInterestEntry { public string Id = ""; public float EventStrength = 40f; public string Category = "Status"; public bool CreatesInterest; public bool ExtendsGrief; public bool IsFallback; } /// Status interest dials from event-catalog.json status. public static partial class EventCatalog { public static class Status { 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.FillStatus(Entries); } public static IEnumerable AuthoredIds { get { Ensure(); return Entries.Keys; } } public static bool HasAuthored(string statusId) { Ensure(); return !string.IsNullOrEmpty(statusId) && Entries.ContainsKey(statusId.Trim()); } public static bool TryGet(string statusId, out StatusInterestEntry entry) { Ensure(); entry = null; if (string.IsNullOrEmpty(statusId)) { return false; } return Entries.TryGetValue(statusId.Trim(), out entry); } public static StatusInterestEntry GetOrFallback(string statusId) { if (TryGet(statusId, out StatusInterestEntry entry)) { return entry; } string id = string.IsNullOrEmpty(statusId) ? "unknown" : statusId.Trim(); return new StatusInterestEntry { Id = id, EventStrength = 40f, Category = "Status", CreatesInterest = false, IsFallback = true }; } } }