using System;
using System.Collections.Generic;
using UnityEditor;
using UnityEditor.SearchService;
class BaseEngine : ISearchEngineBase
{
public virtual void BeginSession(ISearchContext context)
{
if (context.engineScope == ObjectSelectorSearch.EngineScope || context.engineScope == ProjectSearch.EngineScope)
{
// Cache Assets.
}
if (context.engineScope == ObjectSelectorSearch.EngineScope || context.engineScope == SceneSearch.EngineScope)
{
// Cache Scene objects.
}
}
public virtual void EndSession(ISearchContext context)
{
// Flush any cached data.
}
public virtual void BeginSearch(ISearchContext context, string query)
{
}
public virtual void EndSearch(ISearchContext context)
{
}
public string name => "My Engine Service";
}
[SceneSearchEngine]
class SampleSceneFilterEngine : BaseEngine, ISceneSearchEngineV2
{
public bool Filter(ISearchContext context, string query, HierarchyIterator objectToFilter)
{
// Use cached Scene objects.
// ...
return true;
}
}
[ProjectSearchEngine]
class SampleProjectSearchEngine : BaseEngine, IProjectSearchEngine
{
public IEnumerable<string> Search(ISearchContext context, string query, Action<IEnumerable<string>> asyncItemsReceived)
{
// Use cached Assets.
// ...
return new List<string>();
}
}
[ObjectSelectorEngine]
class SampleObjectSelectorEngine : BaseEngine, IObjectSelectorEngine
{
public bool SelectObject(ISearchContext context, Action<UnityEngine.Object, bool> onObjectSelectorClosed, Action<UnityEngine.Object> onObjectSelectedUpdated)
{
// Use cached Assets and Scene objects.
return true;
}
public void SetSearchFilter(ISearchContext context, string searchFilter)
{}
}