using Ghost.Entities; using System; using System.Linq; namespace Ghost.App.Utilities; public static class ComponentTypeCache { private static readonly Type?[][] _componentTypes; static ComponentTypeCache() { _componentTypes = new Type[World.WorldCount][]; for (var i = 0; i < World.WorldCount; i++) { var world = World.GetWorld(i); var typeHandles = world.ComponentStorage.ComponentPools.Keys; _componentTypes[i] = typeHandles.Select(handle => Type.GetTypeFromHandle(RuntimeTypeHandle.FromIntPtr(handle))).ToArray(); } } public static Type?[] GetComponentTypes(int worldIndex) { if (worldIndex < 0 || worldIndex >= _componentTypes.Length) { throw new ArgumentOutOfRangeException(nameof(worldIndex), "Invalid world index."); } return _componentTypes[worldIndex]; } }