Mirror of Svelto.ECS because we're a fan of it
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.

61 lines
1.8KB

  1. using System;
  2. using Svelto.ECS.Internal;
  3. namespace Svelto.ECS
  4. {
  5. public interface IEntityViewBuilder
  6. {
  7. IEntityView BuildEntityViewAndAddToList(ref ITypeSafeList list, int entityID);
  8. Type GetEntityViewType();
  9. }
  10. public class EntityViewBuilder<EntityViewType> : IEntityViewBuilder where EntityViewType : EntityView<EntityViewType>, new()
  11. {
  12. public IEntityView BuildEntityViewAndAddToList(ref ITypeSafeList list, int entityID)
  13. {
  14. if (list == null)
  15. list = new TypeSafeFasterListForECSForClasses<EntityViewType>();
  16. var castedList = list as TypeSafeFasterListForECSForClasses<EntityViewType>;
  17. var entityView = EntityView<EntityViewType>.BuildEntityView<EntityViewType>(entityID);
  18. castedList.Add(entityView);
  19. return entityView;
  20. }
  21. public Type GetEntityViewType()
  22. {
  23. return _entityViewType;
  24. }
  25. readonly Type _entityViewType = typeof(EntityViewType);
  26. }
  27. public class EntityStructBuilder<EntityViewType> : IEntityViewBuilder where EntityViewType : struct, IEntityStruct
  28. {
  29. public IEntityView BuildEntityViewAndAddToList(ref ITypeSafeList list, int entityID)
  30. {
  31. var entityView = default(EntityViewType);
  32. entityView.ID = entityID;
  33. if (list == null)
  34. list = new TypeSafeFasterListForECSForStructs<EntityViewType>();
  35. var castedList = list as TypeSafeFasterListForECSForStructs<EntityViewType>;
  36. castedList.Add(entityView);
  37. return null;
  38. }
  39. public Type GetEntityViewType()
  40. {
  41. return _entityViewType;
  42. }
  43. readonly Type _entityViewType = typeof(EntityViewType);
  44. }
  45. }