You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
45 lines
1.7 KiB
45 lines
1.7 KiB
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<T1>() |
|
where T1 : unmanaged |
|
{ |
|
var meta = new EntityDataBlockMeta(); |
|
meta.componentIdToIndex.Length = meta.componentIdToIndex.Capacity; |
|
meta.componentIdToOffset.Length = meta.componentIdToOffset.Capacity; |
|
|
|
var id1 = ComponentId.Get<T1>(); |
|
meta.componentIdToIndex[id1] = 1; |
|
meta.componentIdToOffset[id1] = 0; |
|
meta.elementSize = UnsafeUtility.SizeOf<T1>(); |
|
meta.elementAlign = UnsafeUtility.AlignOf<T1>(); |
|
return meta; |
|
} |
|
|
|
public static EntityDataBlockMeta Create<T1, T2>() |
|
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<T1>(); |
|
var id2 = ComponentId.Get<T2>(); |
|
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; |
|
} |
|
} |
|
} |