private void DoInspectorModifierGUI(NodeGUI node) { EditorGUILayout.HelpBox("Modifier: Modify asset settings.", MessageType.Info); UpdateNodeName(node); GUILayout.Space(10f); using (new EditorGUILayout.VerticalScope(GUI.skin.box)) { Type incomingType = FindIncomingAssetType(node.Data.InputPoints[0]); if (incomingType == null) { // if there is no asset input to determine incomingType, // retrieve from assigned Modifier. incomingType = ModifierUtility.GetModifierTargetType(node.Data.ScriptClassName); if (incomingType == null) { EditorGUILayout.HelpBox("Modifier needs a single type of incoming assets.", MessageType.Info); return; } } var map = ModifierUtility.GetAttributeClassNameMap(incomingType); if (map.Count > 0) { using (new GUILayout.HorizontalScope()) { GUILayout.Label("Modifier"); var guiName = ModifierUtility.GetModifierGUIName(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 Modifier class", node, true)) { m_modifier = ModifierUtility.CreateModifier(selectedGUIName, incomingType); if (m_modifier != null) { node.Data.ScriptClassName = ModifierUtility.GUINameToClassName(selectedGUIName, incomingType); node.Data.InstanceData[currentEditingGroup] = m_modifier.Serialize(); } } } ); } } } } else { string[] menuNames = AssetBundleGraphSettings.GUI_TEXT_MENU_GENERATE_MODIFIER.Split('/'); EditorGUILayout.HelpBox( string.Format( "No CustomModifier found for {3} type. \n" + "You need to create at least one Modifier script to select script for Modifier. " + "To start, select {0}>{1}>{2} menu and create a new script.", menuNames[1], menuNames[2], menuNames[3], incomingType.FullName ), MessageType.Info); } GUILayout.Space(10f); if (DrawPlatformSelector(node)) { // if platform tab is changed, renew modifierModifierInstance for that tab. m_modifier = 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_modifier = null; }); using (disabledScope) { //reload modifierModifier instance from saved modifierModifier data. if (m_modifier == null) { m_modifier = ModifierUtility.CreateModifier(node.Data, currentEditingGroup); if (m_modifier != null) { node.Data.ScriptClassName = m_modifier.GetType().FullName; if (node.Data.InstanceData.ContainsValueOf(currentEditingGroup)) { node.Data.InstanceData[currentEditingGroup] = m_modifier.Serialize(); } } } if (m_modifier != null) { Action onChangedAction = () => { using (new RecordUndoScope("Change Modifier Setting", node)) { node.Data.ScriptClassName = m_modifier.GetType().FullName; if (node.Data.InstanceData.ContainsValueOf(currentEditingGroup)) { node.Data.InstanceData[currentEditingGroup] = m_modifier.Serialize(); } } }; m_modifier.OnInspectorGUI(onChangedAction); } } } } }