using DCFApixels.DragonECS.PoolsCore; using System; using System.Collections.Generic; using System.Runtime.Serialization; using UnityEngine; namespace DCFApixels.DragonECS.Unity.Docs { [Serializable] [DataContract] public class DragonDocs { [DataMember, SerializeField] private readonly DragonDocsMeta[] _metas; public ReadOnlySpan Metas { get { return new ReadOnlySpan(_metas); } } private DragonDocs(DragonDocsMeta[] metas) { _metas = metas; } public static DragonDocs Generate() { List metas = new List(256); foreach (var type in GetTypes()) { metas.Add(new DragonDocsMeta(type.ToMeta())); } DragonDocsMeta[] array = metas.ToArray(); Array.Sort(array); return new DragonDocs(array); } private static List GetTypes() { Type metaAttributeType = typeof(EcsMetaAttribute); Type memberType = typeof(IEcsMember); List result = new List(512); foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies()) { foreach (var type in assembly.GetTypes()) { if (memberType.IsAssignableFrom(type) || Attribute.GetCustomAttributes(type, metaAttributeType, false).Length > 1) { result.Add(type); } } } return result; } } }