您最多选择25个主题 主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

84 行
2.4 KiB

#if ENABLE_EDITOR_GAME_SERVICES
using System.Collections.Generic;
using System.Linq;
using UnityEditor;
using UnityEngine;
namespace Unity.Services.Core.Editor.ActivationPopup
{
class ServiceActivationPopupWindow : EditorWindow
{
static readonly Vector2 k_PopupSize = new Vector2(600, 400);
const string k_WindowTitle = "Service Activation";
ServiceActivationPopupVisual m_PopupVisual;
///<remarks>required to recover from domain reloads</remarks>
[SerializeField] List<string> m_ServiceTypeNames;
public static void CreateAndShowPopup(IEnumerable<IEditorGameService> services)
{
var popupWindow = GetWindow<ServiceActivationPopupWindow>(true, k_WindowTitle);
popupWindow.Initialize(services);
}
void Initialize(IEnumerable<IEditorGameService> services)
{
m_PopupVisual?.Dispose();
m_ServiceTypeNames = GetServiceTypeNames(services);
m_PopupVisual = new ServiceActivationPopupVisual();
m_PopupVisual.Init(rootVisualElement, services);
m_PopupVisual.Done += DisposeAndClose;
maxSize = minSize = k_PopupSize;
}
static List<string> GetServiceTypeNames(IEnumerable<IEditorGameService> services)
{
var output = new List<string>();
foreach (var editorGameService in services)
{
output.Add(editorGameService.GetType().FullName);
}
return output;
}
void DisposeAndClose()
{
m_PopupVisual?.Dispose();
Close();
}
void Update()
{
if (RequiresInitialization())
{
Initialize(GetEditorGameServicesFromNames(m_ServiceTypeNames));
}
}
static IEnumerable<IEditorGameService> GetEditorGameServicesFromNames(IEnumerable<string> editorGameServiceTypeNames)
{
var output = new HashSet<IEditorGameService>();
foreach (var kvp in EditorGameServiceRegistry.Instance.Services)
{
if (editorGameServiceTypeNames.Contains(kvp.Value.GetType().FullName))
{
output.Add(kvp.Value);
}
}
return output;
}
bool RequiresInitialization()
{
return m_PopupVisual == null;
}
}
}
#endif