fgm24/Assets/Scripts/PathFinding/NavMeshComponents/Scripts/NavMeshExtensionsProvider.cs

58 lines
1.7 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
namespace NavMeshPlus.Extensions
{
public interface INavMeshExtensionsProvider
{
int Count { get; }
NavMeshExtension this[int index] { get; }
void Add(NavMeshExtension extension, int order);
void Remove(NavMeshExtension extension);
}
internal class NavMeshExtensionMeta
{
public int order;
public NavMeshExtensionMeta(int order, NavMeshExtension extension)
{
this.order = order;
this.extension = extension;
}
public NavMeshExtension extension;
}
internal class NavMeshExtensionsProvider : INavMeshExtensionsProvider
{
List<NavMeshExtensionMeta> _extensions = new List<NavMeshExtensionMeta>();
static Comparer<NavMeshExtensionMeta> Comparer = Comparer<NavMeshExtensionMeta>.Create((x, y) => x.order > y.order ? 1 : x.order < y.order ? -1 : 0);
public NavMeshExtension this[int index] => _extensions[index].extension;
public int Count => _extensions.Count;
public void Add(NavMeshExtension extension, int order)
{
var meta = new NavMeshExtensionMeta(order, extension);
var at = _extensions.BinarySearch(meta, Comparer);
if (at < 0)
{
_extensions.Add(meta);
_extensions.Sort(Comparer);
}
else
{
_extensions.Insert(at, meta);
}
}
public void Remove(NavMeshExtension extension)
{
_extensions.RemoveAll(x => x.extension = extension);
}
}
}