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);
}
}
}
}