NamedEntityCollection.cs 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. #if UNITY_EDITOR
  2. using UnityEngine;
  3. using System;
  4. using System.Linq;
  5. using System.Collections.Generic;
  6. namespace O3DWB
  7. {
  8. [Serializable]
  9. public class NamedEntityCollection<EntityType> where EntityType : class, INamedEntity
  10. {
  11. #region Protected Variables
  12. [SerializeField]
  13. protected List<EntityType> _namedEntities = new List<EntityType>();
  14. #endregion
  15. #region Public Properties
  16. public bool IsEmpty { get { return NumberOfEntities == 0; } }
  17. public int NumberOfEntities { get { return _namedEntities.Count; } }
  18. #endregion
  19. #region Public Methods
  20. public bool ContainsEntity(EntityType namedEntity)
  21. {
  22. return _namedEntities.Contains(namedEntity);
  23. }
  24. public bool ContainsEntityWithName(string entityName)
  25. {
  26. List<EntityType> entitiesWithSameName = _namedEntities.FindAll(item => item.Name == entityName);
  27. return entitiesWithSameName != null && entitiesWithSameName.Count > 0;
  28. }
  29. public bool ContainsEntityByPredicate(Predicate<EntityType> predicate)
  30. {
  31. List<EntityType> foundEntities = GetEntitiesByPredicate(predicate);
  32. return foundEntities.Count != 0;
  33. }
  34. public void AddEntity(EntityType namedEntity)
  35. {
  36. if (CanEntityBeAddedToCollection(namedEntity)) _namedEntities.Add(namedEntity);
  37. }
  38. public virtual void RemoveEntity(EntityType namedEntity)
  39. {
  40. _namedEntities.Remove(namedEntity);
  41. }
  42. public virtual void RemoveEntityAtIndex(int indexOfEntityToRemove)
  43. {
  44. _namedEntities.RemoveAt(indexOfEntityToRemove);
  45. }
  46. public virtual void RemoveAllEntities()
  47. {
  48. _namedEntities.Clear();
  49. }
  50. public void RemoveWithPredicate(Predicate<EntityType> predicate)
  51. {
  52. _namedEntities.RemoveAll(predicate);
  53. }
  54. public void RenameEntity(EntityType entity, string newName)
  55. {
  56. if(!string.IsNullOrEmpty(newName))
  57. {
  58. entity.Name = UniqueEntityNameGenerator.GenerateUniqueName(newName, GetAllEntityNames());
  59. }
  60. }
  61. public EntityType GetEntityByIndex(int index)
  62. {
  63. return _namedEntities[index];
  64. }
  65. public EntityType GetEntityByName(string name)
  66. {
  67. List<EntityType> entitiesWithName = _namedEntities.FindAll(item => item.Name == name);
  68. if (entitiesWithName.Count != 0) return entitiesWithName[0];
  69. return null;
  70. }
  71. public EntityType GetEntityByPredicate(Predicate<EntityType> predicate)
  72. {
  73. List<EntityType> entities = _namedEntities.FindAll(predicate);
  74. if (entities.Count != 0) return entities[0];
  75. return null;
  76. }
  77. public List<EntityType> GetEntitiesByPredicate(Predicate<EntityType> predicate)
  78. {
  79. return _namedEntities.FindAll(predicate);
  80. }
  81. public int GetEntityIndex(EntityType entity)
  82. {
  83. return _namedEntities.FindIndex(item => ReferenceEquals(item, entity));
  84. }
  85. public List<EntityType> GetAllEntities()
  86. {
  87. return new List<EntityType>(_namedEntities);
  88. }
  89. public void GetAllEntities(List<EntityType> entities)
  90. {
  91. entities.Clear();
  92. entities.AddRange(_namedEntities);
  93. }
  94. public List<string> GetAllEntityNames()
  95. {
  96. return (from entity in _namedEntities select entity.Name).ToList();
  97. }
  98. public void GetAllEntityNames(List<string> names)
  99. {
  100. names.Clear();
  101. foreach (var entity in _namedEntities)
  102. names.Add(entity.Name);
  103. }
  104. public void RemoveNullEntries()
  105. {
  106. _namedEntities.RemoveAll(item => EqualityComparer<EntityType>.Default.Equals(item, default(EntityType)));
  107. }
  108. #endregion
  109. #region Private Methods
  110. private bool CanEntityBeAddedToCollection(EntityType namedEntity)
  111. {
  112. return !ContainsEntity(namedEntity);
  113. }
  114. #endregion
  115. }
  116. }
  117. #endif