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.

43 lines
1.7KB

  1. namespace Svelto.ECS
  2. {
  3. public abstract class MultiEntitiesEngine<T, U> : SingleEntityEngine<T>, IHandleEntityStructEngine<U>
  4. where U : IEntityStruct where T : IEntityStruct
  5. {
  6. public void AddInternal(ref U entityView)
  7. { Add(ref entityView); }
  8. public void RemoveInternal(ref U entityView)
  9. { Remove(ref entityView); }
  10. protected abstract void Add(ref U entityView);
  11. protected abstract void Remove(ref U entityView);
  12. }
  13. public abstract class MultiEntitiesEngine<T, U, V> : MultiEntitiesEngine<T, U>, IHandleEntityStructEngine<V>
  14. where V : IEntityStruct where U : IEntityStruct where T : IEntityStruct
  15. {
  16. public void AddInternal(ref V entityView)
  17. { Add(ref entityView); }
  18. public void RemoveInternal(ref V entityView)
  19. { Remove(ref entityView); }
  20. protected abstract void Add(ref V entityView);
  21. protected abstract void Remove(ref V entityView);
  22. }
  23. /// <summary>
  24. /// Please do not add more MultiEntityViewsEngine
  25. /// if you use more than 4 nodes, your engine has
  26. /// already too many responsabilities.
  27. /// </summary>
  28. public abstract class MultiEntitiesEngine<T, U, V, W> : MultiEntitiesEngine<T, U, V>, IHandleEntityStructEngine<W>
  29. where W : IEntityStruct where V : IEntityStruct where U : IEntityStruct where T : IEntityStruct
  30. {
  31. public void AddInternal(ref W entityView)
  32. { Add(ref entityView); }
  33. public void RemoveInternal(ref W entityView)
  34. { Remove(ref entityView); }
  35. protected abstract void Add(ref W entityView);
  36. protected abstract void Remove(ref W entityView);
  37. }
  38. }