Entity.cs 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. using System;
  2. using System.Collections.Specialized;
  3. namespace MonoGame.Extended.ECS
  4. {
  5. public class Entity : IEquatable<Entity>
  6. {
  7. private readonly EntityManager _entityManager;
  8. private readonly ComponentManager _componentManager;
  9. internal Entity(int id, EntityManager entityManager, ComponentManager componentManager)
  10. {
  11. Id = id;
  12. _entityManager = entityManager;
  13. _componentManager = componentManager;
  14. }
  15. public int Id { get; }
  16. public BitVector32 ComponentBits => _entityManager.GetComponentBits(Id);
  17. public void Attach<T>(T component)
  18. where T : class
  19. {
  20. var mapper = _componentManager.GetMapper<T>();
  21. mapper.Put(Id, component);
  22. }
  23. public void Detach<T>()
  24. where T : class
  25. {
  26. var mapper = _componentManager.GetMapper<T>();
  27. mapper.Delete(Id);
  28. }
  29. public T Get<T>()
  30. where T : class
  31. {
  32. var mapper = _componentManager.GetMapper<T>();
  33. return mapper.Get(Id);
  34. }
  35. public bool Has<T>()
  36. where T : class
  37. {
  38. return _componentManager.GetMapper<T>().Has(Id);
  39. }
  40. public void Destroy()
  41. {
  42. _entityManager.Destroy(Id);
  43. }
  44. public bool Equals(Entity other)
  45. {
  46. if (ReferenceEquals(null, other)) return false;
  47. if (ReferenceEquals(this, other)) return true;
  48. return Id == other.Id;
  49. }
  50. public override bool Equals(object obj)
  51. {
  52. if (ReferenceEquals(null, obj)) return false;
  53. if (ReferenceEquals(this, obj)) return true;
  54. if (obj.GetType() != GetType()) return false;
  55. return Equals((Entity) obj);
  56. }
  57. public override int GetHashCode()
  58. {
  59. // ReSharper disable once NonReadonlyMemberInGetHashCode
  60. return Id;
  61. }
  62. public static bool operator ==(Entity left, Entity right)
  63. {
  64. return Equals(left, right);
  65. }
  66. public static bool operator !=(Entity left, Entity right)
  67. {
  68. return !Equals(left, right);
  69. }
  70. }
  71. }