using System; using Unity.Collections; using Unity.Collections.LowLevel.Unsafe; using System.Diagnostics; using GameCore.LowLevel; namespace GameCore.TinyECS { public partial struct EntityDataBlockMeta { public static EntityDataBlockMeta Create() where T1 : unmanaged { var meta = new EntityDataBlockMeta(); meta.componentIdToIndex.Length = meta.componentIdToIndex.Capacity; meta.componentIdToOffset.Length = meta.componentIdToOffset.Capacity; var id1 = ComponentId.Get(); meta.componentIdToIndex[id1] = 1; meta.componentIdToOffset[id1] = 0; meta.elementSize = UnsafeUtility.SizeOf(); meta.elementAlign = UnsafeUtility.AlignOf(); return meta; } public static EntityDataBlockMeta Create() where T1 : unmanaged where T2 : unmanaged { var meta = new EntityDataBlockMeta(); meta.componentIdToIndex.Length = meta.componentIdToIndex.Capacity; meta.componentIdToOffset.Length = meta.componentIdToOffset.Capacity; var id1 = ComponentId.Get(); var id2 = ComponentId.Get(); meta.componentIdToIndex[id1] = 1; meta.componentIdToIndex[id2] = 2; meta.componentIdToOffset[id1] = (short)StructUtility.OffsetOf<(T1, T2), T1>(); meta.componentIdToOffset[id2] = (short)StructUtility.OffsetOf<(T1, T2), T2>(); meta.elementSize = UnsafeUtility.SizeOf<(T1, T2)>(); meta.elementAlign = UnsafeUtility.AlignOf<(T2, T2)>(); return meta; } } }