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.

EntityViewBuilder.cs 2.4KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  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. ITypeSafeList Preallocate(ref ITypeSafeList list, int size);
  9. Type GetEntityViewType();
  10. }
  11. public class EntityViewBuilder<EntityViewType> : IEntityViewBuilder where EntityViewType : EntityView<EntityViewType>, new()
  12. {
  13. public IEntityView BuildEntityViewAndAddToList(ref ITypeSafeList list, int entityID)
  14. {
  15. if (list == null)
  16. list = new TypeSafeFasterListForECSForClasses<EntityViewType>();
  17. var castedList = list as TypeSafeFasterListForECSForClasses<EntityViewType>;
  18. var entityView = EntityView<EntityViewType>.BuildEntityView<EntityViewType>(entityID);
  19. castedList.Add(entityView);
  20. return entityView;
  21. }
  22. public ITypeSafeList Preallocate(ref ITypeSafeList list, int size)
  23. {
  24. if (list == null)
  25. list = new TypeSafeFasterListForECSForClasses<EntityViewType>(size);
  26. else
  27. list.ReserveCapacity(size);
  28. return list;
  29. }
  30. public Type GetEntityViewType()
  31. {
  32. return _entityViewType;
  33. }
  34. readonly Type _entityViewType = typeof(EntityViewType);
  35. }
  36. public class EntityStructBuilder<EntityViewType> : IEntityViewBuilder where EntityViewType : struct, IEntityStruct
  37. {
  38. public IEntityView BuildEntityViewAndAddToList(ref ITypeSafeList list, int entityID)
  39. {
  40. var entityView = default(EntityViewType);
  41. entityView.ID = entityID;
  42. if (list == null)
  43. list = new TypeSafeFasterListForECSForStructs<EntityViewType>();
  44. var castedList = list as TypeSafeFasterListForECSForStructs<EntityViewType>;
  45. castedList.Add(entityView);
  46. return null;
  47. }
  48. public ITypeSafeList Preallocate(ref ITypeSafeList list, int size)
  49. {
  50. if (list == null)
  51. list = new TypeSafeFasterListForECSForStructs<EntityViewType>(size);
  52. else
  53. list.ReserveCapacity(size);
  54. return list;
  55. }
  56. public Type GetEntityViewType()
  57. {
  58. return _entityViewType;
  59. }
  60. readonly Type _entityViewType = typeof(EntityViewType);
  61. }
  62. }