private void DoInspectorPrefabBuilderGUI(NodeGUI node)
{
EditorGUILayout.HelpBox("PrefabBuilder: Create prefab with given assets and script.", MessageType.Info);
UpdateNodeName(node);
using (new EditorGUILayout.VerticalScope(GUI.skin.box)) {
var map = PrefabBuilderUtility.GetAttributeClassNameMap();
if (map.Count > 0)
{
using (new GUILayout.HorizontalScope()) {
GUILayout.Label("PrefabBuilder");
var guiName = PrefabBuilderUtility.GetPrefabBuilderGUIName(node.Data.ScriptClassName);
if (GUILayout.Button(guiName, "Popup", GUILayout.MinWidth(150f)))
{
var builders = map.Keys.ToList();
if (builders.Count > 0)
{
NodeGUI.ShowTypeNamesMenu(guiName, builders, (string selectedGUIName) =>
{
using (new RecordUndoScope("Change PrefabBuilder class", node, true)) {
m_prefabBuilder = PrefabBuilderUtility.CreatePrefabBuilder(selectedGUIName);
if (m_prefabBuilder != null)
{
node.Data.ScriptClassName = PrefabBuilderUtility.GUINameToClassName(selectedGUIName);
node.Data.InstanceData.DefaultValue = m_prefabBuilder.Serialize();
}
}
}
);
}
}
}
}
else
{
if (!string.IsNullOrEmpty(node.Data.ScriptClassName))
{
EditorGUILayout.HelpBox(
string.Format(
"Your PrefabBuilder script {0} is missing from assembly. Did you delete script?", node.Data.ScriptClassName), MessageType.Info);
}
else
{
string[] menuNames = AssetBundleGraphSettings.GUI_TEXT_MENU_GENERATE_PREFABBUILDER.Split('/');
EditorGUILayout.HelpBox(
string.Format(
"You need to create at least one PrefabBuilder script to use PrefabBuilder node. To start, select {0}>{1}>{2} menu and create new script from template.",
menuNames[1], menuNames[2], menuNames[3]
), MessageType.Info);
}
}
GUILayout.Space(10f);
if (DrawPlatformSelector(node))
{
// if platform tab is changed, renew prefabBuilder for that tab.
m_prefabBuilder = null;
}
using (new EditorGUILayout.VerticalScope()) {
var disabledScope = DrawOverrideTargetToggle(node, node.Data.InstanceData.ContainsValueOf(currentEditingGroup), (bool enabled) => {
if (enabled)
{
node.Data.InstanceData[currentEditingGroup] = node.Data.InstanceData.DefaultValue;
}
else
{
node.Data.InstanceData.Remove(currentEditingGroup);
}
m_prefabBuilder = null;
});
using (disabledScope) {
//reload prefabBuilder instance from saved instance data.
if (m_prefabBuilder == null)
{
m_prefabBuilder = PrefabBuilderUtility.CreatePrefabBuilder(node.Data, currentEditingGroup);
if (m_prefabBuilder != null)
{
node.Data.ScriptClassName = m_prefabBuilder.GetType().FullName;
if (node.Data.InstanceData.ContainsValueOf(currentEditingGroup))
{
node.Data.InstanceData[currentEditingGroup] = m_prefabBuilder.Serialize();
}
}
}
if (m_prefabBuilder != null)
{
Action onChangedAction = () => {
using (new RecordUndoScope("Change PrefabBuilder Setting", node)) {
node.Data.ScriptClassName = m_prefabBuilder.GetType().FullName;
if (node.Data.InstanceData.ContainsValueOf(currentEditingGroup))
{
node.Data.InstanceData[currentEditingGroup] = m_prefabBuilder.Serialize();
}
}
};
m_prefabBuilder.OnInspectorGUI(onChangedAction);
}
}
}
}
}