From acea7b2e728787a0d83bbf83c8c1f042d2c32e7e Mon Sep 17 00:00:00 2001 From: chai <215380520@qq.com> Date: Mon, 3 Jun 2024 10:15:45 +0800 Subject: + plugins project --- .../source/MonoGame.Extended.Entities/Entity.cs | 87 ++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 Plugins/MonoGame.Extended/source/MonoGame.Extended.Entities/Entity.cs (limited to 'Plugins/MonoGame.Extended/source/MonoGame.Extended.Entities/Entity.cs') diff --git a/Plugins/MonoGame.Extended/source/MonoGame.Extended.Entities/Entity.cs b/Plugins/MonoGame.Extended/source/MonoGame.Extended.Entities/Entity.cs new file mode 100644 index 0000000..a56ccff --- /dev/null +++ b/Plugins/MonoGame.Extended/source/MonoGame.Extended.Entities/Entity.cs @@ -0,0 +1,87 @@ +using System; +using System.Collections.Specialized; + +namespace MonoGame.Extended.Entities +{ + public class Entity : IEquatable + { + private readonly EntityManager _entityManager; + private readonly ComponentManager _componentManager; + + internal Entity(int id, EntityManager entityManager, ComponentManager componentManager) + { + Id = id; + + _entityManager = entityManager; + _componentManager = componentManager; + } + + public int Id { get; } + + public BitVector32 ComponentBits => _entityManager.GetComponentBits(Id); + + public void Attach(T component) + where T : class + { + var mapper = _componentManager.GetMapper(); + mapper.Put(Id, component); + } + + public void Detach() + where T : class + { + var mapper = _componentManager.GetMapper(); + mapper.Delete(Id); + } + + public T Get() + where T : class + { + var mapper = _componentManager.GetMapper(); + return mapper.Get(Id); + } + + + public bool Has() + where T : class + { + return _componentManager.GetMapper().Has(Id); + } + + public void Destroy() + { + _entityManager.Destroy(Id); + } + + public bool Equals(Entity other) + { + if (ReferenceEquals(null, other)) return false; + if (ReferenceEquals(this, other)) return true; + return Id == other.Id; + } + + public override bool Equals(object obj) + { + if (ReferenceEquals(null, obj)) return false; + if (ReferenceEquals(this, obj)) return true; + if (obj.GetType() != GetType()) return false; + return Equals((Entity) obj); + } + + public override int GetHashCode() + { + // ReSharper disable once NonReadonlyMemberInGetHashCode + return Id; + } + + public static bool operator ==(Entity left, Entity right) + { + return Equals(left, right); + } + + public static bool operator !=(Entity left, Entity right) + { + return !Equals(left, right); + } + } +} \ No newline at end of file -- cgit v1.1-26-g67d0