/* --------------------------------------- * Author: Martin Pane (martintayx@gmail.com) (@tayx94) * Collaborators: Lars Aalbertsen (@Rockylars) * Project: Graphy - Ultimate Stats Monitor * Date: 28-Feb-18 * Studio: Tayx * * This project is released under the MIT license. * Attribution is not required, but it is always welcomed! * -------------------------------------*/ using System; using UnityEngine; using UnityEngine.UI; using System.Collections; using System.Collections.Generic; using Random = UnityEngine.Random; namespace Tayx.Graphy.CustomizationScene { public class CustomizeGraphy : MonoBehaviour { /* ----- TODO: ---------------------------- * Check if we can seal this class. * Add summaries to the variables. * Add summaries to the functions. * Check if we can remove "using System.Collections;". * Check if we can remove "using Random = UnityEngine.Random;". * Check if we can remove the UnityEngine prefix on the PlayRandomSFX function * --------------------------------------*/ #region Variables -> Serialized Private [Header("Customize Graphy")] [SerializeField] private G_CUIColorPicker m_colorPicker; [SerializeField] private Toggle m_backgroundToggle; [SerializeField] private Dropdown m_graphyModeDropdown; [SerializeField] private Button m_backgroundColorButton; [SerializeField] private Dropdown m_graphModulePositionDropdown; #region Section -> FPS [Header("Fps")] [SerializeField] private Dropdown m_fpsModuleStateDropdown; [SerializeField] private InputField m_goodInputField; [SerializeField] private InputField m_cautionInputField; [SerializeField] private Button m_goodColorButton; [SerializeField] private Button m_cautionColorButton; [SerializeField] private Button m_criticalColorButton; [SerializeField] private Slider m_timeToResetMinMaxSlider; [SerializeField] private Slider m_fpsGraphResolutionSlider; [SerializeField] private Slider m_fpsTextUpdateRateSlider; #endregion #region Section -> RAM [Header("Memory")] [SerializeField] private Dropdown m_ramModuleStateDropdown; [SerializeField] private Button m_reservedColorButton; [SerializeField] private Button m_allocatedColorButton; [SerializeField] private Button m_monoColorButton; [SerializeField] private Slider m_ramGraphResolutionSlider; [SerializeField] private Slider m_ramTextUpdateRateSlider; #endregion #region Section -> Audio [Header("Audio")] [SerializeField] private Dropdown m_audioModuleStateDropdown; [SerializeField] private Button m_audioGraphColorButton; [SerializeField] private Dropdown m_findAudioListenerDropdown; [SerializeField] private Dropdown m_fttWindowDropdown; [SerializeField] private Slider m_spectrumSizeSlider; [SerializeField] private Slider m_audioGraphResolutionSlider; [SerializeField] private Slider m_audioTextUpdateRateSlider; #endregion #region Section -> Advanced [Header("Advanced")] [SerializeField] private Dropdown m_advancedModulePositionDropdown; [SerializeField] private Toggle m_advancedModuleToggle; #endregion #region Section -> Other [Header("Other")] [SerializeField] private Button m_musicButton; [SerializeField] private Button m_sfxButton; [SerializeField] private Slider m_musicVolumeSlider; [SerializeField] private Slider m_sfxVolumeSlider; [SerializeField] private AudioSource m_musicAudioSource; [SerializeField] private AudioSource m_sfxAudioSource; [SerializeField] private List m_sfxAudioClips = new List(); #endregion #endregion #region Variables -> Private private GraphyManager m_graphyManager; #endregion #region Methods -> Unity Callbacks private void OnEnable() { m_graphyManager = GraphyManager.Instance; SetupCallbacks(); } #endregion #region Methods -> Private private void SetupCallbacks() { // Remove all listeners first -------------------------------- m_backgroundToggle.onValueChanged.RemoveAllListeners(); m_backgroundColorButton.onClick.RemoveAllListeners(); m_graphyModeDropdown.onValueChanged.RemoveAllListeners(); m_graphModulePositionDropdown.onValueChanged.RemoveAllListeners(); #region Section -> FPS m_fpsModuleStateDropdown.onValueChanged.RemoveAllListeners(); m_goodInputField.onValueChanged.RemoveAllListeners(); m_cautionInputField.onValueChanged.RemoveAllListeners(); m_goodColorButton.onClick.RemoveAllListeners(); m_cautionColorButton.onClick.RemoveAllListeners(); m_criticalColorButton.onClick.RemoveAllListeners(); m_timeToResetMinMaxSlider.onValueChanged.RemoveAllListeners(); m_fpsGraphResolutionSlider.onValueChanged.RemoveAllListeners(); m_fpsTextUpdateRateSlider.onValueChanged.RemoveAllListeners(); #endregion #region Section -> RAM m_ramModuleStateDropdown.onValueChanged.RemoveAllListeners(); m_reservedColorButton.onClick.RemoveAllListeners(); m_allocatedColorButton.onClick.RemoveAllListeners(); m_monoColorButton.onClick.RemoveAllListeners(); m_ramGraphResolutionSlider.onValueChanged.RemoveAllListeners(); m_ramTextUpdateRateSlider.onValueChanged.RemoveAllListeners(); #endregion #region Section -> Audio m_audioModuleStateDropdown.onValueChanged.RemoveAllListeners(); m_audioGraphColorButton.onClick.RemoveAllListeners(); m_findAudioListenerDropdown.onValueChanged.RemoveAllListeners(); m_fttWindowDropdown.onValueChanged.RemoveAllListeners(); m_spectrumSizeSlider.onValueChanged.RemoveAllListeners(); m_audioGraphResolutionSlider.onValueChanged.RemoveAllListeners(); m_audioTextUpdateRateSlider.onValueChanged.RemoveAllListeners(); #endregion #region Section -> Advanced m_advancedModulePositionDropdown.onValueChanged.RemoveAllListeners(); m_advancedModuleToggle.onValueChanged.RemoveAllListeners(); #endregion #region Section -> Other m_musicButton.onClick.RemoveAllListeners(); m_sfxButton.onClick.RemoveAllListeners(); m_musicVolumeSlider.onValueChanged.RemoveAllListeners(); m_sfxVolumeSlider.onValueChanged.RemoveAllListeners(); #endregion // Add listeners -------------------------------- m_backgroundToggle.onValueChanged.AddListener( value => m_graphyManager.Background = value); m_backgroundColorButton.onClick.AddListener(() => { m_colorPicker.SetOnValueChangeCallback(null); m_colorPicker.Color = m_backgroundColorButton.GetComponent().color; m_colorPicker.SetOnValueChangeCallback(color => { m_backgroundColorButton.GetComponent().color = color; m_graphyManager.BackgroundColor = color; }); }); m_graphyModeDropdown.onValueChanged.AddListener(value => { switch ((GraphyManager.Mode)value) { case GraphyManager.Mode.FULL: m_fpsGraphResolutionSlider.maxValue = 300f; m_ramGraphResolutionSlider.maxValue = 300f; m_audioGraphResolutionSlider.maxValue = 300f; break; case GraphyManager.Mode.LIGHT: m_fpsGraphResolutionSlider.maxValue = 128f; m_ramGraphResolutionSlider.maxValue = 128f; m_audioGraphResolutionSlider.maxValue = 128f; break; } m_graphyManager.GraphyMode = (GraphyManager.Mode)value; }); m_graphModulePositionDropdown.onValueChanged.AddListener( value => m_graphyManager.GraphModulePosition = (GraphyManager.ModulePosition)value); #region Section -> FPS m_fpsModuleStateDropdown.onValueChanged.AddListener( value => m_graphyManager.FpsModuleState = (GraphyManager.ModuleState)value); m_goodInputField.onValueChanged.AddListener(value => { int threshold; if (Int32.TryParse(value, out threshold)) { m_graphyManager.GoodFPSThreshold = threshold; } }); m_cautionInputField.onValueChanged.AddListener(value => { int threshold; if (Int32.TryParse(value, out threshold)) { m_graphyManager.CautionFPSThreshold = threshold; } }); m_goodColorButton.onClick.AddListener(() => { m_colorPicker.SetOnValueChangeCallback(null); m_colorPicker.Color = m_goodColorButton.GetComponent().color; m_colorPicker.SetOnValueChangeCallback(color => { m_goodColorButton.GetComponent().color = color; m_graphyManager.GoodFPSColor = color; }); }); m_cautionColorButton.onClick.AddListener(() => { m_colorPicker.SetOnValueChangeCallback(null); m_colorPicker.Color = m_cautionColorButton.GetComponent().color; m_colorPicker.SetOnValueChangeCallback(color => { m_cautionColorButton.GetComponent().color = color; m_graphyManager.CautionFPSColor = color; }); }); m_criticalColorButton.onClick.AddListener(() => { m_colorPicker.SetOnValueChangeCallback(null); m_colorPicker.Color = m_criticalColorButton.GetComponent().color; m_colorPicker.SetOnValueChangeCallback(color => { m_criticalColorButton.GetComponent().color = color; m_graphyManager.CriticalFPSColor = color; }); }); m_timeToResetMinMaxSlider.onValueChanged.AddListener( value => m_graphyManager.TimeToResetMinMaxFps = (int)value); m_fpsGraphResolutionSlider.onValueChanged.AddListener( value => m_graphyManager.FpsGraphResolution = (int)value); m_fpsTextUpdateRateSlider.onValueChanged.AddListener( value => m_graphyManager.FpsTextUpdateRate = (int)value); #endregion #region Section -> RAM m_ramModuleStateDropdown.onValueChanged.AddListener( value => m_graphyManager.RamModuleState = (GraphyManager.ModuleState)value); m_reservedColorButton.onClick.AddListener(() => { m_colorPicker.SetOnValueChangeCallback(null); m_colorPicker.Color = m_reservedColorButton.GetComponent().color; m_colorPicker.SetOnValueChangeCallback(color => { m_reservedColorButton.GetComponent().color = color; m_graphyManager.ReservedRamColor = color; }); }); m_allocatedColorButton.onClick.AddListener(() => { m_colorPicker.SetOnValueChangeCallback(null); m_colorPicker.Color = m_allocatedColorButton.GetComponent().color; m_colorPicker.SetOnValueChangeCallback(color => { m_allocatedColorButton.GetComponent().color = color; m_graphyManager.AllocatedRamColor = color; }); }); m_monoColorButton.onClick.AddListener(() => { m_colorPicker.SetOnValueChangeCallback(null); m_colorPicker.Color = m_monoColorButton.GetComponent().color; m_colorPicker.SetOnValueChangeCallback(color => { m_monoColorButton.GetComponent().color = color; m_graphyManager.MonoRamColor = color; }); }); m_ramGraphResolutionSlider.onValueChanged.AddListener( value => m_graphyManager.RamGraphResolution = (int)value); m_ramTextUpdateRateSlider.onValueChanged.AddListener( value => m_graphyManager.RamTextUpdateRate = (int)value); #endregion #region Section -> Audio m_audioModuleStateDropdown.onValueChanged.AddListener( value => m_graphyManager.AudioModuleState = (GraphyManager.ModuleState)value); m_audioGraphColorButton.onClick.AddListener(() => { m_colorPicker.SetOnValueChangeCallback(null); m_colorPicker.Color = m_audioGraphColorButton.GetComponent().color; m_colorPicker.SetOnValueChangeCallback(color => { m_audioGraphColorButton.GetComponent().color = color; m_graphyManager.AudioGraphColor = color; }); }); m_findAudioListenerDropdown.onValueChanged.AddListener( value => m_graphyManager.FindAudioListenerInCameraIfNull = (GraphyManager.LookForAudioListener)value); m_fttWindowDropdown.onValueChanged.AddListener( value => m_graphyManager.FftWindow = (FFTWindow)value); m_spectrumSizeSlider.onValueChanged.AddListener( value => m_graphyManager.SpectrumSize = (int)value); m_audioGraphResolutionSlider.onValueChanged.AddListener( value => m_graphyManager.AudioGraphResolution = (int)value); m_audioTextUpdateRateSlider.onValueChanged.AddListener( value => m_graphyManager.AudioTextUpdateRate = (int)value); #endregion #region Section -> Advanced m_advancedModulePositionDropdown.onValueChanged.AddListener( value => m_graphyManager.AdvancedModulePosition = (GraphyManager.ModulePosition)value); m_advancedModuleToggle.onValueChanged.AddListener( value => m_graphyManager.AdvancedModuleState = value ? GraphyManager.ModuleState.FULL : GraphyManager.ModuleState.OFF); #endregion #region Section -> Other m_musicButton.onClick.AddListener(ToggleMusic); m_sfxButton.onClick.AddListener(PlayRandomSFX); m_musicVolumeSlider.onValueChanged.AddListener( value => m_musicAudioSource.volume = value / 100f); m_sfxVolumeSlider.onValueChanged.AddListener( value => m_sfxAudioSource.volume = value / 100f); #endregion } private void ToggleMusic() { if (m_musicAudioSource.isPlaying) { m_musicAudioSource.Pause(); } else { m_musicAudioSource.Play(); } } private void PlayRandomSFX() { if (m_sfxAudioClips.Count > 0) { m_sfxAudioSource.clip = m_sfxAudioClips[UnityEngine.Random.Range(0, m_sfxAudioClips.Count)]; m_sfxAudioSource.Play(); } } #endregion } }