45 lines
1.4 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|