refactor: organized extension methods

This commit is contained in:
2025-05-25 12:05:02 +03:00
parent 3e02ee7b6f
commit 6a750f8ce0
2 changed files with 38 additions and 39 deletions

View File

@@ -14,6 +14,7 @@ public static class UniverseObjectExtensions
return universeObject;
}
#region Universe Object Search
public static T? GetUniverseObject<T>(this IEnumerable<IUniverseObject> universeObjects) where T : class
{
foreach (IUniverseObject universeObject in universeObjects)
@@ -23,17 +24,49 @@ public static class UniverseObjectExtensions
return default;
}
public static bool TryGetUniverseObject<T>(this IEnumerable<IUniverseObject> universeObjects, [NotNullWhen(returnValue: true)] out T? behaviour) where T : class
public static bool TryGetUniverseObject<T>(this IEnumerable<IUniverseObject> universeObjects, [NotNullWhen(returnValue: true)] out T? universeObject) where T : class
{
behaviour = GetUniverseObject<T>(universeObjects);
universeObject = GetUniverseObject<T>(universeObjects);
return universeObject is not null;
}
public static void GetUniverseObjects<T>(this IEnumerable<IUniverseObject> universeObjects, IList<T> foundUniverseObjects) where T : class
{
foundUniverseObjects.Clear();
foreach (IUniverseObject universeObject in universeObjects)
if (universeObject is T @object)
foundUniverseObjects.Add(@object);
}
#endregion
#region Behaviour Search
public static T? FindBehaviour<T>(this IEnumerable<IUniverseObject> universeObjects) where T : class
{
foreach (IUniverseObject universeObject in universeObjects)
if (universeObject.BehaviourController.GetBehaviour<T>() is T behaviour)
return behaviour;
return default;
}
public static bool TryFindBehaviour<T>(this IEnumerable<IUniverseObject> universeObjects, [NotNullWhen(returnValue: true)] out T? behaviour) where T : class
{
behaviour = FindBehaviour<T>(universeObjects);
return behaviour is not null;
}
public static void GetUniverseObjects<T>(this IEnumerable<IUniverseObject> universeObjects, IList<T> behaviours) where T : class
public static void FindBehaviours<T>(this IEnumerable<IUniverseObject> universeObjects, IList<T> behaviours) where T : class
{
behaviours.Clear();
List<T> cache = [];
foreach (IUniverseObject universeObject in universeObjects)
if (universeObject is T @object)
behaviours.Add(@object);
{
universeObject.BehaviourController.GetBehaviours(cache);
foreach (T behaviour in cache)
behaviours.Add(behaviour);
}
}
#endregion
}