Chatterer.chatterer.beeps_gui C# (CSharp) Method

beeps_gui() private method

private beeps_gui ( ) : void
return void
        private void beeps_gui()
        {
            GUIContent _content = new GUIContent();

            //Beeps
            if (beeps_exists)
            {
                GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true));

                if (show_advanced_options)
                {
                    //Decrease beepsources
                    _content.text = "Rmv";
                    _content.tooltip = "Remove the last beepsource";
                    if (GUILayout.Button(_content, GUILayout.ExpandWidth(false)))
                    {
                        if (beepsource_list.Count > 1)
                        {
                            //remove a beepsource
                            if (debugging) Debug.Log("[CHATR] num_sources = " + beepsource_list.Count);

                            Destroy(beepsource_list[beepsource_list.Count - 1].beep_player);   //destroy GameObject holding Source and Filters
                            if (debugging) Debug.Log("[CHATR] beep_player destroyed");

                            if (debugging) Debug.Log("[CHATR] attempting to remove BeepSource at index " + (beepsource_list.Count - 1));

                            beepsource_list.RemoveAt(beepsource_list.Count - 1);  //remove the last BeepSource from the list

                            if (debugging) Debug.Log("[CHATR] BeepSource at index " + (beepsource_list.Count) + " removed from beepsource_list");

                            //line below is a problem
                            // sel_beep_src can only be 0-9
                            //set = 0 whenever it is lowered until a more elegant solution can be found
                            //RBRBeepSource bm = beepsource_list[(((sel_beep_page - 1) * 10) + sel_beep_src)];

                            //if (sel_beep_src == beepsource_list.Count) sel_beep_src = beepsource_list.Count - 1;    //if selected source was just removed, set it to highest available
                            sel_beep_src = 0;

                            //beepsources have decreased, check if sel_page index is out of range
                            num_beep_pages = beepsource_list.Count / 10;
                            if (beepsource_list.Count % 10 != 0) num_beep_pages++;

                            if (num_beep_pages != prev_num_pages)
                            {

                                //last page is no longer needed in the grid
                                //set sel_page to the new last page if it is out of range
                                if (sel_beep_page > num_beep_pages) sel_beep_page = num_beep_pages;
                                //set sel_source to 0
                                sel_beep_src = 0;
                                prev_num_pages = num_beep_pages;
                            }
                        }
                    }
                    //if (debugging) Debug.Log("[CHATR] - button OK");

                    if (num_beep_pages > 1)
                    {
                        _content.text = "◄";
                        _content.tooltip = "Previous page";
                        if (GUILayout.Button(_content, GUILayout.ExpandWidth(false)))
                        {
                            sel_beep_page--;

                            if (sel_beep_page < 1)
                            {
                                sel_beep_page = 1;
                                if (debugging) Debug.Log("[CHATR] this is the first page");
                            }
                            else
                            {
                                sel_beep_src = 0;
                                if (debugging) Debug.Log("[CHATR] page back");
                            }
                        }
                    }

                    //if (debugging) Debug.Log("[CHATR] ◄ button OK");
                }

                //Beep selection grid
                List<string> sources = new List<string>();
                foreach (BeepSource b in beepsource_list)
                {

                    //when sel_page = 1, want to add 1-10
                    //when sel_page = 2, want to add 11-20

                    //min = ((sel_page - 1) * 10) + 1
                    //max <= sel_page * 10

                    int beep_num = Int32.Parse(b.beep_name);

                    if (beep_num >= ((sel_beep_page - 1) * 10) + 1 && beep_num <= sel_beep_page * 10)
                    {
                        sources.Add(b.beep_name);
                    }
                }

                //GUIContent[] _content_array = sources.ToArray();
                //
                //GUIContent[] asset_list = { new GUIContent("Wallpaper", "Change Wallpaper"), new GUIContent("Floor", "Change Floor"), new GUIContent("Light", "Switch Light") };

                string[] s = sources.ToArray();
                int sel_grid_width = 5;
                if (sources.Count < 5) sel_grid_width = sources.Count;

                sel_beep_src = GUILayout.SelectionGrid(sel_beep_src, s, sel_grid_width, GUILayout.ExpandWidth(true));
                //if (debugging) Debug.Log("[CHATR] grid OK");

                if (show_advanced_options)
                {
                    //page next
                    if (num_beep_pages > 1)
                    {
                        _content.text = "►";
                        _content.tooltip = "Next page";
                        if (GUILayout.Button(_content, GUILayout.ExpandWidth(false)))
                        {
                            sel_beep_page++;

                            if (sel_beep_page > num_beep_pages)
                            {
                                sel_beep_page = num_beep_pages;
                                if (debugging) Debug.Log("[CHATR] this is the last page");
                            }
                            else
                            {
                                sel_beep_src = 0;
                                if (debugging) Debug.Log("[CHATR] page next");
                            }
                        }
                    }
                    //if (debugging) Debug.Log("[CHATR] ► button OK");

                    //Increase beepsources
                    _content.text = "Add";
                    _content.tooltip = "Add a new beepsource";
                    if (GUILayout.Button(_content, GUILayout.ExpandWidth(false)))
                    {
                        add_new_beepsource();
                        if (debugging) Debug.Log("[CHATR] new BeepSource added");
                        save_plugin_settings();

                        //when adding a new source that will create a new page, change to that page and set sel_beep to 0

                        //beepsources have increased, check if a new page is needed
                        num_beep_pages = beepsource_list.Count / 10;
                        if (beepsource_list.Count % 10 != 0) num_beep_pages++;

                        if (num_beep_pages != prev_num_pages)
                        {

                            //a new page is needed in the grid
                            //set sel_page to the new page
                            //sel_beep_page = num_beep_pages;
                            //set sel_source to 0
                            //sel_beep_src = 0;
                            prev_num_pages = num_beep_pages;
                        }
                    }
                    //if (debugging) Debug.Log("[CHATR] + button OK");
                }
                GUILayout.EndHorizontal();

                //if (debugging) Debug.Log("[CHATR] beepsource_list.Count = " + beepsource_list.Count);
                //if (debugging) Debug.Log("[CHATR] num_beep_pages = " + num_beep_pages);
                //if (debugging) Debug.Log("[CHATR] sel_beep_page = " + sel_beep_page);
                //if (debugging) Debug.Log("[CHATR] sel_beep_src = " + sel_beep_src);
                //if (debugging) Debug.Log("[CHATR] beepsource_list index [((sel_beep_page - 1) * 10) + sel_beep_src] = " + (((sel_beep_page - 1) * 10) + sel_beep_src));

                BeepSource bm = beepsource_list[(((sel_beep_page - 1) * 10) + sel_beep_src)];   //shortcut   0-9 only, but correspond to the correct beepsource

                //if (debugging) Debug.Log("[CHATR] shortcut OK");

                if (bm.precise)
                {
                    //show exact slider
                    bm.precise_freq = Convert.ToInt32(Math.Round(bm.precise_freq_slider));
                    string beep_freq_str = "";
                    if (bm.precise_freq == -1) beep_freq_str = "No beeps";
                    else if (bm.precise_freq == 0) beep_freq_str = "Loop";
                    else beep_freq_str = "Every " + bm.precise_freq.ToString() + "s";

                    GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true));
                    _content.text = "Beep frequency: " + beep_freq_str;
                    _content.tooltip = "How often this beepsource will play";
                    GUILayout.Label(_content, label_txt_left, GUILayout.ExpandWidth(true));
                    bm.precise_freq_slider = GUILayout.HorizontalSlider(bm.precise_freq_slider, -1f, 60f, GUILayout.Width(100f));
                    GUILayout.EndHorizontal();

                    if (bm.precise_freq != bm.prev_precise_freq)
                    {
                        if (debugging) Debug.Log("[CHATR] precise_freq has changed, resetting beep_timer...");
                        bm.timer = 0;
                        bm.prev_precise_freq = bm.precise_freq;
                        if (bm.precise_freq == 0 && bm.current_clip == "Random")
                        {
                            //frequency has changed to looped mode
                            //current clip == random
                            //not allowed, too silly
                            bm.current_clip = "Default";
                        }
                    }
                }
                else
                {
                    //show loose slider
                    bm.loose_freq = Convert.ToInt32(Math.Round(bm.loose_freq_slider));
                    string beep_freq_str = "";
                    if (bm.loose_freq == 0) beep_freq_str = "No beeps";
                    else
                    {
                        if (bm.loose_freq == 1) beep_freq_str = "120-300s";
                        else if (bm.loose_freq == 2) beep_freq_str = "60-120s";
                        else if (bm.loose_freq == 3) beep_freq_str = "30-60s";
                        else if (bm.loose_freq == 4) beep_freq_str = "15-30s";
                        else if (bm.loose_freq == 5) beep_freq_str = "5-15s";
                        else if (bm.loose_freq == 6) beep_freq_str = "1-5s";
                    }

                    _content.text = "Beep frequency: " + beep_freq_str;
                    _content.tooltip = "How often this beepsource will play";
                    GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true));
                    GUILayout.Label(_content, label_txt_left, GUILayout.ExpandWidth(true));
                    bm.loose_freq_slider = GUILayout.HorizontalSlider(bm.loose_freq_slider, 0, 6f, GUILayout.Width(100f));
                    GUILayout.EndHorizontal();

                    if (bm.loose_freq != bm.prev_loose_freq)
                    {
                        if (debugging) Debug.Log("[CHATR] loose_freq has changed, resetting beep_timer...");
                        new_beep_loose_timer_limit(bm);
                        bm.timer = 0;
                        bm.prev_loose_freq = bm.loose_freq;
                    }
                }

                //Volume
                _content.text = "Beep volume: " + (bm.audiosource.volume * 100).ToString("F0") + "%";
                _content.tooltip = "Volume of this beepsource";
                GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true));
                GUILayout.Label(_content, label_txt_left, GUILayout.ExpandWidth(true));
                bm.audiosource.volume = GUILayout.HorizontalSlider(bm.audiosource.volume, 0, 1f, GUILayout.Width(130f));
                GUILayout.EndHorizontal();

                //Pitch
                _content.text = "Beep pitch: " + (bm.audiosource.pitch * 100).ToString("F0") + "%";
                _content.tooltip = "Pitch of this beepsource";
                GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true));
                GUILayout.Label(_content, label_txt_left, GUILayout.ExpandWidth(true));
                bm.audiosource.pitch = GUILayout.HorizontalSlider(bm.audiosource.pitch, 0.1f, 5f, GUILayout.Width(130f));
                GUILayout.EndHorizontal();

                //Beep timing
                string beep_timing_str = "Loose";
                if (bm.precise) beep_timing_str = "Precise";

                _content.text = beep_timing_str;
                _content.tooltip = "Switch between timing modes";
                GUILayout.BeginHorizontal();
                GUILayout.Label("Timing:");
                if (GUILayout.Button(_content, GUILayout.ExpandWidth(false)))
                {
                    //timing mode is being switched
                    bm.precise = !bm.precise;
                    bm.timer = 0;
                    bm.audiosource.loop = false;
                    bm.audiosource.Stop();

                    if (bm.precise)
                    {
                        if (debugging) Debug.Log("[CHATR] beep timing mode has changed to precise");
                        if (bm.current_clip == "Random" && bm.precise_freq == 0)
                        {
                            //disallow random looped clips
                            bm.current_clip = "Default";
                        }
                        //else
                        //{
                        //bm.audiosource.clip = all_beep_clips[bm.current_clip - 1];
                        //}
                        set_beep_clip(bm);
                    }
                    else new_beep_loose_timer_limit(bm);   //set new loose time limit
                }

                //Sample selector
                _content.text = bm.current_clip;
                _content.tooltip = "Click to change the current beep sample";
                GUILayout.Label("", GUILayout.ExpandWidth(true));    //spacer to align "Filters" to the right
                GUILayout.Label("Sample:", GUILayout.ExpandWidth(false));
                if (GUILayout.Button(_content, GUILayout.ExpandWidth(false))) show_probe_sample_selector = !show_probe_sample_selector;

                GUILayout.EndHorizontal();

                if (show_advanced_options)
                {
                    //Add copy/paste single beepsource
                    //Add copy all/paste all beepsources

                    GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true));

                    _content.text = "Copy";
                    _content.tooltip = "Copy beepsource to clipboard";
                    if (GUILayout.Button(_content, GUILayout.ExpandWidth(false)))
                    {
                        //copy this beepsource values to beepsource_clipboard
                        copy_beepsource_values(bm);
                    }
                    if (beepsource_clipboard != null)
                    {
                        _content.text = "Paste";
                        _content.tooltip = "Paste beepsource from clipboard";
                        if (GUILayout.Button(_content, GUILayout.ExpandWidth(false)))
                        {
                            //paste beepsource_clipboard values to this beepsource
                            paste_beepsource_values(bm);
                        }
                    }

                    //Filters
                    GUILayout.Label("", GUILayout.ExpandWidth(true));    //spacer to align "Filters" to the right
                    _content.text = "Filters";
                    _content.tooltip = "Open filter settings window for this beepsource";
                    if (GUILayout.Button(_content, GUILayout.ExpandWidth(false)))
                    {
                        bm.show_settings_window = !bm.show_settings_window;
                    }

                    GUILayout.EndHorizontal();
                }
            }

            //line to separate when both exist
            if (beeps_exists && sstv_exists)
            {
                GUILayout.BeginHorizontal(GUILayout.ExpandWidth(false));
                GUILayout.Label(line_512x4, GUILayout.ExpandWidth(false), GUILayout.Width(275f), GUILayout.Height(10f));
                GUILayout.EndHorizontal();
            }

            //SSTV
            if (sstv_exists)
            {
                sstv_freq = Convert.ToInt32(Math.Round(sstv_freq_slider));
                string sstv_freq_str = "";
                if (sstv_freq == 0) sstv_freq_str = "No SSTV";
                else
                {
                    if (sstv_freq == 1) sstv_freq_str = "1800-3600s";
                    else if (sstv_freq == 2) sstv_freq_str = "600-1800s";
                    else if (sstv_freq == 3) sstv_freq_str = "300-600s";
                    else if (sstv_freq == 4) sstv_freq_str = "120-300s";
                }

                _content.text = "SSTV frequency: " + sstv_freq_str;
                _content.tooltip = "How often SSTV will play";
                GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true));
                GUILayout.Label(_content, label_txt_left, GUILayout.ExpandWidth(true));
                sstv_freq_slider = GUILayout.HorizontalSlider(sstv_freq_slider, 0, 4f, GUILayout.Width(100f));
                GUILayout.EndHorizontal();

                if (sstv_freq != prev_sstv_freq)
                {
                    if (debugging) Debug.Log("[CHATR] sstv_freq has changed, setting new sstv timer limit...");
                    if (sstv_freq == 0) sstv.Stop();
                    else new_sstv_loose_timer_limit();
                    sstv_timer = 0;
                    prev_sstv_freq = sstv_freq;
                }

                _content.text = "SSTV volume: " + (sstv_vol_slider * 100).ToString("F0") + "%";
                _content.tooltip = "Volume of SSTV source";
                GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true));
                GUILayout.Label(_content, label_txt_left, GUILayout.ExpandWidth(true));
                sstv_vol_slider = GUILayout.HorizontalSlider(sstv_vol_slider, 0, 1f, GUILayout.Width(130f));
                GUILayout.EndHorizontal();

                if (sstv_vol_slider != prev_sstv_vol_slider)
                {
                    if (debugging) Debug.Log("[CHATR] Changing SSTV AudioSource volume...");
                    sstv.volume = sstv_vol_slider;
                    prev_sstv_vol_slider = sstv_vol_slider;
                }
            }
        }
chatterer