123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
- #if UNITY_EDITOR
- using UnityEngine;
- using System;
- using System.Linq;
- using System.Collections.Generic;
- namespace O3DWB
- {
- [Serializable]
- public class NamedEntityCollection<EntityType> where EntityType : class, INamedEntity
- {
- #region Protected Variables
- [SerializeField]
- protected List<EntityType> _namedEntities = new List<EntityType>();
- #endregion
- #region Public Properties
- public bool IsEmpty { get { return NumberOfEntities == 0; } }
- public int NumberOfEntities { get { return _namedEntities.Count; } }
- #endregion
- #region Public Methods
- public bool ContainsEntity(EntityType namedEntity)
- {
- return _namedEntities.Contains(namedEntity);
- }
- public bool ContainsEntityWithName(string entityName)
- {
- List<EntityType> entitiesWithSameName = _namedEntities.FindAll(item => item.Name == entityName);
- return entitiesWithSameName != null && entitiesWithSameName.Count > 0;
- }
- public bool ContainsEntityByPredicate(Predicate<EntityType> predicate)
- {
- List<EntityType> foundEntities = GetEntitiesByPredicate(predicate);
- return foundEntities.Count != 0;
- }
- public void AddEntity(EntityType namedEntity)
- {
- if (CanEntityBeAddedToCollection(namedEntity)) _namedEntities.Add(namedEntity);
- }
- public virtual void RemoveEntity(EntityType namedEntity)
- {
- _namedEntities.Remove(namedEntity);
- }
- public virtual void RemoveEntityAtIndex(int indexOfEntityToRemove)
- {
- _namedEntities.RemoveAt(indexOfEntityToRemove);
- }
- public virtual void RemoveAllEntities()
- {
- _namedEntities.Clear();
- }
- public void RemoveWithPredicate(Predicate<EntityType> predicate)
- {
- _namedEntities.RemoveAll(predicate);
- }
- public void RenameEntity(EntityType entity, string newName)
- {
- if(!string.IsNullOrEmpty(newName))
- {
- entity.Name = UniqueEntityNameGenerator.GenerateUniqueName(newName, GetAllEntityNames());
- }
- }
- public EntityType GetEntityByIndex(int index)
- {
- return _namedEntities[index];
- }
- public EntityType GetEntityByName(string name)
- {
- List<EntityType> entitiesWithName = _namedEntities.FindAll(item => item.Name == name);
- if (entitiesWithName.Count != 0) return entitiesWithName[0];
- return null;
- }
- public EntityType GetEntityByPredicate(Predicate<EntityType> predicate)
- {
- List<EntityType> entities = _namedEntities.FindAll(predicate);
- if (entities.Count != 0) return entities[0];
- return null;
- }
- public List<EntityType> GetEntitiesByPredicate(Predicate<EntityType> predicate)
- {
- return _namedEntities.FindAll(predicate);
- }
- public int GetEntityIndex(EntityType entity)
- {
- return _namedEntities.FindIndex(item => ReferenceEquals(item, entity));
- }
- public List<EntityType> GetAllEntities()
- {
- return new List<EntityType>(_namedEntities);
- }
- public void GetAllEntities(List<EntityType> entities)
- {
- entities.Clear();
- entities.AddRange(_namedEntities);
- }
- public List<string> GetAllEntityNames()
- {
- return (from entity in _namedEntities select entity.Name).ToList();
- }
- public void GetAllEntityNames(List<string> names)
- {
- names.Clear();
- foreach (var entity in _namedEntities)
- names.Add(entity.Name);
- }
- public void RemoveNullEntries()
- {
- _namedEntities.RemoveAll(item => EqualityComparer<EntityType>.Default.Equals(item, default(EntityType)));
- }
- #endregion
- #region Private Methods
- private bool CanEntityBeAddedToCollection(EntityType namedEntity)
- {
- return !ContainsEntity(namedEntity);
- }
- #endregion
- }
- }
- #endif
|