mirror of
https://github.com/ppy/osu.git
synced 2025-02-13 10:33:07 +08:00
Add saving + reloading (to/from drawings_results.txt) functionality.
This commit is contained in:
parent
35d246b59d
commit
1a4f0a92a5
@ -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
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user