using System; using System.Collections.Generic; namespace IdleSpectator; /// Authored interest overlay for every live plots_library asset. public static class PlotInterestCatalog { private static readonly Dictionary Entries = new Dictionary(StringComparer.OrdinalIgnoreCase); static PlotInterestCatalog() { Add("rebellion", 92f, "Politics", InterestOwnership.Signal, "Rebellion plot: {a}"); Add("new_war", 94f, "Politics", InterestOwnership.Signal, "War plot: {a}"); Add("alliance_create", 80f, "Politics", InterestOwnership.Signal, "Alliance plot: {a}"); Add("alliance_join", 72f, "Politics", InterestOwnership.Signal, "Join alliance: {a}"); Add("alliance_destroy", 86f, "Politics", InterestOwnership.Signal, "Break alliance: {a}"); Add("attacker_stop_war", 78f, "Politics", InterestOwnership.Signal, "End war plot: {a}"); Add("new_book", 55f, "Culture", InterestOwnership.Ambient, "Book plot: {a}"); Add("new_language", 62f, "Culture", InterestOwnership.Ambient, "Language plot: {a}"); Add("new_religion", 70f, "Culture", InterestOwnership.Signal, "Religion plot: {a}"); Add("new_culture", 68f, "Culture", InterestOwnership.Signal, "Culture plot: {a}"); Add("clan_ascension", 82f, "Politics", InterestOwnership.Signal, "Clan ascension: {a}"); Add("culture_divide", 75f, "Culture", InterestOwnership.Signal, "Culture divides: {a}"); Add("religion_schism", 84f, "Culture", InterestOwnership.Signal, "Religion schism: {a}"); Add("language_divergence", 60f, "Culture", InterestOwnership.Ambient, "Language splits: {a}"); Add("summon_meteor_rain", 96f, "Spectacle", InterestOwnership.Signal, "Meteor plot: {a}"); Add("summon_earthquake", 95f, "Spectacle", InterestOwnership.Signal, "Earthquake plot: {a}"); Add("summon_thunderstorm", 93f, "Spectacle", InterestOwnership.Signal, "Thunderstorm plot: {a}"); Add("summon_stormfront", 93f, "Spectacle", InterestOwnership.Signal, "Stormfront plot: {a}"); Add("summon_hellstorm", 97f, "Spectacle", InterestOwnership.Signal, "Hellstorm plot: {a}"); Add("summon_demons", 96f, "Spectacle", InterestOwnership.Signal, "Summon demons: {a}"); Add("summon_angles", 96f, "Spectacle", InterestOwnership.Signal, "Summon angels: {a}"); Add("summon_skeletons", 92f, "Spectacle", InterestOwnership.Signal, "Summon skeletons: {a}"); Add("summon_living_plants", 90f, "Spectacle", InterestOwnership.Signal, "Summon plants: {a}"); Add("big_cast_coffee", 58f, "Spectacle", InterestOwnership.Ambient, "Coffee ritual: {a}"); Add("big_cast_bubble_shield", 64f, "Spectacle", InterestOwnership.Ambient, "Bubble shield: {a}"); Add("big_cast_madness", 80f, "Spectacle", InterestOwnership.Signal, "Madness cast: {a}"); Add("big_cast_slowness", 70f, "Spectacle", InterestOwnership.Ambient, "Slowness cast: {a}"); Add("cause_rebellion", 90f, "Politics", InterestOwnership.Signal, "Cause rebellion: {a}"); } private static void Add( string id, float strength, string category, InterestOwnership owns, string label) { Entries[id] = new DiscreteEventEntry { Id = id, EventStrength = strength, Category = category, OwnsCamera = owns, CreatesInterest = true, LabelTemplate = label }; } public static IEnumerable AuthoredIds => Entries.Keys; public static bool HasAuthored(string id) => !string.IsNullOrEmpty(id) && Entries.ContainsKey(id.Trim()); public static DiscreteEventEntry GetOrFallback(string id) { if (!string.IsNullOrEmpty(id) && Entries.TryGetValue(id.Trim(), out DiscreteEventEntry entry)) { return entry; } string key = string.IsNullOrEmpty(id) ? "unknown" : id.Trim(); return new DiscreteEventEntry { Id = key, EventStrength = 55f, Category = "Plot", OwnsCamera = InterestOwnership.Ambient, LabelTemplate = "Plot ({id}): {a}", IsFallback = true }; } }