using System.Collections; using System.Collections.Generic; using System.Linq; using UnityEngine; public class MenueLoader : MonoBehaviour { public UnityEngine.UI.Slider slider; public UnityEngine.UI.Scrollbar scroll; public GameObject Entry; public GameObject EntryBuffer; private MenueBarSlider selector; private int mode; private List<string> mode_string = new List<string> { "official", "local", }; void Start() { selector = slider.GetComponent<MenueBarSlider>(); mode = -1; Clear(); } void Update() { if (mode == selector.last_active_slot) return; mode = selector.last_active_slot; GlobalStatic.SetStage("", mode == 1); GlobalStatic.ShallowLoadStages(); Dictionary<string, Stage> dict = mode == 0 ? GlobalStatic.StageOfficial : GlobalStatic.StageLocal; ListButtons(dict); scroll.numberOfSteps = dict.Count; scroll.value = 1f; } private void Clear() { for (int i = 0; i < gameObject.transform.childCount; i++) Destroy(gameObject.transform.GetChild(i).gameObject); } private void Default() { Instantiate(Entry).transform.SetParent(gameObject.transform, false); Instantiate(EntryBuffer).transform.SetParent(gameObject.transform, false); } private void ListButtons(Dictionary<string, Stage> dict) { Clear(); if (dict.Count == 0) { Default(); return; } Instantiate(EntryBuffer).transform.SetParent(gameObject.transform, false); var list = mode == 0 ? dict.Values.OrderByDescending((v) => v.number) : dict.Values.OrderBy((v) => v.number); Destroy(gameObject.transform.GetChild(0)); foreach(var stage in list) { GameObject prefab = Instantiate(Entry); prefab.transform.SetParent(gameObject.transform, false); prefab.transform.SetAsFirstSibling(); var bar = prefab.transform.GetChild(0); WriteInChildText(bar.GetChild(0).gameObject, stage.number.ToString()); WriteInChildText(bar.GetChild(1).gameObject, stage.name); WriteInChildText(bar.GetChild(2).gameObject, stage.description); // TODO: handle unable to load prefab.GetComponent<UnityEngine.UI.Button>().onClick.AddListener(delegate { Loader.LoadStage(stage.name, mode == 1); }); } void WriteInChildText(GameObject entry, string content) { if (content == null) return; entry.transform.GetChild(0).gameObject.GetComponent<TMPro.TextMeshProUGUI>().text = content; } } }