Add selection interactions

This commit is contained in:
Drew DeVault 2016-10-13 16:25:41 -04:00
parent bc6e705e2b
commit 71f58285fc
3 changed files with 54 additions and 25 deletions

View File

@ -29,10 +29,5 @@ namespace osu.Game.GameModes.Play
new SpriteText { Text = beatmap.Version },
};
}
public override void Load(BaseGame game)
{
base.Load(game);
}
}
}

View File

@ -15,48 +15,66 @@ using osu.Framework.Graphics.Primitives;
using OpenTK;
using System.Linq;
using osu.Framework.Graphics.Drawables;
using osu.Framework.Graphics.Transformations;
using osu.Framework.Input;
using OpenTK.Graphics;
namespace osu.Game.GameModes.Play
{
class BeatmapGroup : FlowContainer
{
private BeatmapSet beatmapSet;
public event Action<BeatmapSet> SetSelected;
public event Action<BeatmapSet, Beatmap> BeatmapSelected;
public BeatmapSet BeatmapSet;
private FlowContainer difficulties;
private bool collapsed;
public bool Collapsed
{
get { return collapsed; }
set
{
if (collapsed == value)
return;
collapsed = value;
this.ClearTransformations();
const float collapsedAlpha = 0.75f;
const float uncollapsedAlpha = 1;
Transforms.Add(new TransformAlpha(Clock)
{
StartValue = collapsed ? uncollapsedAlpha : collapsedAlpha,
EndValue = collapsed ? collapsedAlpha : uncollapsedAlpha,
StartTime = Time,
EndTime = Time + 250,
});
if (collapsed)
Alpha = 0.75f;
Remove(difficulties);
else
Alpha = 1;
// TODO: whatever
Add(difficulties);
}
}
public BeatmapGroup(BeatmapSet beatmapSet)
{
this.beatmapSet = beatmapSet;
this.collapsed = true;
BeatmapSet = beatmapSet;
Direction = FlowDirection.VerticalOnly;
Children = new[]
Children = new Drawable[]
{
new SpriteText() { Text = this.beatmapSet.Metadata.Title, TextSize = 25 },
new FlowContainer
{
Spacing = new Vector2(0, 10),
Padding = new MarginPadding { Left = 50 },
Direction = FlowDirection.VerticalOnly,
Children = this.beatmapSet.Beatmaps.Select(b => new BeatmapButton(this.beatmapSet, b))
},
new SpriteText { Text = this.BeatmapSet.Metadata.Title, TextSize = 25 },
};
difficulties = new FlowContainer // Deliberately not added to children
{
Spacing = new Vector2(0, 10),
Padding = new MarginPadding { Left = 50 },
Direction = FlowDirection.VerticalOnly,
Children = this.BeatmapSet.Beatmaps.Select(b => new BeatmapButton(this.BeatmapSet, b))
};
collapsed = true;
}
public override void Load(BaseGame game)
protected override bool OnClick(InputState state)
{
base.Load(game);
SetSelected?.Invoke(BeatmapSet);
return true;
}
}
}

View File

@ -12,6 +12,7 @@ using osu.Game.GameModes.Backgrounds;
using osu.Framework;
using osu.Game.Database;
using osu.Framework.Graphics.Primitives;
using System.Linq;
namespace osu.Game.GameModes.Play
{
@ -25,12 +26,26 @@ namespace osu.Game.GameModes.Play
private ScrollContainer scrollContainer;
private FlowContainer setList;
private void addBeatmapSet(BeatmapSet beatmapSet)
{
var group = new BeatmapGroup(beatmapSet);
group.SetSelected += (selectedSet) =>
{
foreach (var child in setList.Children)
{
var childGroup = child as BeatmapGroup;
childGroup.Collapsed = childGroup.BeatmapSet != selectedSet;
}
};
setList.Add(group);
}
private void addBeatmapSets()
{
var sets = beatmaps.GetBeatmapSets();
foreach (var beatmapSet in sets)
setList.Add(new BeatmapGroup(beatmapSet));
addBeatmapSet(beatmapSet);
}
public PlaySongSelect()
@ -65,8 +80,9 @@ namespace osu.Game.GameModes.Play
}
beatmaps = (game as OsuGameBase).Beatmaps;
beatmaps.BeatmapSetAdded += bset => Scheduler.Add(() => setList.Add(new BeatmapGroup(bset)));
beatmaps.BeatmapSetAdded += bset => Scheduler.Add(() => addBeatmapSet(bset));
addBeatmapSets();
(setList.Children.First() as BeatmapGroup).Collapsed = false;
}
protected override void Dispose(bool isDisposing)