using System;
using UnityEditor.AddressableAssets.HostingServices;
using UnityEditor.AddressableAssets.Settings;
using UnityEngine;
namespace UnityEditor.AddressableAssets.GUI
{
class HostingServicesAddServiceWindow : EditorWindow
{
MonoScript m_Script;
string m_HostingName;
bool m_UseCustomScript;
AddressableAssetSettings m_Settings;
Type[] m_ServiceTypes;
string[] m_ServiceTypeNames;
int m_ServiceTypeIndex;
private GUIContent m_HostingServiceScriptGUIContent = new GUIContent("Hosting Service Script", "Script representing the custom service");
private GUIContent m_ServiceNameGUIContent = new GUIContent("Service Name", "Name of the custom service");
private GUIContent m_AddServiceGUIContent = new GUIContent("Add", "Add the custom service");
///
/// Initialize the dialog for the given
///
///
public void Initialize(AddressableAssetSettings settings)
{
m_Settings = settings;
m_HostingName = string.Format("My Hosting Service {0}(Custom)", m_Settings.HostingServicesManager.NextInstanceId);
}
void OnGUI()
{
if (m_Settings == null) return;
EditorGUILayout.HelpBox("Select a script that implements the IHostingService interface.", MessageType.Info);
var script =
EditorGUILayout.ObjectField(m_HostingServiceScriptGUIContent, m_Script, typeof(MonoScript), false) as MonoScript;
if (script != m_Script && script != null)
{
var scriptType = script.GetClass();
if (scriptType == null)
{
EditorUtility.DisplayDialog("Error", "Unable to find a valid type from the specified script.", "Ok");
m_Script = null;
}
else if (scriptType.IsAbstract)
{
EditorUtility.DisplayDialog("Error", "Script cannot be an Abstract class", "Ok");
m_Script = null;
}
else if (!typeof(IHostingService).IsAssignableFrom(scriptType))
{
EditorUtility.DisplayDialog("Error", "Selected script does not implement the IHostingService interface", "Ok");
m_Script = null;
}
else
{
m_Script = script;
}
}
m_HostingName = EditorGUILayout.TextField(m_ServiceNameGUIContent, m_HostingName);
EditorGUILayout.BeginHorizontal();
{
GUILayout.FlexibleSpace();
using (new EditorGUI.DisabledGroupScope(m_Script == null))
{
if (GUILayout.Button(m_AddServiceGUIContent, GUILayout.MaxWidth(75f)))
{
try
{
var t = m_Script.GetClass();
m_Settings.HostingServicesManager.AddHostingService(t, m_HostingName);
}
finally
{
Close();
FocusWindowIfItsOpen();
}
}
}
if (GUILayout.Button("Cancel", GUILayout.MaxWidth(75f)))
{
Close();
FocusWindowIfItsOpen();
}
}
EditorGUILayout.EndHorizontal();
}
}
}