天津23维预案
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

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