using System; using System.Collections; using System.Collections.Generic; using UIWidgets; using UnityEngine; namespace UIWidgetsSamples { public class SteamSpyView : ListViewCustom { private bool isSteamSpyViewStarted; private SteamSpySortFields currentSortField = SteamSpySortFields.Players; private Dictionary> sortComparers; public override void Start() { if (!isSteamSpyViewStarted) { isSteamSpyViewStarted = true; sortComparers = new Dictionary> { { SteamSpySortFields.Name, NameComparer }, { SteamSpySortFields.ScoreRank, ScoreRankComparer }, { SteamSpySortFields.Owners, OwnersComparer }, { SteamSpySortFields.Players, PlayersComparer }, { SteamSpySortFields.PlayersIn2Week, PlayersIn2WeekComparer }, { SteamSpySortFields.Time, TimeComparer } }; base.Sort = false; base.Start(); StartCoroutine(LoadData()); } } public override void OnEnable() { base.OnEnable(); if (isSteamSpyViewStarted && base.DataSource.Count == 0) { StartCoroutine(LoadData()); } } private IEnumerator LoadData() { WWW www = new WWW("https://ilih.ru/steamspy/"); yield return www; string[] lines = www.text.Split('\n'); base.DataSource.BeginUpdate(); base.DataSource.Clear(); lines.ForEach(ParseLine); base.DataSource.EndUpdate(); } private void ParseLine(string line) { if (!(line == string.Empty)) { string[] array = line.Split('\t'); SteamSpyItem steamSpyItem = new SteamSpyItem(); steamSpyItem.Name = array[0]; steamSpyItem.ScoreRank = ((!(array[1] == string.Empty)) ? int.Parse(array[1]) : (-1)); steamSpyItem.Owners = int.Parse(array[2]); steamSpyItem.OwnersVariance = int.Parse(array[3]); steamSpyItem.Players = int.Parse(array[4]); steamSpyItem.PlayersVariance = int.Parse(array[5]); steamSpyItem.PlayersIn2Week = int.Parse(array[6]); steamSpyItem.PlayersIn2WeekVariance = int.Parse(array[7]); steamSpyItem.AverageTimeIn2Weeks = int.Parse(array[8]); steamSpyItem.MedianTimeIn2Weeks = int.Parse(array[9]); SteamSpyItem item = steamSpyItem; base.DataSource.Add(item); } } protected override void SetData(SteamSpyComponent component, SteamSpyItem item) { component.SetData(item); } protected override void HighlightColoring(SteamSpyComponent component) { component.Name.color = HighlightedColor; component.ScoreRank.color = HighlightedColor; component.Owners.color = HighlightedColor; component.Players.color = HighlightedColor; component.PlayersIn2Week.color = HighlightedColor; component.TimeIn2Week.color = HighlightedColor; } protected override void SelectColoring(SteamSpyComponent component) { component.Name.color = base.SelectedColor; component.ScoreRank.color = base.SelectedColor; component.Owners.color = base.SelectedColor; component.Players.color = base.SelectedColor; component.PlayersIn2Week.color = base.SelectedColor; component.TimeIn2Week.color = base.SelectedColor; } protected override void DefaultColoring(SteamSpyComponent component) { component.Name.color = base.DefaultColor; component.ScoreRank.color = base.DefaultColor; component.Owners.color = base.DefaultColor; component.Players.color = base.DefaultColor; component.PlayersIn2Week.color = base.DefaultColor; component.TimeIn2Week.color = base.DefaultColor; } public void ToggleSort(SteamSpySortFields field) { if (field == currentSortField) { base.DataSource.Reverse(); } else if (sortComparers.ContainsKey(field)) { currentSortField = field; base.DataSource.Sort(sortComparers[field]); } } public void SortByName() { ToggleSort(SteamSpySortFields.Name); } public void SortByScoreRank() { ToggleSort(SteamSpySortFields.ScoreRank); } public void SortByOwners() { ToggleSort(SteamSpySortFields.Owners); } public void SortByPlayers() { ToggleSort(SteamSpySortFields.Players); } public void SortByPlayersIn2Week() { ToggleSort(SteamSpySortFields.PlayersIn2Week); } public void SortByTime() { ToggleSort(SteamSpySortFields.Time); } protected static int NameComparer(SteamSpyItem x, SteamSpyItem y) { return x.Name.CompareTo(y.Name); } protected static int ScoreRankComparer(SteamSpyItem x, SteamSpyItem y) { return x.ScoreRank.CompareTo(y.ScoreRank); } protected static int OwnersComparer(SteamSpyItem x, SteamSpyItem y) { return x.Owners.CompareTo(y.Owners); } protected static int PlayersComparer(SteamSpyItem x, SteamSpyItem y) { return x.Players.CompareTo(y.Players); } protected static int PlayersIn2WeekComparer(SteamSpyItem x, SteamSpyItem y) { return x.PlayersIn2Week.CompareTo(y.PlayersIn2Week); } protected static int TimeComparer(SteamSpyItem x, SteamSpyItem y) { return x.AverageTimeIn2Weeks.CompareTo(y.AverageTimeIn2Weeks); } } }