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
2 years ago
|
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;
|
||
|
}
|
||
|
}
|
||
|
}
|