namespace UIWidgets.Examples { using System.Collections; using UIWidgets; using UnityEngine; /// /// Test ScrollRect Events. /// [RequireComponent(typeof(ScrollRectEvents))] public class TestScrollRectEvents : MonoBehaviour { static char[] LineEnd = new char[] { '\n' }; static char[] Separator = new char[] { '\t' }; /// /// ListView. /// [SerializeField] public ListViewIcons ListView; /// /// Data /// protected ObservableList Data; bool isInited; /// /// Start this instance. /// protected virtual void Start() { Init(); } /// /// Init this instance. /// [System.Diagnostics.CodeAnalysis.SuppressMessage("Performance", "HAA0603:Delegate allocation from a method group", Justification = "Required")] protected virtual void Init() { if (isInited) { return; } isInited = true; #pragma warning disable 0618 ListView.Sort = false; #pragma warning restore 0618 Data = ListView.DataSource; Data.Comparison = null; ListView.Init(); var scrollRectEvents = GetComponent(); if (scrollRectEvents != null) { scrollRectEvents.OnPullUp.AddListener(Refresh); scrollRectEvents.OnPullDown.AddListener(LoadMore); } } /// /// Handle enable event. /// protected virtual void OnEnable() { Init(); StartCoroutine(LoadData(0)); } /// /// Load data. /// /// Start index. /// Coroutine. protected virtual IEnumerator LoadData(int start) { if (start == 0) { Data.Clear(); } var lines = Compatibility.EmptyArray(); var url = string.Format("https://ilih.ru/steamspy/?start={0}", start.ToString()); #if UNITY_2018_3_OR_NEWER using (var www = UnityEngine.Networking.UnityWebRequest.Get(new System.Uri(url))) { yield return www.SendWebRequest(); if (Compatibility.IsError(www)) { Debug.Log(www.error); } else { lines = www.downloadHandler.text.Split(LineEnd); } } #else WWW www = new WWW(url); yield return www; lines = www.text.Split(LineEnd); www.Dispose(); #endif Data.BeginUpdate(); foreach (var line in lines) { ParseLine(line); } Data.EndUpdate(); } /// /// Parse line. /// /// Line. protected virtual void ParseLine(string line) { if (string.IsNullOrEmpty(line)) { return; } var info = line.Split(Separator); var item = new ListViewIconsItemDescription() { Name = string.Format("{0}. {1}", (Data.Count + 1).ToString(), info[0]), }; Data.Add(item); } /// /// Load initial data. /// public void Refresh() { StartCoroutine(LoadData(0)); } /// /// Load more data. /// public void LoadMore() { StartCoroutine(LoadData(Data.Count)); } /// /// Remove listeners. /// [System.Diagnostics.CodeAnalysis.SuppressMessage("Performance", "HAA0603:Delegate allocation from a method group", Justification = "Required")] protected virtual void OnDestroy() { var scrollRectEvents = GetComponent(); if (scrollRectEvents != null) { scrollRectEvents.OnPullUp.RemoveListener(Refresh); scrollRectEvents.OnPullDown.RemoveListener(LoadMore); } } } }