Files
2026-02-21 16:45:37 +08:00

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