namespace SpriteCompiler.AI
{
using Adapters;
using System.Collections.Generic;
public class BestFirstSearch : ISearch
where T : ISearchNode
where C : IPathCost
{
protected readonly AbstractAISearch search;
protected readonly IQueue fringe;
public BestFirstSearch(AbstractAISearch search, IQueue fringe)
{
this.search = search;
this.fringe = fringe;
}
public BestFirstSearch(AbstractAISearch search)
{
this.search = search;
this.fringe = new QueueAdapter();
}
public IEnumerable Search(ISearchProblem problem, S initialState)
{
fringe.Clear();
return search.Search(problem, fringe, initialState);
}
public IEnumerable ExtendSearch(ISearchProblem problem)
{
return search.ExtendSearch(problem, fringe);
}
public void InitializeSearch(S initialState)
{
search.InitializeSearch(fringe, initialState);
}
public ISearchStepInfo SearchStep(ISearchProblem problem)
{
return search.SearchStep(problem, fringe);
}
}
}