using System; using System.Collections.Generic; using System.Linq; using JetBrains.Annotations; using UnityEngine; namespace RoR2; public static class InstanceTracker { private static class TypeData where T : MonoBehaviour { public static readonly List instancesList; static TypeData() { instancesList = new List(); instancesLists[typeof(T)] = instancesList; } public static void Add(T instance) { instancesList.Add(instance); } public static void Remove(T instance) { instancesList.Remove(instance); } } private static readonly Dictionary> instancesLists = new Dictionary>(); public static void Add([NotNull] T instance) where T : MonoBehaviour { TypeData.Add(instance); } public static void Remove([NotNull] T instance) where T : MonoBehaviour { TypeData.Remove(instance); } [NotNull] public static List GetInstancesList() where T : MonoBehaviour { return TypeData.instancesList; } public static T FirstOrNull() where T : MonoBehaviour { if (TypeData.instancesList.Count == 0) { return null; } return TypeData.instancesList[0]; } public static bool Any() where T : MonoBehaviour { return TypeData.instancesList.Count != 0; } [NotNull] public static IEnumerable FindInstancesEnumerable([NotNull] Type t) { if (!instancesLists.TryGetValue(t, out var value)) { return Enumerable.Empty(); } return value; } }