JacobTech 448e0f670f Bugs & Features.
Mainly bug fixes with a few new shaders and controls.
2023-08-21 10:57:06 -04:00

58 lines
1.6 KiB
C#

using GraphicsManager.Interfaces;
namespace GraphicsManager.Objects.Core;
public class ControlList
{
internal List<IRenderObject> _internal = new();
private bool Clearing = false;
public IRenderObject this[int Index] => _internal[Index];
public IRenderObject this[uint Index] => _internal[(int)Index];
public IEnumerable<IRenderObject> Where(Func<IRenderObject, bool> func) => _internal.Where(func);
public bool Contains(IRenderObject Control) => _internal.Contains(Control);
public int IndexOf(IRenderObject Control) => _internal.IndexOf(Control);
public int Length => _internal.Count;
internal event Func<IRenderObject, Task>? ControlAdded;
internal event Func<Task>? ControlRemoved;
public void Remove(IRenderObject item, bool purge = true)
{
_internal.Remove(item);
if (purge)
{
item.Clean();
item = null!;
}
GC.Collect();
if (ControlRemoved is not null && !Clearing) _ = ControlRemoved.Invoke();
}
public void Add(IRenderObject item)
{
if (ControlAdded is not null) ControlAdded.Invoke(item).Wait();
_internal.Add(item);
}
public void Clear(bool purge = true)
{
Clearing = true;
for (int i = 0; i< _internal.Count; i++)
{
if (purge)
{
_internal[i].Clean();
_internal[i] = null!;
}
}
_internal.Clear();
GC.Collect();
Clearing = false;
if (ControlRemoved is not null) _ = ControlRemoved.Invoke();
}
}