1
0
mirror of https://github.com/ppy/osu.git synced 2025-02-13 21:12:55 +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 ScrollingTeamContainer teamsContainer;
private GroupsContainer groupsContainer; private GroupsContainer groupsContainer;
private List<Team> allTeams = new List<Team>();
private DrawingsConfigManager drawingsConfig; private DrawingsConfigManager drawingsConfig;
public Drawings() private Task lastWriteOp;
{ private Task writeOp;
}
[BackgroundDependencyLoader] [BackgroundDependencyLoader]
private void load(Framework.Game game, TextureStore textures) private void load(Framework.Game game, TextureStore textures)
@ -202,7 +203,7 @@ namespace osu.Game.Screens.Tournament
RelativeSizeAxes = Axes.X, RelativeSizeAxes = Axes.X,
Text = "Reset", Text = "Reset",
Action = reset Action = () => reset(false)
} }
} }
} }
@ -229,16 +230,38 @@ namespace osu.Game.Screens.Tournament
st.Text = t.Team.FullName; st.Text = t.Team.FullName;
st.FadeIn(200); st.FadeIn(200);
writeResults(groupsContainer.ToStringRepresentation());
}; };
teamsContainer.OnScrollStarted += () => st.FadeOut(200); 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() private void reloadTeams()
{ {
teamsContainer.ClearTeams(); teamsContainer.ClearTeams();
allTeams.Clear();
try try
{ {
@ -255,23 +278,61 @@ namespace osu.Game.Screens.Tournament
if (groupsContainer.ContainsTeam(name)) if (groupsContainer.ContainsTeam(name))
continue; continue;
teamsContainer.AddTeam(new Team() Team t = new Team()
{ {
FlagName = flagName, FlagName = flagName,
FullName = name, FullName = name,
Acronym = acronym Acronym = acronym
}); };
allTeams.Add(t);
teamsContainer.AddTeam(t);
} }
} }
catch { } catch { }
} }
private void reset() private void reset(bool loadLastResults = false)
{ {
groupsContainer.ClearTeams(); groupsContainer.ClearTeams();
teamsContainer.ClearTeams();
reloadTeams(); 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; 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 class GroupTeam : Container
{ {
public Team Team; public Team Team;

View File

@ -62,12 +62,12 @@ namespace osu.Game.Screens.Tournament
public void AddTeam(Team team) 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; continue;
allGroups[i].AddTeam(team); g.AddTeam(team);
break; break;
} }
} }
@ -79,9 +79,9 @@ namespace osu.Game.Screens.Tournament
public bool RemoveTeam(Team team) 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; return true;
} }
@ -95,5 +95,20 @@ namespace osu.Game.Screens.Tournament
allGroups[i].ClearTeams(); 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) public void RemoveTeam(Team team)
{ {
availableTeams.Remove(team);
foreach (var c in Children) foreach (var c in Children)
{ {
ScrollingTeam st = c as ScrollingTeam; ScrollingTeam st = c as ScrollingTeam;
@ -186,11 +188,17 @@ namespace osu.Game.Screens.Tournament
public void StartScrolling() public void StartScrolling()
{ {
if (availableTeams.Count == 0)
return;
scrollState = ScrollState.Scrolling; scrollState = ScrollState.Scrolling;
} }
public void StopScrolling() public void StopScrolling()
{ {
if (availableTeams.Count == 0)
return;
scrollState = ScrollState.Stopping; scrollState = ScrollState.Stopping;
} }