using System; using Svelto.ECS.Internal; namespace Svelto.ECS { public interface IEntityViewBuilder { IEntityView BuildEntityViewAndAddToList(ref ITypeSafeList list, int entityID); ITypeSafeList Preallocate(ref ITypeSafeList list, int size); Type GetEntityViewType(); } public class EntityViewBuilder : IEntityViewBuilder where EntityViewType : EntityView, new() { public IEntityView BuildEntityViewAndAddToList(ref ITypeSafeList list, int entityID) { if (list == null) list = new TypeSafeFasterListForECSForClasses(); var castedList = list as TypeSafeFasterListForECSForClasses; var entityView = EntityView.BuildEntityView(entityID); castedList.Add(entityView); return entityView; } public ITypeSafeList Preallocate(ref ITypeSafeList list, int size) { if (list == null) list = new TypeSafeFasterListForECSForClasses(size); else list.ReserveCapacity(size); return list; } public Type GetEntityViewType() { return _entityViewType; } readonly Type _entityViewType = typeof(EntityViewType); } public class EntityStructBuilder : IEntityViewBuilder where EntityViewType : struct, IEntityStruct { public IEntityView BuildEntityViewAndAddToList(ref ITypeSafeList list, int entityID) { var entityView = default(EntityViewType); entityView.ID = entityID; if (list == null) list = new TypeSafeFasterListForECSForStructs(); var castedList = list as TypeSafeFasterListForECSForStructs; castedList.Add(entityView); return null; } public ITypeSafeList Preallocate(ref ITypeSafeList list, int size) { if (list == null) list = new TypeSafeFasterListForECSForStructs(size); else list.ReserveCapacity(size); return list; } public Type GetEntityViewType() { return _entityViewType; } readonly Type _entityViewType = typeof(EntityViewType); } }