Browse Source

Reworking the IEntityDescriptorHolder to avoid confusion

tags/Rel25b
sebas77 6 years ago
parent
commit
a2a0851eeb
12 changed files with 82 additions and 82 deletions
  1. +7
    -7
      Svelto.ECS/EnginesRoot.Entities.cs
  2. +6
    -6
      Svelto.ECS/EnginesRoot.GenericEntityFactory.cs
  3. +18
    -18
      Svelto.ECS/EntityDescriptor.cs
  4. +10
    -10
      Svelto.ECS/EntityFactory.cs
  5. +4
    -4
      Svelto.ECS/EntityViewBuilder.cs
  6. +5
    -5
      Svelto.ECS/EntityViewUtility.cs
  7. +2
    -2
      Svelto.ECS/Extensions/Unity/GenericEntityDescriptorHolder.cs
  8. +24
    -24
      Svelto.ECS/GenericEntityDescriptor.cs
  9. +1
    -1
      Svelto.ECS/IEntityDescriptorHolder.cs
  10. +3
    -3
      Svelto.ECS/IEntityFactory.cs
  11. +1
    -1
      Svelto.ECS/IEntityView.cs
  12. +1
    -1
      Svelto.ECS/IEntityViewBuilder.cs

+ 7
- 7
Svelto.ECS/EnginesRoot.Entities.cs View File

@@ -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)


+ 6
- 6
Svelto.ECS/EnginesRoot.GenericEntityFactory.cs View File

@@ -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()


+ 18
- 18
Svelto.ECS/EntityDescriptor.cs View File

@@ -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; }
}
}

+ 10
- 10
Svelto.ECS/EntityFactory.cs View File

@@ -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);
}
}

+ 4
- 4
Svelto.ECS/EntityViewBuilder.cs View File

@@ -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);
}


+ 5
- 5
Svelto.ECS/EntityViewUtility.cs View File

@@ -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);


+ 2
- 2
Svelto.ECS/Extensions/Unity/GenericEntityDescriptorHolder.cs View File

@@ -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;
}
}
}

+ 24
- 24
Svelto.ECS/GenericEntityDescriptor.cs View File

@@ -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;
}
}

+ 1
- 1
Svelto.ECS/IEntityDescriptorHolder.cs View File

@@ -2,6 +2,6 @@ namespace Svelto.ECS
{
public interface IEntityDescriptorHolder
{
EntityDescriptorInfo<T> RetrieveDescriptorInfo<T>() where T : IEntityDescriptor, new();
IEntityBuilder[] GetEntitiesToBuild();
}
}

+ 3
- 3
Svelto.ECS/IEntityFactory.cs View File

@@ -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);
}
}

+ 1
- 1
Svelto.ECS/IEntityView.cs View File

@@ -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()


+ 1
- 1
Svelto.ECS/IEntityViewBuilder.cs View File

@@ -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);


Loading…
Cancel
Save