39 lines
804 B
C#
39 lines
804 B
C#
|
using System.Collections.Generic;
|
||
|
using UnityEngine;
|
||
|
|
||
|
namespace RoR2;
|
||
|
|
||
|
public static class GetComponentsCache<T>
|
||
|
{
|
||
|
private static readonly Stack<List<T>> buffers = new Stack<List<T>>();
|
||
|
|
||
|
public static void ReturnBuffer(List<T> buffer)
|
||
|
{
|
||
|
buffer.Clear();
|
||
|
buffers.Push(buffer);
|
||
|
}
|
||
|
|
||
|
private static List<T> RequestBuffer()
|
||
|
{
|
||
|
if (buffers.Count == 0)
|
||
|
{
|
||
|
return new List<T>();
|
||
|
}
|
||
|
return buffers.Pop();
|
||
|
}
|
||
|
|
||
|
public static List<T> GetGameObjectComponents(GameObject gameObject)
|
||
|
{
|
||
|
List<T> list = RequestBuffer();
|
||
|
gameObject.GetComponents(list);
|
||
|
return list;
|
||
|
}
|
||
|
|
||
|
public static List<T> GetGameObjectComponentsInChildren(GameObject gameObject, bool includeInactive = false)
|
||
|
{
|
||
|
List<T> list = RequestBuffer();
|
||
|
gameObject.GetComponentsInChildren(includeInactive, list);
|
||
|
return list;
|
||
|
}
|
||
|
}
|