bool InheritDependencies() { //if (spectrumSource) return true; Transform parent = transform.parent; if (spectrumSource == null) { spectrumSource = GetComponent <SpectrumSource>(); } if (eq == null) { eq = GetComponent <EQ>(); } while (spectrumSource == null || eq == null) { if (parent != null) { if (spectrumSource == null) { spectrumSource = parent.GetComponent <SpectrumSource>(); } if (eq == null) { eq = parent.GetComponent <EQ>(); } parent = parent.parent; } else { break; } } return(spectrumSource); }
public override void OnInspectorGUI() { EQ eq = (EQ)target; int iMin; int iMax; eq.bandFilterOption = (BandFilters)EditorGUILayout.EnumPopup("Filter Band", eq.bandFilterOption); EditorGUILayout.Foldout(true, "Scale", GlobalStyles.heading); eq.slope = EditorGUILayout.Slider("Slope", eq.slope, min, max); eq.offset = EditorGUILayout.Slider("Offset", eq.offset, 0.0f, 2.0f); eq.master = EditorGUILayout.Slider("Master", eq.master, 0.0f, 20.0f); EditorGUILayout.Foldout(true, "Levels", GlobalStyles.heading); eq.levelShape = (LevelMode)EditorGUILayout.EnumPopup("Mode", eq.levelShape); float upperPreset = 0; float lowerPreset = 0; Frequency.GetRangePreset(ref lowerPreset, ref upperPreset, (FrequencyRangeOption)(eq.bandFilterOption + 1)); iMin = Frequency.FrequencyToArrayIndex(lowerPreset, eq.levels.Length); iMax = Frequency.FrequencyToArrayIndex(upperPreset, eq.levels.Length); for (int i = 0; i < eq.levels.Length; i++) { if (i >= iMin && i <= iMax) { eq.bandFilters[i] = 1f; } else { eq.bandFilters[i] = 0f; } } EditorGUI.BeginChangeCheck(); for (int i = 0; i < eq.levels.Length; i++) { float linearizedFrequency = 0.0f; int nLevels = eq.levels.Length; float level = 0.0f; if (eq.bandFilters[i] == 1.0f) { switch (eq.levelShape) { case LevelMode.Custom: eq.levels[i] = EditorGUILayout.Slider((i + 1).ToString(), eq.levels[i], min, max); break; case LevelMode.Flat: level = Mathf.Clamp(eq.slope + eq.offset - 1.0f, 0, 2); eq.levels[i] = EditorGUILayout.Slider((i + 1).ToString(), level, min, max); break; case LevelMode.Mute: eq.levels[i] = EditorGUILayout.Slider((i + 1).ToString(), 0.0f, min, max); break; case LevelMode.Max: eq.levels[i] = EditorGUILayout.Slider((i + 1).ToString(), max * eq.bandFilters[i], min, max); break; case LevelMode.LinearAscending: level = Mathf.Clamp(((float)i / (nLevels - 1) * eq.slope + eq.offset), 0, 2); eq.levels[i] = EditorGUILayout.Slider((i + 1).ToString(), level, min, max); break; case LevelMode.LinearDescending: level = Mathf.Clamp(((1.0f - (float)i / (nLevels - 1)) * eq.slope + eq.offset), 0, 2); eq.levels[i] = EditorGUILayout.Slider((i + 1).ToString(), level, min, max); break; case LevelMode.SquareAscending: linearizedFrequency = (float)i / (float)(eq.levels.Length - 1); level = Mathf.Clamp((linearizedFrequency * linearizedFrequency * eq.slope + eq.offset), 0, 2); eq.levels[i] = EditorGUILayout.Slider((i + 1).ToString(), level, min, max); break; case LevelMode.SquareDescending: linearizedFrequency = (float)i / (float)(eq.levels.Length - 1); level = Mathf.Clamp(((1.0f - linearizedFrequency * linearizedFrequency) * eq.slope + eq.offset), 0, 2); eq.levels[i] = EditorGUILayout.Slider((i + 1).ToString(), level, min, max); break; } } } if (EditorGUI.EndChangeCheck()) { eq.levelShape = LevelMode.Custom; } Undo.RecordObject(eq, "EQ"); }