using System; using System.Collections; using System.Collections.Generic; using Kill.Managers; using UnityEngine; using UnityEngine.UI; namespace Kill.UI.Components { public class RepeatSelection : MonoBehaviour { /// /// 0周日 1周一 2周二 3周三 4周四 5周五 6周六 /// public Button[] repeatButtons; /// /// 0未选中 1已选中 /// public Sprite[] repeatSprites; public List selectedDays; List weekStr = new List(); List weekStrKeys = new List { "100130", "100124", "100125", "100126", "100127", "100128", "100129" }; List shortWeekStr = new List(); List shortWeekStrKeys = new List { "100137", "100131", "100132", "100133", "100134", "100135", "100136" }; string dailyKey = "100138"; string dailyStr = ""; public Button confirmButton; public Button cancelButton; public Text repeatText; Action, string> OnConfirm; private void Start() { // #if UNITY_EDITOR // Init(new List{1,2},null); // #endif } public void Init(List days, Action, string> onConfirm) { foreach (var item in weekStrKeys) { string str = LanguageManager.Instance.GetLanguage(item); weekStr.Add(str); } foreach (var item in shortWeekStrKeys) { string str = LanguageManager.Instance.GetLanguage(item); shortWeekStr.Add(str); } dailyStr = LanguageManager.Instance.GetLanguage(dailyKey); selectedDays.Clear(); selectedDays = days; for (int i = 0; i < repeatButtons.Length; i++) { int index = i; repeatButtons[i].onClick.RemoveAllListeners(); repeatButtons[i].onClick.AddListener(() => OnButtonClick(index)); repeatButtons[i].GetComponent().sprite = repeatSprites[selectedDays.Contains(index) ? 1 : 0]; repeatButtons[i].GetComponentInChildren().text = shortWeekStr[index]; } OnConfirm = onConfirm; confirmButton.onClick.RemoveAllListeners(); cancelButton.onClick.RemoveAllListeners(); confirmButton.onClick.AddListener(() => { OnConfirm?.Invoke(selectedDays, repeatText.text); Destroy(gameObject); }); cancelButton.onClick.AddListener(() => Destroy(gameObject)); UpdateText(); } public void OnButtonClick(int index) { if (selectedDays.Contains(index)) { selectedDays.Remove(index); repeatButtons[index].GetComponent().sprite = repeatSprites[0]; } else { selectedDays.Add(index); repeatButtons[index].GetComponent().sprite = repeatSprites[1]; } selectedDays.Sort(); UpdateText(); } public void UpdateText() { if (selectedDays.Count == 7) { repeatText.text = dailyStr; } else { repeatText.text = ""; foreach (var item in selectedDays) { repeatText.text += weekStr[item] + ","; } repeatText.text = repeatText.text.TrimEnd(','); } } } }