public override void ReadFromString(ref string[] nodeParams) { // This node is, by default, created with one input port base.ReadFromString(ref nodeParams); m_code = GetCurrentParam(ref nodeParams); m_code = m_code.Replace(LineFeedSeparator, '\n'); m_code = m_code.Replace(SemiColonSeparator, ';'); m_outputTypeIdx = Convert.ToInt32(GetCurrentParam(ref nodeParams)); if (m_outputTypeIdx >= AvailableWireTypes.Length) { UIUtils.ShowMessage("Sampler types were removed as a valid output custom expression type"); m_outputTypeIdx = 1; } UpdateVoidMode(); m_outputPorts[0].ChangeType(AvailableWireTypes[m_outputTypeIdx], false); if (UIUtils.CurrentShaderVersion() > 12001) { bool mode = Convert.ToBoolean(GetCurrentParam(ref nodeParams)); m_mode = mode ? CustomExpressionMode.Call : CustomExpressionMode.Create; if (m_mode == CustomExpressionMode.Call || m_voidMode) { m_firstAvailablePort = 1; AddInputPortAt(0, WirePortDataType.FLOAT, false, DefaultInputName); } } int count = Convert.ToInt32(GetCurrentParam(ref nodeParams)); if (count == 0) { DeleteInputPortByArrayIdx(0); m_foldoutValuesLabels.Clear(); m_variableQualifiers.Clear(); } else { for (int i = 0; i < count; i++) { bool foldoutValue = Convert.ToBoolean(GetCurrentParam(ref nodeParams)); string name = GetCurrentParam(ref nodeParams); WirePortDataType type = (WirePortDataType)Enum.Parse(typeof(WirePortDataType), GetCurrentParam(ref nodeParams)); string internalData = GetCurrentParam(ref nodeParams); VariableQualifiers qualifier = VariableQualifiers.In; if (UIUtils.CurrentShaderVersion() > 12001) { qualifier = (VariableQualifiers)Enum.Parse(typeof(VariableQualifiers), GetCurrentParam(ref nodeParams)); } int portIdx = i + m_firstAvailablePort; if (i == 0) { m_inputPorts[portIdx].ChangeProperties(name, type, false); m_variableQualifiers[0] = qualifier; m_foldoutValuesFlags[0] = foldoutValue; } else { m_foldoutValuesLabels.Add("[" + i + "]"); m_variableQualifiers.Add(qualifier); m_foldoutValuesFlags.Add(foldoutValue); AddInputPort(type, false, name); } m_inputPorts[i].InternalData = internalData; } } if (UIUtils.CurrentShaderVersion() > 7205) { m_customExpressionName = GetCurrentParam(ref nodeParams); SetTitleText(m_customExpressionName); } if (UIUtils.CurrentShaderVersion() > 14401) { m_generateUniqueName = Convert.ToBoolean(GetCurrentParam(ref nodeParams)); } if (UIUtils.CurrentShaderVersion() > 15102) { m_autoRegisterMode = Convert.ToBoolean(GetCurrentParam(ref nodeParams)); } if (m_autoRegisterMode) { m_containerGraph.CustomExpressionOnFunctionMode.AddNode(this); } UpdateOutputPorts(); m_repopulateNameDictionary = true; m_functionMode = m_code.Contains(ReturnHelper); CheckCallMode(); }
void DrawInputs() { int count = m_inputPorts.Count - m_firstAvailablePort; for (int i = 0; i < count; i++) { int portIdx = i + m_firstAvailablePort; m_foldoutValuesFlags[i] = EditorGUILayoutFoldout(m_foldoutValuesFlags[i], m_foldoutValuesLabels[i] + " - " + m_inputPorts[portIdx].Name); if (m_foldoutValuesFlags[i]) { EditorGUI.indentLevel += 1; //Qualifier // bool guiEnabled = GUI.enabled; // GUI.enabled = m_functionMode; VariableQualifiers newQualifier = (VariableQualifiers)EditorGUILayoutPopup(InputQualifierStr, (int)m_variableQualifiers[i], QualifiersStr); if (newQualifier != m_variableQualifiers[i]) { VariableQualifiers oldQualifier = m_variableQualifiers[i]; m_variableQualifiers[i] = newQualifier; if (newQualifier == VariableQualifiers.In) { RemoveOutputPort(CreateOutputId(m_inputPorts[portIdx].PortId), false); } else if (oldQualifier == VariableQualifiers.In) { AddOutputPort(m_inputPorts[portIdx].DataType, m_inputPorts[portIdx].Name, CreateOutputId(m_inputPorts[portIdx].PortId)); } RecalculateInOutOutputPorts(); } //GUI.enabled = guiEnabled; // Type int typeIdx = WireToIdx[m_inputPorts[portIdx].DataType]; EditorGUI.BeginChangeCheck(); { typeIdx = EditorGUILayoutPopup(InputTypeStr, typeIdx, AvailableWireTypesStr); } if (EditorGUI.EndChangeCheck()) { m_inputPorts[portIdx].ChangeType(AvailableWireTypes[typeIdx], false); if (m_variableQualifiers[i] != VariableQualifiers.In) { OutputPort currOutPort = GetOutputPortByUniqueId(CreateOutputId(m_inputPorts[portIdx].PortId)); currOutPort.ChangeType(AvailableWireTypes[typeIdx], false); } } //Name EditorGUI.BeginChangeCheck(); { m_inputPorts[portIdx].Name = EditorGUILayoutTextField(InputNameStr, m_inputPorts[portIdx].Name); } if (EditorGUI.EndChangeCheck()) { m_nameModified = true; m_lastTimeNameModified = EditorApplication.timeSinceStartup; m_inputPorts[portIdx].Name = UIUtils.RemoveInvalidCharacters(m_inputPorts[portIdx].Name); if (string.IsNullOrEmpty(m_inputPorts[portIdx].Name)) { m_inputPorts[portIdx].Name = DefaultInputName + i; } } // Port Data if (!m_inputPorts[portIdx].IsConnected) { m_inputPorts[portIdx].ShowInternalData(this, true, InputValueStr); } EditorGUILayout.BeginHorizontal(); { GUILayout.Label(" "); // Add new port if (GUILayoutButton(string.Empty, UIUtils.PlusStyle, GUILayout.Width(ButtonLayoutWidth))) { AddPortAt(portIdx); EditorGUI.FocusTextInControl(null); } //Remove port if (GUILayoutButton(string.Empty, UIUtils.MinusStyle, GUILayout.Width(ButtonLayoutWidth))) { m_markedToDelete = portIdx; } } EditorGUILayout.EndHorizontal(); EditorGUI.indentLevel -= 1; } } if (m_markedToDelete > -1) { RemovePortAt(m_markedToDelete); m_markedToDelete = -1; EditorGUI.FocusTextInControl(null); } }