You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
220 lines
4.9 KiB
220 lines
4.9 KiB
2 years ago
|
using UnityEngine;
|
||
|
using System.Collections;
|
||
|
using System.Collections.Generic;
|
||
|
using System;
|
||
|
using UIWidgets;
|
||
|
|
||
|
namespace UIWidgetsSamples {
|
||
|
public enum SteamSpySortFields
|
||
|
{
|
||
|
Name,
|
||
|
ScoreRank,
|
||
|
Owners,
|
||
|
Players,
|
||
|
PlayersIn2Week,
|
||
|
Time,
|
||
|
}
|
||
|
|
||
|
public class SteamSpyView : ListViewCustomHeight<SteamSpyComponent,SteamSpyItem> {
|
||
|
bool isSteamSpyViewStarted;
|
||
|
|
||
|
public override void Start()
|
||
|
{
|
||
|
if (isSteamSpyViewStarted)
|
||
|
{
|
||
|
return ;
|
||
|
}
|
||
|
|
||
|
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},
|
||
|
};
|
||
|
|
||
|
Sort = false;
|
||
|
base.Start();
|
||
|
|
||
|
StartCoroutine(LoadData());
|
||
|
}
|
||
|
|
||
|
public override void OnEnable()
|
||
|
{
|
||
|
base.OnEnable();
|
||
|
if (isSteamSpyViewStarted && DataSource.Count==0)
|
||
|
{
|
||
|
StartCoroutine(LoadData());
|
||
|
}
|
||
|
}
|
||
|
|
||
|
IEnumerator LoadData()
|
||
|
{
|
||
|
WWW www = new WWW("https://ilih.ru/steamspy/");
|
||
|
yield return www;
|
||
|
|
||
|
var lines = www.text.Split('\n');
|
||
|
|
||
|
DataSource.BeginUpdate();
|
||
|
|
||
|
DataSource.Clear();
|
||
|
|
||
|
lines.ForEach(ParseLine);
|
||
|
|
||
|
DataSource.EndUpdate();
|
||
|
}
|
||
|
|
||
|
void ParseLine(string line)
|
||
|
{
|
||
|
if (line=="")
|
||
|
{
|
||
|
return ;
|
||
|
}
|
||
|
var info = line.Split('\t');
|
||
|
|
||
|
var item = new SteamSpyItem(){
|
||
|
Name = info[0],
|
||
|
ScoreRank = (info[1]=="") ? -1 : int.Parse(info[1]),
|
||
|
|
||
|
Owners = int.Parse(info[2]),
|
||
|
OwnersVariance = int.Parse(info[3]),
|
||
|
|
||
|
Players = int.Parse(info[4]),
|
||
|
PlayersVariance = int.Parse(info[5]),
|
||
|
|
||
|
PlayersIn2Week = int.Parse(info[6]),
|
||
|
PlayersIn2WeekVariance = int.Parse(info[7]),
|
||
|
|
||
|
AverageTimeIn2Weeks = int.Parse(info[8]),
|
||
|
MedianTimeIn2Weeks = int.Parse(info[9]),
|
||
|
};
|
||
|
DataSource.Add(item);
|
||
|
}
|
||
|
|
||
|
protected override void SetData(SteamSpyComponent component, SteamSpyItem item)
|
||
|
{
|
||
|
component.SetData(item);
|
||
|
}
|
||
|
|
||
|
protected override void HighlightColoring(SteamSpyComponent component)
|
||
|
{
|
||
|
//base.HighlightColoring(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)
|
||
|
{
|
||
|
//base.SelectColoring(component);
|
||
|
|
||
|
component.Name.color = SelectedColor;
|
||
|
component.ScoreRank.color = SelectedColor;
|
||
|
component.Owners.color = SelectedColor;
|
||
|
component.Players.color = SelectedColor;
|
||
|
component.PlayersIn2Week.color = SelectedColor;
|
||
|
component.TimeIn2Week.color = SelectedColor;
|
||
|
}
|
||
|
|
||
|
protected override void DefaultColoring(SteamSpyComponent component)
|
||
|
{
|
||
|
//base.DefaultColoring(component);
|
||
|
|
||
|
component.Name.color = DefaultColor;
|
||
|
component.ScoreRank.color = DefaultColor;
|
||
|
component.Owners.color = DefaultColor;
|
||
|
component.Players.color = DefaultColor;
|
||
|
component.PlayersIn2Week.color = DefaultColor;
|
||
|
component.TimeIn2Week.color = DefaultColor;
|
||
|
}
|
||
|
|
||
|
SteamSpySortFields currentSortField = SteamSpySortFields.Players;
|
||
|
|
||
|
Dictionary<SteamSpySortFields,Comparison<SteamSpyItem>> sortComparers;
|
||
|
|
||
|
public void ToggleSort(SteamSpySortFields field)
|
||
|
{
|
||
|
if (field==currentSortField)
|
||
|
{
|
||
|
DataSource.Reverse();
|
||
|
}
|
||
|
else if (sortComparers.ContainsKey(field))
|
||
|
{
|
||
|
currentSortField = field;
|
||
|
|
||
|
DataSource.Sort(sortComparers[field]);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
#region used in Button.OnClick()
|
||
|
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);
|
||
|
}
|
||
|
#endregion
|
||
|
|
||
|
#region Items comparers
|
||
|
static protected int NameComparer(SteamSpyItem x, SteamSpyItem y)
|
||
|
{
|
||
|
return x.Name.CompareTo(y.Name);
|
||
|
}
|
||
|
|
||
|
static protected int ScoreRankComparer(SteamSpyItem x, SteamSpyItem y)
|
||
|
{
|
||
|
return x.ScoreRank.CompareTo(y.ScoreRank);
|
||
|
}
|
||
|
|
||
|
static protected int OwnersComparer(SteamSpyItem x, SteamSpyItem y)
|
||
|
{
|
||
|
return x.Owners.CompareTo(y.Owners);
|
||
|
}
|
||
|
|
||
|
static protected int PlayersComparer(SteamSpyItem x, SteamSpyItem y)
|
||
|
{
|
||
|
return x.Players.CompareTo(y.Players);
|
||
|
}
|
||
|
|
||
|
static protected int PlayersIn2WeekComparer(SteamSpyItem x, SteamSpyItem y)
|
||
|
{
|
||
|
return x.PlayersIn2Week.CompareTo(y.PlayersIn2Week);
|
||
|
}
|
||
|
|
||
|
static protected int TimeComparer(SteamSpyItem x, SteamSpyItem y)
|
||
|
{
|
||
|
return x.AverageTimeIn2Weeks.CompareTo(y.AverageTimeIn2Weeks);
|
||
|
}
|
||
|
#endregion
|
||
|
}
|
||
|
}
|