TH1/Unity/Assets/Scripts/TH1_Logic/AI/Kernel/AIKernelRegistry.cs

45 lines
1.4 KiB
C#

using System;
namespace Logic.AI
{
public static class AIKernelRegistry
{
private static Func<IAIKernel> _kernelFactory = () => new BehaviourTreeAIKernel();
public static AIKernelType CurrentKernelType { get; private set; } = AIKernelType.BehaviourTree;
public static int Version { get; private set; }
public static void Register(AIKernelType kernelType)
{
CurrentKernelType = kernelType;
_kernelFactory = kernelType switch
{
AIKernelType.Director => () => new DirectorAIKernel(),
_ => () => new BehaviourTreeAIKernel()
};
Version++;
}
public static void Register<TKernel>() where TKernel : IAIKernel, new()
{
CurrentKernelType = new TKernel().KernelType;
_kernelFactory = () => new TKernel();
Version++;
}
public static void Register(AIKernelType kernelType, Func<IAIKernel> factory)
{
CurrentKernelType = kernelType;
_kernelFactory = factory ?? throw new ArgumentNullException(nameof(factory));
Version++;
}
public static IAIKernel Create()
{
var kernel = _kernelFactory();
if (kernel == null) throw new InvalidOperationException("AI kernel factory returned null.");
return kernel;
}
}
}