Automate picks and bans from IPC

This commit is contained in:
Dean Herbert 2018-11-08 06:36:36 +09:00
parent 5c84c3c0a8
commit 5da6f11a14

View File

@ -7,10 +7,12 @@ using osu.Framework.Configuration;
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Containers;
using osu.Framework.Input.Events; using osu.Framework.Input.Events;
using osu.Game.Beatmaps;
using osu.Game.Graphics.Sprites; using osu.Game.Graphics.Sprites;
using osu.Game.Graphics.UserInterface; using osu.Game.Graphics.UserInterface;
using osu.Game.Screens; using osu.Game.Screens;
using osu.Game.Tournament.Components; using osu.Game.Tournament.Components;
using osu.Game.Tournament.IPC;
using osu.Game.Tournament.Screens.Ladder.Components; using osu.Game.Tournament.Screens.Ladder.Components;
using OpenTK; using OpenTK;
using OpenTK.Input; using OpenTK.Input;
@ -23,6 +25,14 @@ namespace osu.Game.Tournament.Screens.MapPool
private readonly Bindable<MatchPairing> currentMatch = new Bindable<MatchPairing>(); private readonly Bindable<MatchPairing> currentMatch = new Bindable<MatchPairing>();
private TeamColour pickColour;
private ChoiceType pickType;
private readonly TriangleButton buttonRedBan;
private readonly TriangleButton buttonBlueBan;
private readonly TriangleButton buttonRedPick;
private readonly TriangleButton buttonBluePick;
public MapPoolScreen() public MapPoolScreen()
{ {
InternalChildren = new Drawable[] InternalChildren = new Drawable[]
@ -71,13 +81,20 @@ namespace osu.Game.Tournament.Screens.MapPool
}; };
} }
private TeamColour pickColour; [BackgroundDependencyLoader]
private ChoiceType pickType; private void load(LadderInfo ladder, FileBasedIPC ipc)
{
currentMatch.BindValueChanged(matchChanged);
currentMatch.BindTo(ladder.CurrentMatch);
private readonly TriangleButton buttonRedBan; ipc.Beatmap.BindValueChanged(beatmapChanged);
private readonly TriangleButton buttonBlueBan; }
private readonly TriangleButton buttonRedPick;
private readonly TriangleButton buttonBluePick; private void beatmapChanged(BeatmapInfo beatmap)
{
if (beatmap.OnlineBeatmapID != null)
addForBeatmap(beatmap.OnlineBeatmapID.Value);
}
private void setMode(TeamColour colour, ChoiceType choiceType) private void setMode(TeamColour colour, ChoiceType choiceType)
{ {
@ -106,17 +123,8 @@ namespace osu.Game.Tournament.Screens.MapPool
var map = maps.FirstOrDefault(m => m.ReceivePositionalInputAt(e.ScreenSpaceMousePosition)); var map = maps.FirstOrDefault(m => m.ReceivePositionalInputAt(e.ScreenSpaceMousePosition));
if (map != null) if (map != null)
{ {
if (e.Button == MouseButton.Left) if (e.Button == MouseButton.Left && map.Beatmap.OnlineBeatmapID != null)
{ addForBeatmap(map.Beatmap.OnlineBeatmapID.Value);
currentMatch.Value.PicksBans.Add(new BeatmapChoice
{
Team = pickColour,
Type = pickType,
BeatmapID = map.Beatmap.OnlineBeatmapID ?? -1
});
setNextMode();
}
else else
{ {
var existing = currentMatch.Value.PicksBans.FirstOrDefault(p => p.BeatmapID == map.Beatmap.OnlineBeatmapID); var existing = currentMatch.Value.PicksBans.FirstOrDefault(p => p.BeatmapID == map.Beatmap.OnlineBeatmapID);
@ -133,11 +141,24 @@ namespace osu.Game.Tournament.Screens.MapPool
return base.OnMouseDown(e); return base.OnMouseDown(e);
} }
[BackgroundDependencyLoader] private void addForBeatmap(int beatmapId)
private void load(LadderInfo ladder)
{ {
currentMatch.BindValueChanged(matchChanged); if (currentMatch.Value.Grouping.Value.Beatmaps.All(b => b.BeatmapInfo.OnlineBeatmapID != beatmapId))
currentMatch.BindTo(ladder.CurrentMatch); // don't attempt to add if the beatmap isn't in our pool
return;
if (currentMatch.Value.PicksBans.Any(p => p.BeatmapID == beatmapId))
// don't attempt to add if already exists.
return;
currentMatch.Value.PicksBans.Add(new BeatmapChoice
{
Team = pickColour,
Type = pickType,
BeatmapID = beatmapId
});
setNextMode();
} }
private void matchChanged(MatchPairing match) private void matchChanged(MatchPairing match)