worldbox-observer-mod/IdleSpectator/Events/Catalogs/EventCatalog.Status.cs
2026-07-16 14:21:48 -05:00

88 lines
2.3 KiB
C#

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;
}
/// <summary>Status interest dials from <c>event-catalog.json</c> <c>status</c>.</summary>
public static partial class EventCatalog
{
public static class Status
{
private static readonly Dictionary<string, StatusInterestEntry> Entries =
new Dictionary<string, StatusInterestEntry>(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<string> 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
};
}
}
}