protected override void OnAlloyShaderGUI() { var args = new AlloyFieldDrawerArgs() { Editor = this, Materials = Targets.Cast <Material>().ToArray(), PropertiesSkip = new List <string>(), MatInst = MatInst, TabGroup = TabGroup, AllTabNames = m_allTabs, OpenCloseAnim = m_openCloseAnim }; foreach (var animBool in m_openCloseAnim) { if (animBool.Value.isAnimating) { MatEditor.Repaint(); } } foreach (var kv in m_propInfo) { var drawer = kv.Value; if (drawer != null && drawer.ShouldDraw(args)) { drawer.Draw(args); } } if (!string.IsNullOrEmpty(args.CurrentTab)) { EditorGUILayout.EndFadeGroup(); } GUILayout.Space(10.0f); AlloyEditor.DrawAddTabGUI(args.TabsToAdd); }
public override void OnInspectorGUI() { serializedObject.Update(); m_tabAdd.Clear(); var skinEnabled = serializedObject.FindProperty("SkinSettings.Enabled"); if (skinEnabled.boolValue && !skinEnabled.hasMultipleDifferentValues) { bool removed; m_skinGroup.target = m_tabGroup.TabArea("Skin Scattering", s_scatterColor, true, out removed, c_skinTabName); if (EditorGUILayout.BeginFadeGroup(m_skinGroup.faded)) { var prop = serializedObject.FindProperty("SkinSettings"); prop.Next(true); //skip flag prop.Next(true); //skip enabled DrawRemainingProp(prop); } EditorGUILayout.EndFadeGroup(); if (removed) { skinEnabled.boolValue = false; } } else { m_tabAdd.Add(new AlloyTabAdd { Color = s_scatterColor, Name = "Skin Scattering", Enable = EnableSkin }); } var transEnabled = serializedObject.FindProperty("TransmissionSettings.Enabled"); if (transEnabled.boolValue && !transEnabled.hasMultipleDifferentValues) { bool removed; m_transmissionGroup.target = m_tabGroup.TabArea("Transmission", s_transmissionColor, true, out removed, c_transmissionTabName); if (EditorGUILayout.BeginFadeGroup(m_transmissionGroup.faded)) { var prop = serializedObject.FindProperty("TransmissionSettings"); prop.Next(true); //skip flag prop.Next(true); //skip enabled DrawRemainingProp(prop); } EditorGUILayout.EndFadeGroup(); if (removed) { transEnabled.boolValue = false; } } else { m_tabAdd.Add(new AlloyTabAdd { Color = s_transmissionColor, Name = "Transmission", Enable = EnableTransmission }); } if (m_skinGroup.isAnimating || m_transmissionGroup.isAnimating) { Repaint(); } AlloyEditor.DrawAddTabGUI(m_tabAdd); serializedObject.ApplyModifiedProperties(); if (GUI.changed) { var deferredRendererPlus = serializedObject.targetObject as AlloyDeferredRendererPlus; if (deferredRendererPlus != null) { deferredRendererPlus.Refresh(); } } }
protected override void OnAlloyShaderGUI(MaterialProperty[] properties) { //Refresh drawer structure if needed bool structuralChange = false; if (m_fieldDrawers == null || m_fieldDrawers.Length != properties.Length) { m_fieldDrawers = new AlloyFieldDrawer[properties.Length]; structuralChange = true; } //Rebuild name -> prop cache m_stringToProperty.Clear(); for (int i = 0; i < properties.Length; ++i) { string propName = properties[i].name; m_stringToProperty.Add(propName, properties[i]); } for (int i = 0; i < properties.Length; ++i) { string propName = properties[i].name; if (m_fieldDrawers[i] == null && !s_knownNulls.Contains(propName) || m_fieldDrawers[i] != null && m_fieldDrawers[i].Property.name != propName) { m_fieldDrawers[i] = AlloyFieldDrawerFactory.GetFieldDrawer(this, properties[i]); if (m_fieldDrawers[i] == null) { s_knownNulls.Add(propName); } else { structuralChange = true; } } } //If changed, update the animation stuff if (structuralChange) { m_openCloseAnim.Clear(); var allTabs = new List <string>(); for (var i = 0; i < m_fieldDrawers.Length; i++) { var drawer = m_fieldDrawers[i]; if (!(drawer is AlloyTabDrawer)) { continue; } bool isOpenCur = TabGroup.IsOpen(drawer.DisplayName + MatInst); var anim = new AnimBool(isOpenCur) { speed = 6.0f, value = isOpenCur }; m_openCloseAnim.Add(properties[i].name, anim); allTabs.Add(drawer.DisplayName); } m_allTabs = allTabs.ToArray(); } //Formulate arguments to pass to drawing var args = new AlloyFieldDrawerArgs { Editor = this, Materials = Targets.Cast <Material>().ToArray(), PropertiesSkip = new List <string>(), MatInst = MatInst, TabGroup = TabGroup, AllTabNames = m_allTabs, OpenCloseAnim = m_openCloseAnim }; for (var i = 0; i < m_fieldDrawers.Length; i++) { var drawer = m_fieldDrawers[i]; if (drawer == null) { continue; } drawer.Index = i; drawer.Property = properties[i]; if (drawer.ShouldDraw(args)) { drawer.Draw(args); } } if (!string.IsNullOrEmpty(args.CurrentTab)) { EditorGUILayout.EndFadeGroup(); } GUILayout.Space(10.0f); AlloyEditor.DrawAddTabGUI(args.TabsToAdd); //If animating -> Repaint foreach (var animBool in m_openCloseAnim) { if (animBool.Value.isAnimating) { MatEditor.Repaint(); break; } } }