void ShowSequenceContainer(AudioPlayer.SubContainer source, AudioPlayer.Container container, SerializedProperty containerProperty) { AdjustName("Sequence Container", source, container); if (source.showing) { EditorGUI.indentLevel += 1; ShowSourceParentSettings(source, container); ShowGeneralSourceSettings(source, container); ShowChildrenSources(source, container, containerProperty); EditorGUI.indentLevel -= 1; } }
void ShowSourceParentSettings(AudioPlayer.SubContainer source, AudioPlayer.Container container) { if (GetParentContainerType(source, container) == AudioPlayer.SubContainer.ContainerTypes.RandomContainer) { source.weight = Mathf.Max(EditorGUILayout.FloatField("Weight", source.weight), 0); EditorGUILayout.Space(); } else if (GetParentContainerType(source, container) == AudioPlayer.SubContainer.ContainerTypes.SequenceContainer) { source.repeat = Mathf.Max(EditorGUILayout.IntField("Repeat", source.repeat), 1); EditorGUILayout.Space(); } source.sourceType = (AudioPlayer.SubContainer.ContainerTypes)EditorGUILayout.EnumPopup(source.sourceType); }
void ShowSampler(AudioPlayer.SubContainer source, AudioPlayer.Container container, SerializedProperty containerProperty) { if (string.IsNullOrEmpty(source.instrumentName)) { AdjustName("Sampler: null", source, container); } else { AdjustName("Sampler: " + source.instrumentName + " " + source.midiNote + "/" + source.velocity, source, container); } if (source.showing) { EditorGUI.indentLevel += 1; ShowSourceParentSettings(source, container); string[] displayedOptions = new string[0]; if (Sampler.Instance != null) { if (Sampler.Instance.instruments != null) { displayedOptions = new string[Sampler.Instance.instruments.Length]; for (int i = 0; i < Sampler.Instance.instruments.Length; i++) { displayedOptions[i] = Sampler.Instance.instruments[i].name; } } } if (displayedOptions.Length > 0) { source.instrumentIndex = Mathf.Min(EditorGUILayout.Popup("Instrument", source.instrumentIndex, displayedOptions), Sampler.Instance.instruments.Length - 1); source.instrumentName = Sampler.Instance.instruments[source.instrumentIndex].name; source.midiNote = EditorGUILayout.IntSlider("Midi Note", source.midiNote, (int)Sampler.Instance.instruments[source.instrumentIndex].minNote, (int)Sampler.Instance.instruments[source.instrumentIndex].maxNote); source.velocity = EditorGUILayout.Slider("Velocity", source.velocity, 0, 127); ShowGeneralSourceSettings(source, container); } else { EditorGUILayout.HelpBox("Add Instruments in the Sampler.", MessageType.Info); source.instrumentName = ""; } EditorGUI.indentLevel -= 1; } }
void AdjustName(string prefix, AudioPlayer.SubContainer source, AudioPlayer.Container container) { source.name = prefix; if (source.sourceType == AudioPlayer.SubContainer.ContainerTypes.MixContainer || source.sourceType == AudioPlayer.SubContainer.ContainerTypes.RandomContainer || source.sourceType == AudioPlayer.SubContainer.ContainerTypes.SequenceContainer) { source.name += " | Sources: " + source.childrenLink.Count; } if (GetParentContainerType(source, container) == AudioPlayer.SubContainer.ContainerTypes.RandomContainer) { source.name += " | Weight: " + source.weight; } else if (GetParentContainerType(source, container) == AudioPlayer.SubContainer.ContainerTypes.SequenceContainer) { source.name += " | Repeat: " + source.repeat; } }
void ShowAudioSource(AudioPlayer.SubContainer source, AudioPlayer.Container container, SerializedProperty containerProperty) { if (source.audioSource == null) { AdjustName("Audio Source: null", source, container); } else { AdjustName("Audio Source: " + source.audioSource.clip.name, source, container); } if (source.showing) { EditorGUI.indentLevel += 1; ShowSourceParentSettings(source, container); source.audioSource = (AudioSource)EditorGUILayout.ObjectField("Audio Source", source.audioSource, typeof(AudioSource), true); ShowGeneralSourceSettings(source, container); EditorGUI.indentLevel -= 1; } }
AudioPlayer.SubContainer.ContainerTypes GetParentContainerType(AudioPlayer.SubContainer source, AudioPlayer.Container container) { AudioPlayer.SubContainer.ContainerTypes containerType = AudioPlayer.SubContainer.ContainerTypes.AudioSource; if (source.parentLink != 0) { containerType = container.GetSourceWithID(source.parentLink).sourceType; } else if (container.containerType == AudioPlayer.Container.ContainerTypes.MixContainer) { containerType = AudioPlayer.SubContainer.ContainerTypes.MixContainer; } else if (container.containerType == AudioPlayer.Container.ContainerTypes.RandomContainer) { containerType = AudioPlayer.SubContainer.ContainerTypes.RandomContainer; } else if (container.containerType == AudioPlayer.Container.ContainerTypes.SequenceContainer) { containerType = AudioPlayer.SubContainer.ContainerTypes.SequenceContainer; } return(containerType); }
void ShowGeneralSourceSettings(AudioPlayer.SubContainer source, AudioPlayer.Container container) { source.delay = Mathf.Max(EditorGUILayout.FloatField("Delay", source.delay), 0); source.syncMode = (AudioPlayer.SyncMode)EditorGUILayout.EnumPopup("Sync Mode", source.syncMode); }
void ShowChildrenSources(AudioPlayer.SubContainer source, AudioPlayer.Container container, SerializedProperty containerProperty) { EditorGUILayout.BeginHorizontal(); source.sourcesShowing = EditorGUILayout.Foldout(source.sourcesShowing, "Sources (" + source.childrenLink.Count + ")"); EditorGUI.BeginDisabledGroup(Application.isPlaying); if (ShowAddElementButton(containerProperty.FindPropertyRelative("subContainers"))) { container.subContainers[container.subContainers.Count - 1] = new AudioPlayer.SubContainer(); if (container.subContainers.Count > 1) { container.subContainers[container.subContainers.Count - 1].Initialize(container, source.id, container.subContainers[container.subContainers.Count - 2]); } else { container.subContainers[container.subContainers.Count - 1].Initialize(container, source.id); } } EditorGUI.EndDisabledGroup(); EditorGUILayout.EndHorizontal(); if (source.sourcesShowing) { EditorGUI.indentLevel += 1; if (source.childrenLink.Count != 0) { for (int i = 0; i < source.childrenLink.Count; i++) { AudioPlayer.SubContainer childSource = container.GetSourceWithID(source.childrenLink[i]); int index = container.subContainers.IndexOf(childSource); EditorGUILayout.BeginHorizontal(); childSource.showing = EditorGUILayout.Foldout(childSource.showing, childSource.name); EditorGUI.BeginDisabledGroup(Application.isPlaying); if (ShowDeleteElementButton(containerProperty.FindPropertyRelative("subContainers"), index)) { container.GetSourceWithID(source.id).childrenLink.Remove(childSource.id); container.RemoveEmptyReferences(); break; } EditorGUILayout.EndHorizontal(); EditorGUI.EndDisabledGroup(); if (childSource.sourceType == AudioPlayer.SubContainer.ContainerTypes.AudioSource) { ShowAudioSource(childSource, container, containerProperty); } else if (childSource.sourceType == AudioPlayer.SubContainer.ContainerTypes.Sampler) { ShowSampler(childSource, container, containerProperty); } else if (childSource.sourceType == AudioPlayer.SubContainer.ContainerTypes.MixContainer) { ShowMixContainer(childSource, container, containerProperty); } else if (childSource.sourceType == AudioPlayer.SubContainer.ContainerTypes.RandomContainer) { ShowRandomContainer(childSource, container, containerProperty); } else if (childSource.sourceType == AudioPlayer.SubContainer.ContainerTypes.SequenceContainer) { ShowSequenceContainer(childSource, container, containerProperty); } } } EditorGUI.indentLevel -= 1; } ShowSeparator(false); }
void ShowSources(AudioPlayer.Container container, SerializedProperty containerProperty) { EditorGUILayout.BeginHorizontal(); container.sourcesShowing = EditorGUILayout.Foldout(container.sourcesShowing, "Sources (" + container.sources.Length + ")"); EditorGUI.BeginDisabledGroup(Application.isPlaying); if (ShowAddElementButton(containerProperty.FindPropertyRelative("sources"))) { container.sources[container.sources.Length - 1] = new AudioPlayer.SubContainer(); if (container.sources.Length > 1) { container.sources[container.sources.Length - 1].Initialize(container, 0, container.sources[container.sources.Length - 2]); } else { container.sources[container.sources.Length - 1].Initialize(container, 0); } } EditorGUI.EndDisabledGroup(); EditorGUILayout.EndHorizontal(); if (container.sourcesShowing) { EditorGUI.indentLevel += 1; if (container.sources != null) { for (int i = 0; i < container.sources.Length; i++) { AudioPlayer.SubContainer source = container.sources[i]; EditorGUILayout.BeginHorizontal(); source.showing = EditorGUILayout.Foldout(source.showing, source.name); EditorGUI.BeginDisabledGroup(Application.isPlaying); if (ShowDeleteElementButton(containerProperty.FindPropertyRelative("sources"), i)) { container.RemoveEmptyReferences(); break; } EditorGUILayout.EndHorizontal(); EditorGUI.EndDisabledGroup(); if (source.sourceType == AudioPlayer.SubContainer.ContainerTypes.AudioSource) { ShowAudioSource(source, container, containerProperty); } else if (source.sourceType == AudioPlayer.SubContainer.ContainerTypes.Sampler) { ShowSampler(source, container, containerProperty); } else if (source.sourceType == AudioPlayer.SubContainer.ContainerTypes.MixContainer) { ShowMixContainer(source, container, containerProperty); } else if (source.sourceType == AudioPlayer.SubContainer.ContainerTypes.RandomContainer) { ShowRandomContainer(source, container, containerProperty); } else if (source.sourceType == AudioPlayer.SubContainer.ContainerTypes.SequenceContainer) { ShowSequenceContainer(source, container, containerProperty); } } } EditorGUI.indentLevel -= 1; } ShowSeparator(false); }