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:
parent
35d246b59d
commit
1a4f0a92a5
@ -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
|
||||||
|
{
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
|
@ -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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user