205 lines
5.1 KiB
C#
205 lines
5.1 KiB
C#
using System;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UIWidgets;
|
|
using UnityEngine;
|
|
|
|
namespace UIWidgetsSamples
|
|
{
|
|
public class SteamSpyView : ListViewCustom<SteamSpyComponent, SteamSpyItem>
|
|
{
|
|
private bool isSteamSpyViewStarted;
|
|
|
|
private SteamSpySortFields currentSortField = SteamSpySortFields.Players;
|
|
|
|
private Dictionary<SteamSpySortFields, Comparison<SteamSpyItem>> sortComparers;
|
|
|
|
public override void Start()
|
|
{
|
|
if (!isSteamSpyViewStarted)
|
|
{
|
|
isSteamSpyViewStarted = true;
|
|
sortComparers = new Dictionary<SteamSpySortFields, Comparison<SteamSpyItem>>
|
|
{
|
|
{
|
|
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);
|
|
}
|
|
}
|
|
}
|