@@ -41,19 +41,19 @@ namespace Svelto.ECS | |||
{ | |||
var dic = EntityFactory.BuildGroupedEntityViews(entityID, | |||
_groupedEntityToAdd.current, | |||
EntityDescriptorTemplate<T>.Info.entityViewsToBuild, | |||
EntityDescriptorTemplate<T>.descriptor.EntityToBuild, | |||
implementors); | |||
return new EntityStructInitializer(entityID, dic); | |||
} | |||
EntityStructInitializer BuildEntity(EGID entityID, | |||
IEntityViewBuilder[] entityViewsToBuild, | |||
IEntityBuilder[] entityToBuild, | |||
object[] implementors) | |||
{ | |||
var dic = EntityFactory.BuildGroupedEntityViews(entityID, | |||
_groupedEntityToAdd.current, | |||
entityViewsToBuild, | |||
entityToBuild, | |||
implementors); | |||
return new EntityStructInitializer(entityID, dic); | |||
@@ -63,7 +63,7 @@ namespace Svelto.ECS | |||
void Preallocate<T>(int groupID, int size) where T : IEntityDescriptor, new() | |||
{ | |||
var entityViewsToBuild = EntityDescriptorTemplate<T>.Info.entityViewsToBuild; | |||
var entityViewsToBuild = EntityDescriptorTemplate<T>.descriptor.EntityToBuild; | |||
var count = entityViewsToBuild.Length; | |||
//reserve space in the database | |||
@@ -95,12 +95,12 @@ namespace Svelto.ECS | |||
} | |||
if (group.TryGetValue(_typeEntityInfoView, out dbList) == false) | |||
group[_typeEntityInfoView] = EntityViewBuilder<EntityInfoView>.Preallocate(ref dbList, size); | |||
group[_typeEntityInfoView] = EntityBuilder<EntityInfoView>.Preallocate(ref dbList, size); | |||
else | |||
dbList.AddCapacity(size); | |||
if (@groupBuffer.TryGetValue(_typeEntityInfoView, out dbList) == false) | |||
@groupBuffer[_typeEntityInfoView] = EntityViewBuilder<EntityInfoView>.Preallocate(ref dbList, size); | |||
@groupBuffer[_typeEntityInfoView] = EntityBuilder<EntityInfoView>.Preallocate(ref dbList, size); | |||
else | |||
dbList.AddCapacity(size); | |||
} | |||
@@ -182,7 +182,7 @@ namespace Svelto.ECS | |||
if (groupedEntityViewsTyped.TryGetValue(_typeEntityInfoView, out toSafeDic) == false) | |||
groupedEntityViewsTyped[_typeEntityInfoView] = toSafeDic = entityInfoViewDictionary.Create(); | |||
EntityViewBuilder<EntityInfoView>.MoveEntityView(entityegid, toGroupID, entityInfoViewDictionary, toSafeDic); | |||
EntityBuilder<EntityInfoView>.MoveEntityView(entityegid, toGroupID, entityInfoViewDictionary, toSafeDic); | |||
} | |||
EGID SwapFirstEntityGroup(int fromGroupID, int toGroupId) | |||
@@ -32,19 +32,19 @@ namespace Svelto.ECS | |||
return _weakEngine.Target.BuildEntity<T>(egid, implementors); | |||
} | |||
public EntityStructInitializer BuildEntity(int entityID, IEntityViewBuilder[] entityViewsToBuild, object[] implementors) | |||
public EntityStructInitializer BuildEntity(int entityID, IEntityBuilder[] entityToBuild, object[] implementors) | |||
{ | |||
return _weakEngine.Target.BuildEntity(new EGID(entityID), entityViewsToBuild, implementors); | |||
return _weakEngine.Target.BuildEntity(new EGID(entityID), entityToBuild, implementors); | |||
} | |||
public EntityStructInitializer BuildEntity(EGID egid, IEntityViewBuilder[] entityViewsToBuild, object[] implementors) | |||
public EntityStructInitializer BuildEntity(EGID egid, IEntityBuilder[] entityToBuild, object[] implementors) | |||
{ | |||
return _weakEngine.Target.BuildEntity(egid, entityViewsToBuild, implementors); | |||
return _weakEngine.Target.BuildEntity(egid, entityToBuild, implementors); | |||
} | |||
public EntityStructInitializer BuildEntity(int entityID, int groupID, IEntityViewBuilder[] entityViewsToBuild, object[] implementors) | |||
public EntityStructInitializer BuildEntity(int entityID, int groupID, IEntityBuilder[] entityToBuild, object[] implementors) | |||
{ | |||
return _weakEngine.Target.BuildEntity(new EGID(entityID, groupID), entityViewsToBuild, implementors); | |||
return _weakEngine.Target.BuildEntity(new EGID(entityID, groupID), entityToBuild, implementors); | |||
} | |||
public void PreallocateEntitySpace<T>(int size) where T : IEntityDescriptor, new() | |||
@@ -5,50 +5,50 @@ namespace Svelto.ECS | |||
{ | |||
public interface IEntityDescriptor | |||
{ | |||
IEntityViewBuilder[] entityViewsToBuild { get; } | |||
IEntityBuilder[] EntityToBuild { get; } | |||
} | |||
public class EntityDescriptor : IEntityDescriptor | |||
{ | |||
protected EntityDescriptor(IEntityViewBuilder[] entityViewsToBuild) | |||
protected EntityDescriptor(IEntityBuilder[] entityToBuild) | |||
{ | |||
this.entityViewsToBuild = entityViewsToBuild; | |||
this.EntityToBuild = entityToBuild; | |||
} | |||
public IEntityViewBuilder[] entityViewsToBuild { get; } | |||
public IEntityBuilder[] EntityToBuild { get; } | |||
} | |||
public static class EntityDescriptorTemplate<TType> where TType : IEntityDescriptor, new() | |||
{ | |||
public static readonly EntityDescriptorInfo<TType> Info = new EntityDescriptorInfo<TType>(new TType()); | |||
public static readonly EntityDescriptor<TType> descriptor = new EntityDescriptor<TType>(new TType()); | |||
} | |||
public struct DynamicEntityDescriptorInfo<TType> where TType : class, IEntityDescriptor, new() | |||
public struct DynamicEntityDescriptorInfo<TType>:IEntityDescriptor where TType : IEntityDescriptor, new() | |||
{ | |||
public readonly IEntityViewBuilder[] entityViewsToBuild; | |||
public DynamicEntityDescriptorInfo(FasterList<IEntityViewBuilder> extraEntityViews) | |||
public DynamicEntityDescriptorInfo(FasterList<IEntityBuilder> extraEntityViews) | |||
{ | |||
DBC.ECS.Check.Require(extraEntityViews.Count > 0, | |||
"don't use a DynamicEntityDescriptorInfo if you don't need to use extra EntityViews"); | |||
var defaultEntityViewsToBuild = EntityDescriptorTemplate<TType>.Info.entityViewsToBuild; | |||
var defaultEntityViewsToBuild = EntityDescriptorTemplate<TType>.descriptor.EntityToBuild; | |||
var length = defaultEntityViewsToBuild.Length; | |||
entityViewsToBuild = new IEntityViewBuilder[length + extraEntityViews.Count]; | |||
EntityToBuild = new IEntityBuilder[length + extraEntityViews.Count]; | |||
Array.Copy(defaultEntityViewsToBuild, 0, entityViewsToBuild, 0, length); | |||
Array.Copy(extraEntityViews.ToArrayFast(), 0, entityViewsToBuild, length, extraEntityViews.Count); | |||
Array.Copy(defaultEntityViewsToBuild, 0, EntityToBuild, 0, length); | |||
Array.Copy(extraEntityViews.ToArrayFast(), 0, EntityToBuild, length, extraEntityViews.Count); | |||
} | |||
public IEntityBuilder[] EntityToBuild { get; } | |||
} | |||
public struct EntityDescriptorInfo<TType> where TType : IEntityDescriptor | |||
public struct EntityDescriptor<TType>:IEntityDescriptor where TType : IEntityDescriptor | |||
{ | |||
public readonly IEntityViewBuilder[] entityViewsToBuild; | |||
internal EntityDescriptorInfo(TType descriptor) | |||
internal EntityDescriptor(TType descriptor) | |||
{ | |||
entityViewsToBuild = descriptor.entityViewsToBuild; | |||
EntityToBuild = descriptor.EntityToBuild; | |||
} | |||
public IEntityBuilder[] EntityToBuild { get; } | |||
} | |||
} |
@@ -7,12 +7,12 @@ namespace Svelto.ECS.Internal | |||
{ | |||
internal static Dictionary<Type, ITypeSafeDictionary> BuildGroupedEntityViews(EGID egid, | |||
Dictionary<int, Dictionary<Type, ITypeSafeDictionary>> groupEntityViewsByType, | |||
IEntityViewBuilder[] entityViewsToBuild, | |||
IEntityBuilder[] entityToBuild, | |||
object[] implementors) | |||
{ | |||
var @group = FetchEntityViewGroup(egid.groupID, groupEntityViewsByType); | |||
BuildEntityViewsAndAddToGroup(egid, group, entityViewsToBuild, implementors); | |||
BuildEntityViewsAndAddToGroup(egid, group, entityToBuild, implementors); | |||
return group; | |||
} | |||
@@ -32,25 +32,25 @@ namespace Svelto.ECS.Internal | |||
static void BuildEntityViewsAndAddToGroup(EGID entityID, | |||
Dictionary<Type, ITypeSafeDictionary> @group, | |||
IEntityViewBuilder[] entityViewsToBuild, | |||
IEntityBuilder[] entityToBuild, | |||
object[] implementors) | |||
{ | |||
var count = entityViewsToBuild.Length; | |||
var count = entityToBuild.Length; | |||
for (var index = 0; index < count; ++index) | |||
{ | |||
var entityViewBuilder = entityViewsToBuild[index]; | |||
var entityViewBuilder = entityToBuild[index]; | |||
var entityViewType = entityViewBuilder.GetEntityType(); | |||
BuildEntityView(entityID, @group, entityViewType, entityViewBuilder, implementors); | |||
} | |||
_viewBuilder._initializer = new EntityInfoView {entityToBuild = entityViewsToBuild}; | |||
BuildEntityView(entityID, @group, _viewType, _viewBuilder, null); | |||
Builder._initializer = new EntityInfoView {entityToBuild = entityToBuild}; | |||
BuildEntityView(entityID, @group, _viewType, Builder, null); | |||
} | |||
static void BuildEntityView(EGID entityID, Dictionary<Type, ITypeSafeDictionary> @group, | |||
Type entityViewType, IEntityViewBuilder entityViewBuilder, object[] implementors) | |||
Type entityViewType, IEntityBuilder entityBuilder, object[] implementors) | |||
{ | |||
ITypeSafeDictionary safeDictionary; | |||
@@ -60,13 +60,13 @@ namespace Svelto.ECS.Internal | |||
//passing the undefined entityViewsByType inside the entityViewBuilder will allow | |||
//it to be created with the correct type and casted back to the undefined list. | |||
//that's how the list will be eventually of the target type. | |||
entityViewBuilder.BuildEntityViewAndAddToList(ref safeDictionary, entityID, implementors); | |||
entityBuilder.BuildEntityViewAndAddToList(ref safeDictionary, entityID, implementors); | |||
if (entityViewsPoolWillBeCreated) | |||
@group.Add(entityViewType, safeDictionary); | |||
} | |||
static readonly EntityViewBuilder<EntityInfoView> _viewBuilder = new EntityViewBuilder<EntityInfoView>(); | |||
static readonly EntityBuilder<EntityInfoView> Builder = new EntityBuilder<EntityInfoView>(); | |||
static readonly Type _viewType = typeof(EntityInfoView); | |||
} | |||
} |
@@ -9,9 +9,9 @@ using Svelto.Utilities; | |||
namespace Svelto.ECS | |||
{ | |||
public class EntityViewBuilder<T> : IEntityViewBuilder where T : IEntityStruct, new() | |||
public class EntityBuilder<T> : IEntityBuilder where T : IEntityStruct, new() | |||
{ | |||
public EntityViewBuilder() | |||
public EntityBuilder() | |||
{ | |||
_initializer = default(T); | |||
@@ -69,7 +69,7 @@ namespace Svelto.ECS | |||
} | |||
} | |||
ITypeSafeDictionary IEntityViewBuilder.Preallocate(ref ITypeSafeDictionary dictionary, int size) | |||
ITypeSafeDictionary IEntityBuilder.Preallocate(ref ITypeSafeDictionary dictionary, int size) | |||
{ | |||
return Preallocate(ref dictionary, size); | |||
} | |||
@@ -89,7 +89,7 @@ namespace Svelto.ECS | |||
return ENTITY_VIEW_TYPE; | |||
} | |||
void IEntityViewBuilder.MoveEntityView(EGID entityID, int toGroupID, ITypeSafeDictionary fromSafeDic, ITypeSafeDictionary toSafeDic) | |||
void IEntityBuilder.MoveEntityView(EGID entityID, int toGroupID, ITypeSafeDictionary fromSafeDic, ITypeSafeDictionary toSafeDic) | |||
{ | |||
MoveEntityView(entityID, toGroupID, fromSafeDic, toSafeDic); | |||
} | |||
@@ -6,7 +6,7 @@ using Svelto.Utilities; | |||
static class EntityViewUtility | |||
{ | |||
public static void FillEntityView<T>(this IEntityViewBuilder entityViewBuilder | |||
public static void FillEntityView<T>(this IEntityBuilder entityBuilder | |||
, ref T entityView | |||
, FasterList<KeyValuePair<Type, ActionCast<T>>> entityViewBlazingFastReflection | |||
, object[] implementors | |||
@@ -20,7 +20,7 @@ static class EntityViewUtility | |||
.NoVirt.ToArrayFast(entityViewBlazingFastReflection, out count); | |||
#if DEBUG && !PROFILER | |||
if (count == 0) | |||
throw new Exception(NO_COMPONENTS_EXCEPTION.FastConcat("Type ", entityDescriptorName, " entityView ", entityViewBuilder.GetEntityType().ToString())); | |||
throw new Exception(NO_COMPONENTS_EXCEPTION.FastConcat("Type ", entityDescriptorName, " entityView ", entityBuilder.GetEntityType().ToString())); | |||
#endif | |||
for (var index = 0; index < implementors.Length; index++) | |||
{ | |||
@@ -52,7 +52,7 @@ static class EntityViewUtility | |||
#if DEBUG && !PROFILER | |||
else | |||
{ | |||
Utility.Console.LogError(NULL_IMPLEMENTOR_ERROR.FastConcat("Type ", entityDescriptorName, " entityView ", entityViewBuilder.GetEntityType().ToString())); | |||
Utility.Console.LogError(NULL_IMPLEMENTOR_ERROR.FastConcat("Type ", entityDescriptorName, " entityView ", entityBuilder.GetEntityType().ToString())); | |||
} | |||
#endif | |||
} | |||
@@ -72,7 +72,7 @@ static class EntityViewUtility | |||
{ | |||
var e = new Exception(NOT_FOUND_EXCEPTION + " Component Type: " + fieldType.Name + | |||
" - EntityView: " + | |||
entityViewBuilder.GetEntityType().Name + " - EntityDescriptor " + entityDescriptorName); | |||
entityBuilder.GetEntityType().Name + " - EntityDescriptor " + entityDescriptorName); | |||
throw e; | |||
} | |||
@@ -83,7 +83,7 @@ static class EntityViewUtility | |||
" implementor: ", | |||
component.implementorType.ToString()) + | |||
" - EntityView: " + | |||
entityViewBuilder.GetEntityType().Name + " - EntityDescriptor " + entityDescriptorName); | |||
entityBuilder.GetEntityType().Name + " - EntityDescriptor " + entityDescriptorName); | |||
#endif | |||
#if DEBUG && !PROFILER | |||
fieldSetter.Value(ref entityView, component.implementorType); | |||
@@ -5,9 +5,9 @@ namespace Svelto.ECS | |||
UnityEngine.MonoBehaviour , IEntityDescriptorHolder | |||
where T: IEntityDescriptor, new() | |||
{ | |||
public EntityDescriptorInfo<T> RetrieveDescriptorInfo<T>() where T : IEntityDescriptor, new() | |||
public IEntityBuilder[] GetEntitiesToBuild() | |||
{ | |||
return EntityDescriptorTemplate<T>.Info; | |||
return EntityDescriptorTemplate<T>.descriptor.EntityToBuild; | |||
} | |||
} | |||
} |
@@ -4,15 +4,15 @@ | |||
{ | |||
static GenericEntityDescriptor() | |||
{ | |||
entityViewBuilders = new IEntityViewBuilder[] { new EntityViewBuilder<T>() }; | |||
EntityBuilders = new IEntityBuilder[] { new EntityBuilder<T>() }; | |||
} | |||
public IEntityViewBuilder[] entityViewsToBuild | |||
public IEntityBuilder[] EntityToBuild | |||
{ | |||
get { return entityViewBuilders; } | |||
get { return EntityBuilders; } | |||
} | |||
static readonly IEntityViewBuilder[] entityViewBuilders; | |||
static readonly IEntityBuilder[] EntityBuilders; | |||
} | |||
public abstract class GenericEntityDescriptor<T, U> : IEntityDescriptor where T : IEntityStruct, new() | |||
@@ -20,15 +20,15 @@ | |||
{ | |||
static GenericEntityDescriptor() | |||
{ | |||
entityViewBuilders = new IEntityViewBuilder[] {new EntityViewBuilder<T>(), new EntityViewBuilder<U>()}; | |||
EntityBuilders = new IEntityBuilder[] {new EntityBuilder<T>(), new EntityBuilder<U>()}; | |||
} | |||
public IEntityViewBuilder[] entityViewsToBuild | |||
public IEntityBuilder[] EntityToBuild | |||
{ | |||
get { return entityViewBuilders; } | |||
get { return EntityBuilders; } | |||
} | |||
static readonly IEntityViewBuilder[] entityViewBuilders; | |||
static readonly IEntityBuilder[] EntityBuilders; | |||
} | |||
public abstract class GenericEntityDescriptor<T, U, V> : IEntityDescriptor where T : IEntityStruct, new() | |||
@@ -37,15 +37,15 @@ | |||
{ | |||
static GenericEntityDescriptor() | |||
{ | |||
entityViewBuilders = new IEntityViewBuilder[] {new EntityViewBuilder<T>(), new EntityViewBuilder<U>(), new EntityViewBuilder<V>()}; | |||
EntityBuilders = new IEntityBuilder[] {new EntityBuilder<T>(), new EntityBuilder<U>(), new EntityBuilder<V>()}; | |||
} | |||
public IEntityViewBuilder[] entityViewsToBuild | |||
public IEntityBuilder[] EntityToBuild | |||
{ | |||
get { return entityViewBuilders; } | |||
get { return EntityBuilders; } | |||
} | |||
static readonly IEntityViewBuilder[] entityViewBuilders; | |||
static readonly IEntityBuilder[] EntityBuilders; | |||
} | |||
public abstract class GenericEntityDescriptor<T, U, V, W> : IEntityDescriptor where T : IEntityStruct, new() | |||
@@ -55,15 +55,15 @@ | |||
{ | |||
static GenericEntityDescriptor() | |||
{ | |||
entityViewBuilders = new IEntityViewBuilder[] {new EntityViewBuilder<T>(), new EntityViewBuilder<U>(), new EntityViewBuilder<V>(), new EntityViewBuilder<W>()}; | |||
EntityBuilders = new IEntityBuilder[] {new EntityBuilder<T>(), new EntityBuilder<U>(), new EntityBuilder<V>(), new EntityBuilder<W>()}; | |||
} | |||
public IEntityViewBuilder[] entityViewsToBuild | |||
public IEntityBuilder[] EntityToBuild | |||
{ | |||
get { return entityViewBuilders; } | |||
get { return EntityBuilders; } | |||
} | |||
static readonly IEntityViewBuilder[] entityViewBuilders; | |||
static readonly IEntityBuilder[] EntityBuilders; | |||
} | |||
public abstract class GenericEntityDescriptor<T, U, V, W, X> : IEntityDescriptor where T : IEntityStruct, new() | |||
@@ -74,15 +74,15 @@ | |||
{ | |||
static GenericEntityDescriptor() | |||
{ | |||
entityViewBuilders = new IEntityViewBuilder[] {new EntityViewBuilder<T>(), new EntityViewBuilder<U>(), new EntityViewBuilder<V>(), new EntityViewBuilder<W>(), new EntityViewBuilder<X>()}; | |||
EntityBuilders = new IEntityBuilder[] {new EntityBuilder<T>(), new EntityBuilder<U>(), new EntityBuilder<V>(), new EntityBuilder<W>(), new EntityBuilder<X>()}; | |||
} | |||
public IEntityViewBuilder[] entityViewsToBuild | |||
public IEntityBuilder[] EntityToBuild | |||
{ | |||
get { return entityViewBuilders; } | |||
get { return EntityBuilders; } | |||
} | |||
static readonly IEntityViewBuilder[] entityViewBuilders; | |||
static readonly IEntityBuilder[] EntityBuilders; | |||
} | |||
public abstract class GenericEntityDescriptor<T, U, V, W, X, Y> : IEntityDescriptor where T : IEntityStruct, new() | |||
@@ -94,14 +94,14 @@ | |||
{ | |||
static GenericEntityDescriptor() | |||
{ | |||
entityViewBuilders = new IEntityViewBuilder[] {new EntityViewBuilder<T>(), new EntityViewBuilder<U>(), new EntityViewBuilder<V>(), new EntityViewBuilder<W>(), new EntityViewBuilder<X>(), new EntityViewBuilder<Y>()}; | |||
EntityBuilders = new IEntityBuilder[] {new EntityBuilder<T>(), new EntityBuilder<U>(), new EntityBuilder<V>(), new EntityBuilder<W>(), new EntityBuilder<X>(), new EntityBuilder<Y>()}; | |||
} | |||
public IEntityViewBuilder[] entityViewsToBuild | |||
public IEntityBuilder[] EntityToBuild | |||
{ | |||
get { return entityViewBuilders; } | |||
get { return EntityBuilders; } | |||
} | |||
static readonly IEntityViewBuilder[] entityViewBuilders; | |||
static readonly IEntityBuilder[] EntityBuilders; | |||
} | |||
} |
@@ -2,6 +2,6 @@ namespace Svelto.ECS | |||
{ | |||
public interface IEntityDescriptorHolder | |||
{ | |||
EntityDescriptorInfo<T> RetrieveDescriptorInfo<T>() where T : IEntityDescriptor, new(); | |||
IEntityBuilder[] GetEntitiesToBuild(); | |||
} | |||
} |
@@ -53,8 +53,8 @@ namespace Svelto.ECS | |||
/// <param name="entityDescriptor"></param> | |||
/// <param name="implementors"></param> | |||
/// | |||
EntityStructInitializer BuildEntity(int entityID, int groupID, IEntityViewBuilder[] entityViewsToBuild, object[] implementors); | |||
EntityStructInitializer BuildEntity(int entityID, IEntityViewBuilder[] entityViewsToBuild, object[] implementors); | |||
EntityStructInitializer BuildEntity(EGID egid, IEntityViewBuilder[] entityViewsToBuild, object[] implementors); | |||
EntityStructInitializer BuildEntity(int entityID, int groupID, IEntityBuilder[] entityToBuild, object[] implementors); | |||
EntityStructInitializer BuildEntity(int entityID, IEntityBuilder[] entityToBuild, object[] implementors); | |||
EntityStructInitializer BuildEntity(EGID egid, IEntityBuilder[] entityToBuild, object[] implementors); | |||
} | |||
} |
@@ -31,7 +31,7 @@ namespace Svelto.ECS | |||
{ | |||
public EGID ID { get; set; } | |||
public IEntityViewBuilder[] entityToBuild; | |||
public IEntityBuilder[] entityToBuild; | |||
} | |||
public static class EntityView<T> where T: IEntityStruct, new() | |||
@@ -3,7 +3,7 @@ using Svelto.ECS.Internal; | |||
namespace Svelto.ECS | |||
{ | |||
public interface IEntityViewBuilder | |||
public interface IEntityBuilder | |||
{ | |||
void BuildEntityViewAndAddToList(ref ITypeSafeDictionary dictionary, EGID entityID, object[] implementors); | |||
ITypeSafeDictionary Preallocate(ref ITypeSafeDictionary dictionary, int size); | |||