void OnGUI() { bool canCreate = false; EditorGUIUtility.fieldWidth = 70f; EditorGUIUtility.labelWidth = 80f; _sampleBank = ( GATActiveSampleBank )EditorGUILayout.ObjectField("Sample Bank:", _sampleBank, typeof(GATSampleBank), true); if (_sampleBank != null) { if (_sampleBank.SoundBank == null) { EditorGUILayout.HelpBox("Your SampleBank must refer to a SoundBank!", MessageType.Error); } else { canCreate = true; } } else { EditorGUILayout.HelpBox("Creating a Music System is a shortcut to create and link a MasterPulse, an Envelope, and a Pattern. Creating a Music System requires a SampleBank object in your scene.", MessageType.Info); } GUI.enabled = canCreate; GUI.color = Color.green; if (GUILayout.Button("Create", GUILayout.ExpandWidth(false))) { MasterPulseModule pulse = GATEditorUtilities.NewChildGO <MasterPulseModule>("Music System"); EnvelopeModule envelope = GATEditorUtilities.NewChildGO <EnvelopeModule>("Envelope", pulse.gameObject); envelope.Pulse = pulse; envelope.MaxSamples = _sampleBank.SoundBank.SizeOfShortestSample(); PulsedPatternModule pattern = GATEditorUtilities.NewChildGO <PulsedPatternModule>("Pattern", pulse.gameObject); pattern.Envelope = envelope; pattern.SampleBank = _sampleBank; pattern.Pulse = pulse; pattern.AddSample(_sampleBank.SoundBank.SampleInfos[0].Name); this.Close(); } }
public override void OnInspectorGUI() { int i; Rect boxRect; bool bankIsLoaded = false; base.OnInspectorGUI(); GUILayout.Space(10f); //********************************************************************** //********************** Pulse Box ************************************* boxRect = EditorGUILayout.BeginVertical(); GUI.Box(boxRect, "Pulse", __boxStyle); if (_pulsedPattern.Pulse != null) //Pulse is of type MasterPulseModule, let's put a shortcut to it's Start/Stop methods { MasterPulseModule masterPulse = _pulsedPattern.Pulse as MasterPulseModule; GUILayout.Space(5f); if (masterPulse != null) { if (masterPulse.IsPulsing == false) { GUI.color = Color.green; if (GUILayout.Button("Start", __buttonOptions)) { masterPulse.StartPulsing(0); } } else { GUI.color = Color.red; if (GUILayout.Button("Stop", __buttonOptions)) { masterPulse.Stop(); } } } GUI.color = Color.white; } GUILayout.Space(5f); //***************** Pulse Steps ******************************* if (_pulsedPattern.Pulse != null) { bool[] subscribedSteps = _pulsedPattern.SubscribedSteps; GUILayout.BeginHorizontal(); GUILayout.Space(45f); for (i = 0; i < subscribedSteps.Length; i++) { GUI.enabled = _pulsedPattern.Pulse.Steps[i]; GUILayout.Label(i.ToString(), GUILayout.Width(15f)); } GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Space(5f); GUILayout.Label(__stepsFieldContent, GUILayout.Width(35f)); for (i = 0; i < subscribedSteps.Length; i++) { GUI.enabled = _pulsedPattern.Pulse.Steps[i]; subscribedSteps[i] = GUILayout.Toggle(subscribedSteps[i], "", GUILayout.Width(15f)); } GUILayout.EndHorizontal(); GUI.enabled = true; } else { GUILayout.Space(30f); } GUILayout.Space(5f); GUILayout.BeginHorizontal(); GUILayout.Space(5f); _pulsedPattern.Pulse = ( PulseModule )EditorGUILayout.ObjectField(_pulsedPattern.Pulse, typeof(PulseModule), true, GUILayout.MaxWidth(125f)); if (_pulsedPattern.Pulse != null) { _pulsedPattern.RandomBypass = GUILayout.Toggle(_pulsedPattern.RandomBypass, "Random Bypass"); } GUILayout.EndHorizontal(); if (_pulsedPattern.RandomBypass) { GUILayout.BeginHorizontal(); GUILayout.Space(90f); GUILayout.Label((_pulsedPattern.RandomBypassChance * 100).ToString("0.##\\%"), GUILayout.Width(40f)); _pulsedPattern.RandomBypassChance = GUILayout.HorizontalSlider(_pulsedPattern.RandomBypassChance, 0f, 1f, GUILayout.Width(100f)); GUILayout.EndHorizontal(); } GUILayout.Space(10f); EditorGUILayout.EndVertical(); //******************************************************************** GUILayout.Space(10f); //******************************************************************** //***************** SampleBank Box *********************************** boxRect = EditorGUILayout.BeginVertical(); GUI.Box(boxRect, "Sample Bank", __boxStyle); GUILayout.Space(5f); if (_pulsedPattern.SampleBank != null) { string label; bankIsLoaded = _pulsedPattern.SampleBank.IsLoaded; if (bankIsLoaded) { label = "Loaded"; GUI.enabled = false; } else { label = "Load"; GUI.color = Color.green; } if (GUILayout.Button(new GUIContent(label, "In edit mode, SampleBanks do not automatically reload to preserve memory."), __buttonOptions)) { _pulsedPattern.SampleBank.LoadAll(); UpdateSampleOptions(); } GUI.enabled = true; GUI.color = Color.white; } GUILayout.Space(5f); GATActiveSampleBank cachedBank = _pulsedPattern.SampleBank; GUILayout.BeginHorizontal(); GUILayout.Space(5f); _pulsedPattern.SampleBank = ( GATActiveSampleBank )EditorGUILayout.ObjectField(_pulsedPattern.SampleBank, typeof(GATActiveSampleBank), true, GUILayout.MaxWidth(125f)); GUILayout.EndHorizontal(); if (_pulsedPattern.SampleBank != null && bankIsLoaded == false) { EditorGUILayout.HelpBox("The selected bank is not loaded yet. Click Load to enable previewing.", MessageType.Warning); } if (_pulsedPattern.SampleBank != cachedBank) { UpdateSampleOptions(); } GUILayout.Space(10f); EditorGUILayout.EndVertical(); //******************************************************************* GUILayout.Space(10f); //******************************************************************* //***************** Envelope Box ************************************ boxRect = EditorGUILayout.BeginVertical(); GUI.Box(boxRect, "Envelope", __boxStyle); GUILayout.Space(30f); GUILayout.BeginHorizontal(); GUILayout.Space(5f); _pulsedPattern.Envelope = ( EnvelopeModule )EditorGUILayout.ObjectField(_pulsedPattern.Envelope, typeof(EnvelopeModule), true, GUILayout.MaxWidth(125f)); if (_pulsedPattern.Envelope != null) { GUI.color = __blueColor; if (GUILayout.Button("Envelope Window", __largeButtonOptions)) { EnvelopeWindow window = EditorWindow.GetWindow <EnvelopeWindow>(); window.InitWithEnvelope(_pulsedPattern.Envelope); } GUI.color = Color.white; } GUILayout.EndHorizontal(); if (_pulsedPattern.Envelope == null) { EditorGUILayout.HelpBox("If no envelope is set, the entire samples will be played and pitch shifting is disabled.", MessageType.Info); } GUILayout.Space(10f); EditorGUILayout.EndVertical(); //******************************************************************* GUILayout.Space(10f); //******************************************************************* //***************** Samples Box ************************************* boxRect = EditorGUILayout.BeginVertical(); GUI.Box(boxRect, "Samples", __boxStyle); GUILayout.Space(30f); //******************* Player and track fields *********************** GUILayout.BeginHorizontal(); GUILayout.Space(5f); GUILayout.Label(__playerFieldContent, GUILayout.Width(40f)); _pulsedPattern.Player = ( GATPlayer )EditorGUILayout.ObjectField(_pulsedPattern.Player, typeof(GATPlayer), true, GUILayout.Width(125f)); GUILayout.Label(__trackFieldContent, GUILayout.Width(40f)); _pulsedPattern.TrackNb = EditorGUILayout.IntPopup(_pulsedPattern.TrackNb, _playerTrackStrings, _playerTrackNumbers, GUILayout.Width(40f)); GUILayout.Space(5f); GUILayout.EndHorizontal(); GUILayout.Space(10f); //******************* Playing Order *********************** EditorGUILayout.HelpBox(__orderHelpStrings[( int )_pulsedPattern.SamplesOrdering], MessageType.Info); GUILayout.BeginHorizontal(); GUILayout.Space(5f); _pulsedPattern.SamplesOrdering = (AGATPulsedPattern.PlayingOrder)EditorGUILayout.EnumPopup(_pulsedPattern.SamplesOrdering, GUILayout.MaxWidth(145f)); _pulsedPattern.AddRandomDelay = GUILayout.Toggle(_pulsedPattern.AddRandomDelay, __randomDelayContent); GUILayout.EndHorizontal(); if (_pulsedPattern.AddRandomDelay) { GUILayout.BeginHorizontal(); GUILayout.Space(110f); GUILayout.Label((_pulsedPattern.RandomDelayMaxRatio * 100).ToString("0.##\\%"), GUILayout.Width(40f)); _pulsedPattern.RandomDelayMaxRatio = GUILayout.HorizontalSlider(_pulsedPattern.RandomDelayMaxRatio, 0f, 1f, GUILayout.Width(100f)); GUILayout.EndHorizontal(); } //****************************************************************** GUILayout.Space(10f); //****************************************************************** //*********************** Drawing Samples ************************** PatternSample info; for (i = 0; i < _samplesInfo.Length; i++) { info = _samplesInfo[i]; if (DrawSampleInfo(info, bankIsLoaded, i)) { _pulsedPattern.PlaySample(i, AudioSettings.dspTime + .1d); } } if (_sampleOptions != null) { GUILayout.Space(20f); GUILayout.BeginHorizontal(); GUILayout.Space(5f); GUI.color = Color.green; if (GUILayout.Button("Add", __buttonOptions)) { _pulsedPattern.AddSample(_sampleOptions[_selectedSampleName]); _samplesInfo = _pulsedPattern.Samples; } GUI.color = Color.white; GUILayout.Space(5f); _selectedSampleName = EditorGUILayout.Popup(_selectedSampleName, _sampleOptions, GUILayout.Width(100f)); GUILayout.EndHorizontal(); } GUILayout.Space(10f); EditorGUILayout.EndVertical(); }