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;
}
}
}