1
0
mirror of https://github.com/ppy/osu.git synced 2025-02-13 14:53:21 +08:00

Add saving + reloading (to/from drawings_results.txt) functionality.

This commit is contained in:
smoogipooo 2017-03-02 12:02:50 +09:00
parent 35d246b59d
commit 1a4f0a92a5
4 changed files with 106 additions and 14 deletions

View File

@ -30,11 +30,12 @@ namespace osu.Game.Screens.Tournament
private ScrollingTeamContainer teamsContainer;
private GroupsContainer groupsContainer;
private List<Team> allTeams = new List<Team>();
private DrawingsConfigManager drawingsConfig;
public Drawings()
{
}
private Task lastWriteOp;
private Task writeOp;
[BackgroundDependencyLoader]
private void load(Framework.Game game, TextureStore textures)
@ -202,7 +203,7 @@ namespace osu.Game.Screens.Tournament
RelativeSizeAxes = Axes.X,
Text = "Reset",
Action = reset
Action = () => reset(false)
}
}
}
@ -229,16 +230,38 @@ namespace osu.Game.Screens.Tournament
st.Text = t.Team.FullName;
st.FadeIn(200);
writeResults(groupsContainer.ToStringRepresentation());
};
teamsContainer.OnScrollStarted += () => st.FadeOut(200);
reloadTeams();
reset(true);
}
private void writeResults(string text)
{
lastWriteOp = writeOp;
writeOp = Task.Run(async () =>
{
if (lastWriteOp != null)
await lastWriteOp;
// Write to drawings_results
try
{
File.WriteAllText("drawings_results.txt", text);
}
catch
{
}
});
}
private void reloadTeams()
{
teamsContainer.ClearTeams();
allTeams.Clear();
try
{
@ -255,23 +278,61 @@ namespace osu.Game.Screens.Tournament
if (groupsContainer.ContainsTeam(name))
continue;
teamsContainer.AddTeam(new Team()
Team t = new Team()
{
FlagName = flagName,
FullName = name,
Acronym = acronym
});
};
allTeams.Add(t);
teamsContainer.AddTeam(t);
}
}
catch { }
}
private void reset()
private void reset(bool loadLastResults = false)
{
groupsContainer.ClearTeams();
teamsContainer.ClearTeams();
reloadTeams();
try
{
if (loadLastResults)
{
// Read from drawings_results
using (StreamReader sr = new StreamReader(File.OpenRead("drawings_results.txt")))
{
while (sr.Peek() != -1)
{
string line = sr.ReadLine();
if (string.IsNullOrEmpty(line))
continue;
if (line.ToUpper().StartsWith("GROUP"))
continue;
Team teamToAdd = allTeams.FirstOrDefault(t => t.FullName == line);
if (teamToAdd == null)
continue;
groupsContainer.AddTeam(teamToAdd);
teamsContainer.RemoveTeam(teamToAdd);
}
}
}
else
{
writeResults(string.Empty);
}
}
catch
{
}
}
}
}

View File

@ -147,6 +147,14 @@ namespace osu.Game.Screens.Tournament
bottomTeamsCount = 0;
}
public string ToStringRepresentation()
{
StringBuilder sb = new StringBuilder();
foreach (GroupTeam gt in allTeams)
sb.AppendLine(gt.Team.FullName);
return sb.ToString();
}
class GroupTeam : Container
{
public Team Team;

View File

@ -62,12 +62,12 @@ namespace osu.Game.Screens.Tournament
public void AddTeam(Team team)
{
for (int i = 0; i < allGroups.Count; i++)
foreach (Group g in allGroups)
{
if (allGroups[i].TeamsCount == maxTeams)
if (g.TeamsCount == maxTeams)
continue;
allGroups[i].AddTeam(team);
g.AddTeam(team);
break;
}
}
@ -79,9 +79,9 @@ namespace osu.Game.Screens.Tournament
public bool RemoveTeam(Team team)
{
for (int i = 0; i < allGroups.Count; i++)
foreach (Group g in allGroups)
{
if (allGroups[i].RemoveTeam(team))
if (g.RemoveTeam(team))
return true;
}
@ -95,5 +95,20 @@ namespace osu.Game.Screens.Tournament
allGroups[i].ClearTeams();
}
}
public string ToStringRepresentation()
{
StringBuilder sb = new StringBuilder();
foreach (Group g in allGroups)
{
if (g != allGroups.First())
sb.AppendLine();
sb.AppendLine($"Group {g.GroupName}");
sb.Append(g.ToStringRepresentation());
}
return sb.ToString();
}
}
}

View File

@ -169,6 +169,8 @@ namespace osu.Game.Screens.Tournament
public void RemoveTeam(Team team)
{
availableTeams.Remove(team);
foreach (var c in Children)
{
ScrollingTeam st = c as ScrollingTeam;
@ -186,11 +188,17 @@ namespace osu.Game.Screens.Tournament
public void StartScrolling()
{
if (availableTeams.Count == 0)
return;
scrollState = ScrollState.Scrolling;
}
public void StopScrolling()
{
if (availableTeams.Count == 0)
return;
scrollState = ScrollState.Stopping;
}