osu/osu.Game.Tournament/Screens/Drawings/Components/Group.cs

169 lines
4.7 KiB
C#
Raw Normal View History

// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text.
2018-04-13 09:19:50 +00:00
using System.Collections.Generic;
using System.Linq;
using System.Text;
using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.Shapes;
2019-03-04 03:06:41 +00:00
using osu.Game.Graphics;
2018-04-13 09:19:50 +00:00
using osu.Game.Graphics.Sprites;
2018-08-25 16:24:19 +00:00
using osu.Game.Tournament.Components;
2018-11-20 07:51:59 +00:00
using osuTK;
using osuTK.Graphics;
2018-04-13 09:19:50 +00:00
namespace osu.Game.Tournament.Screens.Drawings.Components
2018-04-13 09:19:50 +00:00
{
public class Group : Container
{
public readonly string GroupName;
public int TeamsCount { get; private set; }
private readonly FlowContainer<GroupTeam> teams;
private readonly List<GroupTeam> allTeams = new List<GroupTeam>();
public Group(string name)
{
GroupName = name;
Size = new Vector2(176, 128);
Masking = true;
CornerRadius = 4;
Children = new Drawable[]
{
new Box
{
RelativeSizeAxes = Axes.Both,
Colour = new Color4(54, 54, 54, 255)
},
// Group name
new OsuSpriteText
{
Anchor = Anchor.TopCentre,
Origin = Anchor.TopCentre,
Position = new Vector2(0, 7f),
2018-07-24 12:42:06 +00:00
Text = $"GROUP {name.ToUpperInvariant()}",
2019-03-04 03:06:41 +00:00
Font = OsuFont.GetFont(weight: FontWeight.Bold, size: 8),
2018-04-13 09:19:50 +00:00
Colour = new Color4(255, 204, 34, 255),
},
teams = new FillFlowContainer<GroupTeam>
{
RelativeSizeAxes = Axes.Both,
Spacing = new Vector2(6f, 22),
Margin = new MarginPadding
{
Top = 21f,
Bottom = 7f,
Left = 7f,
Right = 7f
}
}
};
}
public void AddTeam(TournamentTeam team)
2018-04-13 09:19:50 +00:00
{
GroupTeam gt = new GroupTeam(team);
if (TeamsCount < 8)
{
teams.Add(gt);
allTeams.Add(gt);
TeamsCount++;
}
}
public bool ContainsTeam(string fullName)
{
return allTeams.Any(t => t.Team.FullName.Value == fullName);
2018-04-13 09:19:50 +00:00
}
public bool RemoveTeam(TournamentTeam team)
2018-04-13 09:19:50 +00:00
{
allTeams.RemoveAll(gt => gt.Team == team);
if (teams.RemoveAll(gt => gt.Team == team) > 0)
{
TeamsCount--;
return true;
}
return false;
}
public void ClearTeams()
{
allTeams.Clear();
teams.Clear();
TeamsCount = 0;
}
public string GetStringRepresentation()
{
StringBuilder sb = new StringBuilder();
foreach (GroupTeam gt in allTeams)
sb.AppendLine(gt.Team.FullName.Value);
2018-04-13 09:19:50 +00:00
return sb.ToString();
}
2018-08-25 16:24:19 +00:00
private class GroupTeam : DrawableTournamentTeam
2018-04-13 09:19:50 +00:00
{
private readonly FillFlowContainer innerContainer;
2019-03-02 04:52:56 +00:00
public GroupTeam(TournamentTeam team)
: base(team)
2018-04-13 09:19:50 +00:00
{
Width = 36;
AutoSizeAxes = Axes.Y;
2018-08-25 16:24:19 +00:00
Flag.Anchor = Anchor.TopCentre;
Flag.Origin = Anchor.TopCentre;
AcronymText.Anchor = Anchor.TopCentre;
AcronymText.Origin = Anchor.TopCentre;
AcronymText.Text = team.Acronym.Value.ToUpperInvariant();
2019-03-04 03:06:41 +00:00
AcronymText.Font = OsuFont.GetFont(weight: FontWeight.Bold, size: 10);
2018-08-25 16:24:19 +00:00
InternalChildren = new Drawable[]
2018-04-13 09:19:50 +00:00
{
innerContainer = new FillFlowContainer
{
Anchor = Anchor.Centre,
Origin = Anchor.Centre,
RelativeSizeAxes = Axes.X,
AutoSizeAxes = Axes.Y,
Direction = FillDirection.Vertical,
Spacing = new Vector2(0, 5f),
Children = new Drawable[]
{
2018-08-25 16:24:19 +00:00
Flag,
AcronymText
2018-04-13 09:19:50 +00:00
}
}
};
}
protected override void LoadComplete()
{
base.LoadComplete();
innerContainer.ScaleTo(1.5f);
innerContainer.ScaleTo(1f, 200);
}
}
}
}