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.

66 lines
1.7KB

  1. using UnityEngine;
  2. namespace Svelto.ES
  3. {
  4. public class UnityEnginesRoot : INodeEnginesRoot
  5. {
  6. public void AddEngine(IEngine engine)
  7. {
  8. _engineRoot.AddEngine(engine);
  9. }
  10. public void Add(INode node)
  11. {
  12. _engineRoot.Add(node);
  13. }
  14. public void Remove(INode node)
  15. {
  16. _engineRoot.Remove(node);
  17. }
  18. public void AddGameObjectEntity(GameObject entity)
  19. {
  20. #if UNITY_5_0
  21. INodeHolder[] nodeHolders = entity.GetComponents<INodeHolder>();
  22. for (int i = 0; i < nodeHolders.Length; i++)
  23. nodeHolders[i].engineRoot = this;
  24. #else
  25. MonoBehaviour[] nodeHolders = entity.GetComponents<MonoBehaviour>();
  26. for (int i = 0; i < nodeHolders.Length; i++)
  27. {
  28. var nodeHolder = nodeHolders[i];
  29. if (nodeHolder is INodeHolder)
  30. (nodeHolders[i] as INodeHolder).engineRoot = this;
  31. }
  32. #endif
  33. }
  34. public void RemoveGameObjectEntity(GameObject entity)
  35. {
  36. #if UNITY_5_0
  37. INodeHolder[] nodeHolders = entity.GetComponents<INodeHolder>();
  38. for (int i = 0; i < nodeHolders.Length; i++)
  39. Remove(nodeHolders[i].node);
  40. #else
  41. MonoBehaviour[] nodeHolders = entity.GetComponents<MonoBehaviour>();
  42. for (int i = 0; i < nodeHolders.Length; i++)
  43. {
  44. var nodeHolder = nodeHolders[i];
  45. if (nodeHolder is INodeHolder)
  46. Remove((nodeHolder as INodeHolder).node);
  47. }
  48. #endif
  49. }
  50. EnginesRoot _engineRoot = new EnginesRoot();
  51. }
  52. }