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.

MultiNodesEngine.cs 2.7KB

7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. using Svelto.DataStructures;
  2. using Svelto.ECS.Internal;
  3. namespace Svelto.ECS.Internal
  4. {
  5. public abstract class MultiNodesEngine<T> where T:class
  6. {
  7. protected abstract void AddNode(T node);
  8. protected abstract void RemoveNode(T node);
  9. }
  10. }
  11. namespace Svelto.ECS
  12. {
  13. public abstract class MultiNodesEngine : INodesEngine
  14. {
  15. public abstract System.Type[] AcceptedNodes();
  16. public abstract void Add(ITypeSafeList nodeWrapper);
  17. public abstract void Remove(ITypeSafeList nodeWrapper);
  18. }
  19. public abstract class MultiNodesEngine<T, U> : MultiNodesEngine<T>,
  20. INodeEngine where T:class where U:class
  21. {
  22. protected abstract void AddNode(U node);
  23. protected abstract void RemoveNode(U node);
  24. public virtual void Add(ITypeSafeList nodes)
  25. {
  26. if (nodes is FasterList<U>)
  27. {
  28. var strongTypeNodes = (FasterList<U>)nodes;
  29. for (int i = 0; i < strongTypeNodes.Count; i++)
  30. {
  31. AddNode(strongTypeNodes[i]);
  32. }
  33. }
  34. else
  35. if (nodes is FasterList<T>)
  36. {
  37. var strongTypeNodes = (FasterList<T>)nodes;
  38. for (int i = 0; i < strongTypeNodes.Count; i++)
  39. {
  40. AddNode(strongTypeNodes[i]);
  41. }
  42. }
  43. }
  44. public virtual void Remove(ITypeSafeList nodeWrapper)
  45. {
  46. /* if (nodeWrapper is NodeWrapper<T>)
  47. {
  48. T node;
  49. nodeWrapper.GetNode<T>(out node);
  50. RemoveNode(ref node);
  51. }
  52. else
  53. {
  54. U node;
  55. nodeWrapper.GetNode<U>(out node);
  56. RemoveNode(ref node);
  57. }*/
  58. }
  59. }
  60. public abstract class MultiNodesEngine<T, U, V> : MultiNodesEngine<T, U> where T: class where U : class
  61. {
  62. protected abstract void AddNode(V node);
  63. protected abstract void RemoveNode(V node);
  64. public override void Add(ITypeSafeList nodes)
  65. {
  66. if (nodes is FasterList<V>)
  67. {
  68. var strongTypeNodes = (FasterList<V>)nodes;
  69. for (int i = 0; i < strongTypeNodes.Count; i++)
  70. {
  71. AddNode(strongTypeNodes[i]);
  72. }
  73. }
  74. else
  75. base.Add(nodes);
  76. }
  77. public override void Remove(ITypeSafeList nodeWrapper)
  78. {
  79. /* if (nodeWrapper is V)
  80. {
  81. V node;
  82. nodeWrapper.GetNode<V>(out node);
  83. RemoveNode(ref node);
  84. }
  85. else
  86. base.Remove(nodeWrapper);*/
  87. }
  88. }
  89. }