From 0bc9614efe5a7e669fef87fece44dbfc188fab7a Mon Sep 17 00:00:00 2001 From: VuNgocHaiC7 Date: Fri, 15 May 2026 17:01:02 +0700 Subject: [PATCH] update slider controller --- .../PerfectWorld/Prefab/UI/DlgSetting.prefab | 152 ++++++++++++++---- .../UI/Dialogs/Setting/SettingInterface.cs | 60 ------- .../UI/Dialogs/Setting/SettingSound.cs | 62 ------- .../UI/Dialogs/Setting/SliderController.cs | 96 +++++++++++ .../Dialogs/Setting/SliderController.cs.meta | 2 + 5 files changed, 216 insertions(+), 156 deletions(-) create mode 100644 Assets/PerfectWorld/Scripts/UI/Dialogs/Setting/SliderController.cs create mode 100644 Assets/PerfectWorld/Scripts/UI/Dialogs/Setting/SliderController.cs.meta diff --git a/Assets/PerfectWorld/Prefab/UI/DlgSetting.prefab b/Assets/PerfectWorld/Prefab/UI/DlgSetting.prefab index 36736d3324..da9ebb0a2d 100644 --- a/Assets/PerfectWorld/Prefab/UI/DlgSetting.prefab +++ b/Assets/PerfectWorld/Prefab/UI/DlgSetting.prefab @@ -1417,6 +1417,7 @@ GameObject: - component: {fileID: 6885554817198692527} - component: {fileID: 863510365847435631} - component: {fileID: 7254143063875475060} + - component: {fileID: 8468446591860041645} m_Layer: 0 m_Name: unit_2 m_TagString: Untagged @@ -1486,6 +1487,20 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 +--- !u!114 &8468446591860041645 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1207920292179733216} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bfc4382a69b985742888061ae412685f, type: 3} + m_Name: + m_EditorClassIdentifier: + slider: {fileID: 8990697129083995015} + sliderValueText: {fileID: 284675133552538515} --- !u!1 &1225941300944712843 GameObject: m_ObjectHideFlags: 0 @@ -1690,8 +1705,8 @@ RectTransform: m_Children: [] m_Father: {fileID: 4518290151127928201} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.173, y: 0} - m_AnchorMax: {x: 0.173, y: 1} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 1} m_AnchoredPosition: {x: 17.5, y: 0.54999924} m_SizeDelta: {x: 35, y: -1.0999997} m_Pivot: {x: 0.5, y: 0.5} @@ -2233,9 +2248,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 6683dd582fa268c45af1ece39633a804, type: 3} m_Name: m_EditorClassIdentifier: - slider_foresight: {fileID: 3042341277921018395} - slider_distance_npc_and_mst: {fileID: 8213436967850142730} - slider_distance_player_other: {fileID: 4632767818006488389} txt_level_of_foresight: {fileID: 6815914334339467742} txt_level_of_distance_npc_and_mst: {fileID: 6757030218926432192} txt_level_of_distance_player_other: {fileID: 7832569378395798648} @@ -3306,6 +3318,7 @@ GameObject: - component: {fileID: 2205104915353036503} - component: {fileID: 7377397793541853966} - component: {fileID: 891065746960273297} + - component: {fileID: 8903301988286719733} m_Layer: 0 m_Name: unit_3 m_TagString: Untagged @@ -3375,6 +3388,20 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 +--- !u!114 &8903301988286719733 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3860403473623573044} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bfc4382a69b985742888061ae412685f, type: 3} + m_Name: + m_EditorClassIdentifier: + slider: {fileID: 9060975845259588531} + sliderValueText: {fileID: 7313494243364841233} --- !u!1 &3877615139436312067 GameObject: m_ObjectHideFlags: 0 @@ -3664,10 +3691,10 @@ MonoBehaviour: m_FillRect: {fileID: 0} m_HandleRect: {fileID: 8994509419830078722} m_Direction: 0 - m_MinValue: 0 - m_MaxValue: 1 - m_WholeNumbers: 0 - m_Value: 0.173 + m_MinValue: 1 + m_MaxValue: 6 + m_WholeNumbers: 1 + m_Value: 1 m_OnValueChanged: m_PersistentCalls: m_Calls: [] @@ -3786,6 +3813,7 @@ GameObject: - component: {fileID: 8629057451694483415} - component: {fileID: 23856606709302476} - component: {fileID: 7734867594286663418} + - component: {fileID: 7374187120158384910} m_Layer: 0 m_Name: unit_2 m_TagString: Untagged @@ -3854,6 +3882,20 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 +--- !u!114 &7374187120158384910 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4036435431650282766} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bfc4382a69b985742888061ae412685f, type: 3} + m_Name: + m_EditorClassIdentifier: + slider: {fileID: 8213436967850142730} + sliderValueText: {fileID: 6757030218926432192} --- !u!1 &4209654354352781977 GameObject: m_ObjectHideFlags: 0 @@ -3936,10 +3978,10 @@ MonoBehaviour: m_FillRect: {fileID: 0} m_HandleRect: {fileID: 1689102852614951878} m_Direction: 0 - m_MinValue: 0 - m_MaxValue: 1 - m_WholeNumbers: 0 - m_Value: 0 + m_MinValue: 1 + m_MaxValue: 6 + m_WholeNumbers: 1 + m_Value: 1 m_OnValueChanged: m_PersistentCalls: m_Calls: [] @@ -4484,10 +4526,10 @@ MonoBehaviour: m_FillRect: {fileID: 0} m_HandleRect: {fileID: 2275052390284391803} m_Direction: 0 - m_MinValue: 0 - m_MaxValue: 1 - m_WholeNumbers: 0 - m_Value: 0 + m_MinValue: 1 + m_MaxValue: 6 + m_WholeNumbers: 1 + m_Value: 1 m_OnValueChanged: m_PersistentCalls: m_Calls: [] @@ -5417,9 +5459,6 @@ MonoBehaviour: txt_master: {fileID: 5687742036058045723} switch_off: {fileID: 21300000, guid: 9d4b52827a31d42438c5b84e7f9729a0, type: 3} switch_on: {fileID: 21300000, guid: c3391972be9854a8fa42de37bb973f08, type: 3} - slider_bgm: {fileID: 5993892601071822366} - slider_sfx: {fileID: 8990697129083995015} - slider_master: {fileID: 9060975845259588531} txt_level_of_bgm: {fileID: 3978261999845214409} txt_level_of_sfx: {fileID: 284675133552538515} txt_level_of_master: {fileID: 7313494243364841233} @@ -5455,8 +5494,8 @@ RectTransform: m_Children: [] m_Father: {fileID: 8525635121118996326} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.173, y: 0} - m_AnchorMax: {x: 0.173, y: 1} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 1} m_AnchoredPosition: {x: 17.5, y: 0.54999924} m_SizeDelta: {x: 35, y: -1.0999997} m_Pivot: {x: 0.5, y: 0.5} @@ -5580,10 +5619,10 @@ MonoBehaviour: m_FillRect: {fileID: 0} m_HandleRect: {fileID: 8996205850684322200} m_Direction: 0 - m_MinValue: 0 - m_MaxValue: 1 - m_WholeNumbers: 0 - m_Value: 0 + m_MinValue: 1 + m_MaxValue: 6 + m_WholeNumbers: 1 + m_Value: 1 m_OnValueChanged: m_PersistentCalls: m_Calls: [] @@ -6119,10 +6158,10 @@ MonoBehaviour: m_FillRect: {fileID: 0} m_HandleRect: {fileID: 2726854725950508910} m_Direction: 0 - m_MinValue: 0 - m_MaxValue: 1 - m_WholeNumbers: 0 - m_Value: 0.793 + m_MinValue: 1 + m_MaxValue: 6 + m_WholeNumbers: 1 + m_Value: 1 m_OnValueChanged: m_PersistentCalls: m_Calls: [] @@ -6434,6 +6473,7 @@ GameObject: - component: {fileID: 2852540487711165936} - component: {fileID: 1803232036181999617} - component: {fileID: 3543201618536492737} + - component: {fileID: 8696581003082592840} m_Layer: 0 m_Name: unit_1 m_TagString: Untagged @@ -6502,6 +6542,20 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 +--- !u!114 &8696581003082592840 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6391050217410555412} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bfc4382a69b985742888061ae412685f, type: 3} + m_Name: + m_EditorClassIdentifier: + slider: {fileID: 3042341277921018395} + sliderValueText: {fileID: 6815914334339467742} --- !u!1 &6572595400773280862 GameObject: m_ObjectHideFlags: 0 @@ -6659,10 +6713,10 @@ MonoBehaviour: m_FillRect: {fileID: 0} m_HandleRect: {fileID: 5352689022212559499} m_Direction: 0 - m_MinValue: 0 - m_MaxValue: 1 - m_WholeNumbers: 0 - m_Value: 0.173 + m_MinValue: 1 + m_MaxValue: 6 + m_WholeNumbers: 1 + m_Value: 1 m_OnValueChanged: m_PersistentCalls: m_Calls: [] @@ -6677,6 +6731,7 @@ GameObject: - component: {fileID: 7519066988993270530} - component: {fileID: 7164248645335517220} - component: {fileID: 4866498302031284828} + - component: {fileID: 6513137742691945821} m_Layer: 0 m_Name: unit_1 m_TagString: Untagged @@ -6746,6 +6801,20 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 +--- !u!114 &6513137742691945821 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6692563724050498116} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bfc4382a69b985742888061ae412685f, type: 3} + m_Name: + m_EditorClassIdentifier: + slider: {fileID: 5993892601071822366} + sliderValueText: {fileID: 3978261999845214409} --- !u!1 &6776695208665921981 GameObject: m_ObjectHideFlags: 0 @@ -6757,6 +6826,7 @@ GameObject: - component: {fileID: 3814723510223591699} - component: {fileID: 4395132968601301589} - component: {fileID: 3900322111327600733} + - component: {fileID: 7472743271469780325} m_Layer: 0 m_Name: unit_3 m_TagString: Untagged @@ -6825,6 +6895,20 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 +--- !u!114 &7472743271469780325 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6776695208665921981} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bfc4382a69b985742888061ae412685f, type: 3} + m_Name: + m_EditorClassIdentifier: + slider: {fileID: 4632767818006488389} + sliderValueText: {fileID: 7832569378395798648} --- !u!1 &6866865186141604476 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/PerfectWorld/Scripts/UI/Dialogs/Setting/SettingInterface.cs b/Assets/PerfectWorld/Scripts/UI/Dialogs/Setting/SettingInterface.cs index 1d5e3e38cb..c3cc3e7d98 100644 --- a/Assets/PerfectWorld/Scripts/UI/Dialogs/Setting/SettingInterface.cs +++ b/Assets/PerfectWorld/Scripts/UI/Dialogs/Setting/SettingInterface.cs @@ -19,11 +19,6 @@ namespace BrewMonster { public class SettingInterface : MonoBehaviour { - [Header("Slider")] - [SerializeField] private Slider slider_foresight; - [SerializeField] private Slider slider_distance_npc_and_mst; - [SerializeField] private Slider slider_distance_player_other; - [Header("Slider Value Level")] private float valueLevel1 = 0; private float valueLevel2 = 0.194f; @@ -44,62 +39,7 @@ namespace BrewMonster private void OnDisable() { - slider_foresight.onValueChanged.RemoveListener(OnForessightSliderChange); - slider_distance_npc_and_mst.onValueChanged.RemoveListener(OnDisNPCandMstSliderChange); - slider_distance_player_other.onValueChanged.RemoveListener(OnDisPlayerOtherSliderChange); - } - private void Update() - { - UpdateSliderText(slider_foresight, txt_level_of_foresight); - UpdateSliderText(slider_distance_npc_and_mst, txt_level_of_distance_npc_and_mst); - UpdateSliderText(slider_distance_player_other, txt_level_of_distance_player_other); - } - - private void OnForessightSliderChange(float value) - { - UpdateSliderText(slider_foresight, txt_level_of_foresight); - } - - private void OnDisNPCandMstSliderChange(float value) - { - UpdateSliderText(slider_distance_npc_and_mst, txt_level_of_distance_npc_and_mst); - } - - private void OnDisPlayerOtherSliderChange(float value) - { - UpdateSliderText(slider_distance_player_other, txt_level_of_distance_player_other); - } - - private void UpdateSliderText(Slider slider, TextMeshProUGUI text) - { - if (slider == null || text == null) - return; - - int level = GetLevelFromValue(slider.value); - text.text = $"Mức {level}"; - } - - private int GetLevelFromValue(float value) - { - float t12 = (valueLevel1 + valueLevel2) * 0.5f; - float t23 = (valueLevel2 + valueLevel3) * 0.5f; - float t34 = (valueLevel3 + valueLevel4) * 0.5f; - float t45 = (valueLevel4 + valueLevel5) * 0.5f; - float t56 = (valueLevel5 + valueLevel6) * 0.5f; - - if (value < t12) - return 1; - else if (value < t23) - return 2; - else if (value < t34) - return 3; - else if (value < t45) - return 4; - else if (value < t56) - return 5; - else - return 6; } } } diff --git a/Assets/PerfectWorld/Scripts/UI/Dialogs/Setting/SettingSound.cs b/Assets/PerfectWorld/Scripts/UI/Dialogs/Setting/SettingSound.cs index fedd2df456..d8777062db 100644 --- a/Assets/PerfectWorld/Scripts/UI/Dialogs/Setting/SettingSound.cs +++ b/Assets/PerfectWorld/Scripts/UI/Dialogs/Setting/SettingSound.cs @@ -43,11 +43,6 @@ namespace BrewMonster private Color textOnColor = new Color(0.96f, 0.84f, 0.61f); private Color textOffColor = new Color(0.6f, 0.6f, 0.6f); - [Header("Slider")] - [SerializeField] private Slider slider_bgm; - [SerializeField] private Slider slider_sfx; - [SerializeField] private Slider slider_master; - [Header("Slider Value Level")] private float valueLevel1 = 0; private float valueLevel2 = 0.173f; @@ -66,13 +61,6 @@ namespace BrewMonster private Coroutine masterCoroutine; - private void Update() - { - UpdateSliderText(slider_bgm, txt_level_of_bgm); - UpdateSliderText(slider_sfx, txt_level_of_sfx); - UpdateSliderText(slider_master, txt_level_of_master); - } - private void OnEnable() { UpdateSwitchInstant(tog_bgm, handle_bmg, txt_bgm); @@ -89,10 +77,6 @@ namespace BrewMonster tog_bgm.onValueChanged.RemoveListener(OnBgmChanged); tog_sfx.onValueChanged.RemoveListener(OnSfxChanged); tog_master.onValueChanged.RemoveListener(OnMasterChanged); - - slider_bgm.onValueChanged.RemoveListener(OnBgmSliderChanged); - slider_sfx.onValueChanged.RemoveListener(OnSfxSliderChanged); - slider_master.onValueChanged.RemoveListener(OnMasterSliderChanged); } private void OnBgmChanged(bool isOn) @@ -125,21 +109,6 @@ namespace BrewMonster // TODO: Add logic to change Master volume or mute state } - private void OnBgmSliderChanged(float value) - { - UpdateSliderText(slider_bgm, txt_level_of_bgm); - } - - private void OnSfxSliderChanged(float value) - { - UpdateSliderText(slider_sfx, txt_level_of_sfx); - } - - private void OnMasterSliderChanged(float value) - { - UpdateSliderText(slider_master, txt_level_of_master); - } - private void UpdateSwitchInstant(Toggle toggle, RectTransform handle, TextMeshProUGUI statusText) { bool isOn = toggle.isOn; @@ -214,36 +183,5 @@ namespace BrewMonster statusText.rectTransform.anchoredPosition = new Vector2(textTargetX, statusText.rectTransform.anchoredPosition.y); } } - - private void UpdateSliderText(Slider slider, TextMeshProUGUI text) - { - if(slider == null || text == null) - return; - - int level = GetLevelFromValue(slider.value); - text.text = $"Mức {level}"; - } - - private int GetLevelFromValue(float value) - { - float t12 = (valueLevel1 + valueLevel2) * 0.5f; - float t23 = (valueLevel2 + valueLevel3) * 0.5f; - float t34 = (valueLevel3 + valueLevel4) * 0.5f; - float t45 = (valueLevel4 + valueLevel5) * 0.5f; - float t56 = (valueLevel5 + valueLevel6) * 0.5f; - - if(value < t12) - return 1; - else if(value < t23) - return 2; - else if(value < t34) - return 3; - else if(value < t45) - return 4; - else if(value < t56) - return 5; - else - return 6; - } } } diff --git a/Assets/PerfectWorld/Scripts/UI/Dialogs/Setting/SliderController.cs b/Assets/PerfectWorld/Scripts/UI/Dialogs/Setting/SliderController.cs new file mode 100644 index 0000000000..56c9f95ae1 --- /dev/null +++ b/Assets/PerfectWorld/Scripts/UI/Dialogs/Setting/SliderController.cs @@ -0,0 +1,96 @@ +using BrewMonster.Assets.PerfectWorld.Scripts.UI; +using BrewMonster.Common; +using BrewMonster.Managers; +using BrewMonster.Scripts; +using BrewMonster.Scripts.Managers; +using BrewMonster.UI; +using CSNetwork.GPDataType; +using Cysharp.Threading.Tasks.Triggers; +using PerfectWorld.Scripts.Managers; +using System; +using System.Collections; +using System.Collections.Generic; +using TMPro; +using UnityEngine; +using UnityEngine.Events; +using UnityEngine.EventSystems; +using UnityEngine.UI; + +namespace BrewMonster +{ + public class SliderController : MonoBehaviour + { + + [Header("Slider")] + public Slider slider; + public TextMeshProUGUI sliderValueText; + + [Header("Action Event")] + private UnityEvent[] levelEvents = new UnityEvent[6]; + + private int currentLevel = -1; + + private void OnEnable() + { + if(slider != null) + { + slider.onValueChanged.AddListener(OnSliderValueChange); + UpdateLevelFromSlider(); + } + } + + private void OnDisable() + { + if (slider != null) + { + slider.onValueChanged.RemoveListener(OnSliderValueChange); + } + } + + private void OnSliderValueChange(float value) + { + UpdateLevelFromSlider(); + } + + private void UpdateLevelFromSlider() + { + if (slider == null) + return; + + int level = GetLevelFromValue(slider.value); + if(level != currentLevel) + { + currentLevel = level; + Invoke(level); + } + + UpdateSliderText(level); + } + + private int GetLevelFromValue(float value) + { + int level = Mathf.RoundToInt(value); + return Mathf.Clamp(level, 1, 6); + } + + private void UpdateSliderText(int level) + { + if (sliderValueText == null) + { + return; + } + sliderValueText.text = $"Mức {level}"; + } + + public void Invoke(int level) + { + int index = level - 1; + if(index < 0 || index >= levelEvents.Length) + { + return; + } + + levelEvents[index]?.Invoke(); + } + } +} diff --git a/Assets/PerfectWorld/Scripts/UI/Dialogs/Setting/SliderController.cs.meta b/Assets/PerfectWorld/Scripts/UI/Dialogs/Setting/SliderController.cs.meta new file mode 100644 index 0000000000..1f565cb775 --- /dev/null +++ b/Assets/PerfectWorld/Scripts/UI/Dialogs/Setting/SliderController.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: bfc4382a69b985742888061ae412685f \ No newline at end of file