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
};
}
}