1
0
mirror of https://github.com/ppy/osu.git synced 2025-01-15 09:22:54 +08:00

Merge remote-tracking branch 'upstream/master'

This commit is contained in:
Alex Amadori 2017-02-27 14:55:44 +01:00
commit 8b336156f0
88 changed files with 329 additions and 259 deletions

2
.gitignore vendored
View File

@ -11,7 +11,7 @@
*.userprefs *.userprefs
# Build results # Build results
[Dd]ebug/ bin/[Dd]ebug/
[Dd]ebugPublic/ [Dd]ebugPublic/
[Rr]elease/ [Rr]elease/
[Rr]eleases/ [Rr]eleases/

@ -1 +1 @@
Subproject commit b64322a56d3d55e8e5d1e6c3328024923cecd4d3 Subproject commit 7cad7cf48b2ae9f16cac503d46bd0ea801e7561f

View File

@ -25,8 +25,7 @@ namespace osu.Desktop.Tests
Ruleset.Register(new ManiaRuleset()); Ruleset.Register(new ManiaRuleset());
Ruleset.Register(new CatchRuleset()); Ruleset.Register(new CatchRuleset());
host.Add(new Benchmark()); host.Run(new Benchmark());
host.Run();
} }
} }
} }

View File

@ -27,10 +27,9 @@ namespace osu.Desktop.VisualTests
Ruleset.Register(new CatchRuleset()); Ruleset.Register(new CatchRuleset());
if (benchmark) if (benchmark)
host.Add(new Benchmark()); host.Run(new Benchmark());
else else
host.Add(new VisualTestGame()); host.Run(new VisualTestGame());
host.Run();
} }
} }
} }

View File

@ -10,7 +10,7 @@ using OpenTK;
using OpenTK.Graphics; using OpenTK.Graphics;
using osu.Framework.MathUtils; using osu.Framework.MathUtils;
using osu.Framework.Graphics.Sprites; using osu.Framework.Graphics.Sprites;
using osu.Framework.Graphics.Transformations; using osu.Framework.Graphics.Transforms;
using osu.Game.Screens.Play; using osu.Game.Screens.Play;
namespace osu.Desktop.VisualTests.Tests namespace osu.Desktop.VisualTests.Tests

View File

@ -158,7 +158,7 @@ namespace osu.Desktop.VisualTests.Tests
AddButton(@"Alter stars", delegate AddButton(@"Alter stars", delegate
{ {
stars.Count = RNG.NextSingle() * (stars.MaxStars + 1); stars.Count = RNG.NextSingle() * (stars.StarCount + 1);
starsLabel.Text = stars.Count.ToString("0.00"); starsLabel.Text = stars.Count.ToString("0.00");
}); });

View File

@ -56,7 +56,7 @@ namespace osu.Desktop
// this method will only be executed if e.Effect in dragEnter gets set to something other that None. // this method will only be executed if e.Effect in dragEnter gets set to something other that None.
var dropData = e.Data.GetData(DataFormats.FileDrop) as object[]; var dropData = e.Data.GetData(DataFormats.FileDrop) as object[];
var filePaths = dropData.Select(f => f.ToString()).ToArray(); var filePaths = dropData.Select(f => f.ToString()).ToArray();
ImportBeatmaps(filePaths); ImportBeatmapsAsync(filePaths);
} }
private void dragEnter(DragEventArgs e) private void dragEnter(DragEventArgs e)

View File

@ -46,8 +46,7 @@ namespace osu.Desktop
Ruleset.Register(new ManiaRuleset()); Ruleset.Register(new ManiaRuleset());
Ruleset.Register(new CatchRuleset()); Ruleset.Register(new CatchRuleset());
host.Add(new OsuGameDesktop(args)); host.Run(new OsuGameDesktop(args));
host.Run();
} }
return 0; return 0;
} }

View File

@ -19,7 +19,7 @@ namespace osu.Game.Modes.Catch
protected override HitObjectConverter<CatchBaseHit> Converter => new CatchConverter(); protected override HitObjectConverter<CatchBaseHit> Converter => new CatchConverter();
protected override double ComputeDifficulty(Dictionary<String, String> categoryDifficulty) protected override double CalculateInternal(Dictionary<String, String> categoryDifficulty)
{ {
return 0; return 0;
} }

View File

@ -5,7 +5,7 @@ using osu.Framework.Allocation;
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Framework.Graphics.Sprites; using osu.Framework.Graphics.Sprites;
using osu.Framework.Graphics.Textures; using osu.Framework.Graphics.Textures;
using osu.Framework.Graphics.Transformations; using osu.Framework.Graphics.Transforms;
using OpenTK; using OpenTK;
namespace osu.Game.Modes.Catch.Objects.Drawable namespace osu.Game.Modes.Catch.Objects.Drawable

View File

@ -22,7 +22,7 @@ namespace osu.Game.Modes.Mania
protected override HitObjectConverter<ManiaBaseHit> Converter => new ManiaConverter(columns); protected override HitObjectConverter<ManiaBaseHit> Converter => new ManiaConverter(columns);
protected override double ComputeDifficulty(Dictionary<String, String> categoryDifficulty) protected override double CalculateInternal(Dictionary<String, String> categoryDifficulty)
{ {
return 0; return 0;
} }

View File

@ -4,7 +4,7 @@
using osu.Framework.Allocation; using osu.Framework.Allocation;
using osu.Framework.Graphics.Sprites; using osu.Framework.Graphics.Sprites;
using osu.Framework.Graphics.Textures; using osu.Framework.Graphics.Textures;
using osu.Framework.Graphics.Transformations; using osu.Framework.Graphics.Transforms;
using osu.Framework.Graphics; using osu.Framework.Graphics;
using OpenTK; using OpenTK;

View File

@ -2,7 +2,7 @@
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Framework.Graphics.Transformations; using osu.Framework.Graphics.Transforms;
using osu.Game.Modes.Taiko.UI; using osu.Game.Modes.Taiko.UI;
using OpenTK.Graphics; using OpenTK.Graphics;

View File

@ -6,7 +6,7 @@ using OpenTK.Graphics;
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.Sprites; using osu.Framework.Graphics.Sprites;
using osu.Framework.Graphics.Transformations; using osu.Framework.Graphics.Transforms;
using osu.Game.Graphics; using osu.Game.Graphics;
namespace osu.Game.Modes.Osu.Objects.Drawables.Connections namespace osu.Game.Modes.Osu.Objects.Drawables.Connections

View File

@ -3,7 +3,7 @@
using System; using System;
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Framework.Graphics.Transformations; using osu.Framework.Graphics.Transforms;
using osu.Game.Modes.Objects.Drawables; using osu.Game.Modes.Objects.Drawables;
using osu.Game.Modes.Osu.Objects.Drawables.Pieces; using osu.Game.Modes.Osu.Objects.Drawables.Pieces;
using OpenTK; using OpenTK;

View File

@ -7,7 +7,7 @@ using osu.Framework.Audio;
using osu.Framework.Audio.Sample; using osu.Framework.Audio.Sample;
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Framework.Graphics.Sprites; using osu.Framework.Graphics.Sprites;
using osu.Framework.Graphics.Transformations; using osu.Framework.Graphics.Transforms;
using osu.Game.Beatmaps.Samples; using osu.Game.Beatmaps.Samples;
using osu.Game.Modes.Objects.Drawables; using osu.Game.Modes.Objects.Drawables;
using OpenTK; using OpenTK;

View File

@ -4,7 +4,7 @@
using System; using System;
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.Transformations; using osu.Framework.Graphics.Transforms;
using osu.Framework.MathUtils; using osu.Framework.MathUtils;
using osu.Game.Modes.Objects.Drawables; using osu.Game.Modes.Objects.Drawables;
using osu.Game.Modes.Osu.Objects.Drawables.Pieces; using osu.Game.Modes.Osu.Objects.Drawables.Pieces;

View File

@ -5,7 +5,7 @@ using osu.Framework.Extensions;
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.Sprites; using osu.Framework.Graphics.Sprites;
using osu.Framework.Graphics.Transformations; using osu.Framework.Graphics.Transforms;
using osu.Game.Graphics.Sprites; using osu.Game.Graphics.Sprites;
using osu.Game.Modes.Objects.Drawables; using osu.Game.Modes.Objects.Drawables;
using OpenTK; using OpenTK;

View File

@ -4,7 +4,7 @@
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.Sprites; using osu.Framework.Graphics.Sprites;
using osu.Framework.Graphics.Transformations; using osu.Framework.Graphics.Transforms;
using osu.Framework.Input; using osu.Framework.Input;
using OpenTK.Graphics; using OpenTK.Graphics;

View File

@ -8,7 +8,7 @@ using osu.Framework.Graphics;
using osu.Framework.Graphics.Colour; using osu.Framework.Graphics.Colour;
using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.Sprites; using osu.Framework.Graphics.Sprites;
using osu.Framework.Graphics.Transformations; using osu.Framework.Graphics.Transforms;
using osu.Framework.Input; using osu.Framework.Input;
using osu.Game.Graphics; using osu.Game.Graphics;
using OpenTK; using OpenTK;

View File

@ -5,7 +5,6 @@ using System.Collections.Generic;
using OpenTK; using OpenTK;
using System.Linq; using System.Linq;
using osu.Framework.MathUtils; using osu.Framework.MathUtils;
using System.Diagnostics;
namespace osu.Game.Modes.Osu.Objects namespace osu.Game.Modes.Osu.Objects
{ {
@ -29,26 +28,21 @@ namespace osu.Game.Modes.Osu.Objects
case CurveTypes.Linear: case CurveTypes.Linear:
return subControlPoints; return subControlPoints;
case CurveTypes.PerfectCurve: case CurveTypes.PerfectCurve:
// If we have a different amount than 3 control points, use bezier for perfect curves. //we can only use CircularArc iff we have exactly three control points and no dissection.
if (ControlPoints.Count != 3) if (ControlPoints.Count != 3 || subControlPoints.Count != 3)
return new BezierApproximator(subControlPoints).CreateBezier(); break;
else
{
Debug.Assert(subControlPoints.Count == 3);
// Here we have exactly 3 control points. Attempt to fit a circular arc. // Here we have exactly 3 control points. Attempt to fit a circular arc.
List<Vector2> subpath = new CircularArcApproximator(subControlPoints[0], subControlPoints[1], subControlPoints[2]).CreateArc(); List<Vector2> subpath = new CircularArcApproximator(subControlPoints[0], subControlPoints[1], subControlPoints[2]).CreateArc();
if (subpath.Count == 0) // If for some reason a circular arc could not be fit to the 3 given points, fall back to a numerically stable bezier approximation.
// For some reason a circular arc could not be fit to the 3 given points. Fall back if (subpath.Count == 0)
// to a numerically stable bezier approximation. break;
subpath = new BezierApproximator(subControlPoints).CreateBezier();
return subpath; return subpath;
}
default:
return new BezierApproximator(subControlPoints).CreateBezier();
} }
return new BezierApproximator(subControlPoints).CreateBezier();
} }
private void calculatePath() private void calculatePath()
@ -181,7 +175,7 @@ namespace osu.Game.Modes.Osu.Objects
path.Clear(); path.Clear();
int i = 0; int i = 0;
for (; i < calculatedPath.Count && cumulativeLength[i] < d0; ++i); for (; i < calculatedPath.Count && cumulativeLength[i] < d0; ++i) ;
path.Add(interpolateVertices(i, d0) + Offset); path.Add(interpolateVertices(i, d0) + Offset);

View File

@ -34,7 +34,7 @@ namespace osu.Game.Modes.Osu
((Slider)h).Curve.Calculate(); ((Slider)h).Curve.Calculate();
} }
protected override double ComputeDifficulty(Dictionary<String, String> categoryDifficulty) protected override double CalculateInternal(Dictionary<String, String> categoryDifficulty)
{ {
// Fill our custom DifficultyHitObject class, that carries additional information // Fill our custom DifficultyHitObject class, that carries additional information
DifficultyHitObjects.Clear(); DifficultyHitObjects.Clear();

View File

@ -5,7 +5,7 @@ using osu.Framework.Allocation;
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Framework.Graphics.Sprites; using osu.Framework.Graphics.Sprites;
using osu.Framework.Graphics.Textures; using osu.Framework.Graphics.Textures;
using osu.Framework.Graphics.Transformations; using osu.Framework.Graphics.Transforms;
using OpenTK; using OpenTK;
namespace osu.Game.Modes.Taiko.Objects.Drawable namespace osu.Game.Modes.Taiko.Objects.Drawable

View File

@ -19,7 +19,7 @@ namespace osu.Game.Modes.Taiko
protected override HitObjectConverter<TaikoBaseHit> Converter => new TaikoConverter(); protected override HitObjectConverter<TaikoBaseHit> Converter => new TaikoConverter();
protected override double ComputeDifficulty(Dictionary<String, String> categoryDifficulty) protected override double CalculateInternal(Dictionary<String, String> categoryDifficulty)
{ {
return 0; return 0;
} }

View File

@ -1,7 +1,7 @@
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>. // Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
using osu.Framework.Graphics.Transformations; using osu.Framework.Graphics.Transforms;
using osu.Game.Modes.UI; using osu.Game.Modes.UI;
using OpenTK; using OpenTK;

View File

@ -5,6 +5,7 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Threading; using System.Threading;
using System.Threading.Tasks;
using NUnit.Framework; using NUnit.Framework;
using osu.Framework.Desktop.Platform; using osu.Framework.Desktop.Platform;
using osu.Framework.Platform; using osu.Framework.Platform;
@ -59,14 +60,14 @@ namespace osu.Game.Tests.Beatmaps.IO
if (!importer.ImportAsync(osz_path).Wait(1000)) if (!importer.ImportAsync(osz_path).Wait(1000))
Assert.Fail(@"IPC took too long to send"); Assert.Fail(@"IPC took too long to send");
ensureLoaded(osu, 10000); ensureLoaded(osu);
} }
} }
private OsuGameBase loadOsu(GameHost host) private OsuGameBase loadOsu(GameHost host)
{ {
var osu = new OsuGameBase(); var osu = new OsuGameBase();
host.Add(osu); Task.Run(() => host.Run(osu));
while (!osu.IsLoaded) while (!osu.IsLoaded)
Thread.Sleep(1); Thread.Sleep(1);
@ -77,23 +78,23 @@ namespace osu.Game.Tests.Beatmaps.IO
return osu; return osu;
} }
private void ensureLoaded(OsuGameBase osu, int timeout = 100) private void ensureLoaded(OsuGameBase osu, int timeout = 10000)
{ {
IEnumerable<BeatmapSetInfo> resultSets = null; IEnumerable<BeatmapSetInfo> resultSets = null;
Action waitAction = () => Action waitAction = () =>
{ {
while ((resultSets = osu.Dependencies.Get<BeatmapDatabase>() while ((resultSets = osu.Dependencies.Get<BeatmapDatabase>()
.Query<BeatmapSetInfo>().Where(s => s.OnlineBeatmapSetID == 241526)).Count() != 1) .Query<BeatmapSetInfo>().Where(s => s.OnlineBeatmapSetID == 241526)).Count() == 0)
Thread.Sleep(1); Thread.Sleep(50);
}; };
Assert.IsTrue(waitAction.BeginInvoke(null, null).AsyncWaitHandle.WaitOne(timeout), Assert.IsTrue(waitAction.BeginInvoke(null, null).AsyncWaitHandle.WaitOne(timeout),
@"BeatmapSet did not import to the database"); $@"BeatmapSet did not import to the database in allocated time.");
//ensure we were stored to beatmap database backing... //ensure we were stored to beatmap database backing...
Assert.IsTrue(resultSets.Count() == 1); Assert.IsTrue(resultSets.Count() == 1, $@"Incorrect result count found ({resultSets.Count()} but should be 1).");
IEnumerable<BeatmapInfo> resultBeatmaps = null; IEnumerable<BeatmapInfo> resultBeatmaps = null;
@ -102,16 +103,17 @@ namespace osu.Game.Tests.Beatmaps.IO
{ {
while ((resultBeatmaps = osu.Dependencies.Get<BeatmapDatabase>() while ((resultBeatmaps = osu.Dependencies.Get<BeatmapDatabase>()
.Query<BeatmapInfo>().Where(s => s.OnlineBeatmapSetID == 241526 && s.BaseDifficultyID > 0)).Count() != 12) .Query<BeatmapInfo>().Where(s => s.OnlineBeatmapSetID == 241526 && s.BaseDifficultyID > 0)).Count() != 12)
Thread.Sleep(1); Thread.Sleep(50);
}; };
Assert.IsTrue(waitAction.BeginInvoke(null, null).AsyncWaitHandle.WaitOne(timeout), Assert.IsTrue(waitAction.BeginInvoke(null, null).AsyncWaitHandle.WaitOne(timeout),
@"Beatmaps did not import to the database"); @"Beatmaps did not import to the database in allocated time");
//fetch children and check we can load from the post-storage path... //fetch children and check we can load from the post-storage path...
var set = osu.Dependencies.Get<BeatmapDatabase>().GetChildren(resultSets.First()); var set = osu.Dependencies.Get<BeatmapDatabase>().GetChildren(resultSets.First());
Assert.IsTrue(set.Beatmaps.Count == resultBeatmaps.Count()); Assert.IsTrue(set.Beatmaps.Count == resultBeatmaps.Count(),
$@"Incorrect database beatmap count post-import ({resultBeatmaps.Count()} but should be {set.Beatmaps.Count}).");
foreach (BeatmapInfo b in resultBeatmaps) foreach (BeatmapInfo b in resultBeatmaps)
Assert.IsTrue(set.Beatmaps.Any(c => c.OnlineBeatmapID == b.OnlineBeatmapID)); Assert.IsTrue(set.Beatmaps.Any(c => c.OnlineBeatmapID == b.OnlineBeatmapID));

View File

@ -7,6 +7,7 @@ using OpenTK.Graphics;
using osu.Game.Beatmaps.Timing; using osu.Game.Beatmaps.Timing;
using osu.Game.Database; using osu.Game.Database;
using osu.Game.Modes.Objects; using osu.Game.Modes.Objects;
using osu.Game.Modes;
namespace osu.Game.Beatmaps namespace osu.Game.Beatmaps
{ {
@ -57,5 +58,7 @@ namespace osu.Game.Beatmaps
return timingPoint ?? ControlPoint.Default; return timingPoint ?? ControlPoint.Default;
} }
public double CalculateStarDifficulty() => Ruleset.GetRuleset(BeatmapInfo.Mode).CreateDifficultyCalculator(this).Calculate();
} }
} }

View File

@ -14,7 +14,7 @@ namespace osu.Game.Beatmaps
protected double TimeRate = 1; protected double TimeRate = 1;
protected abstract double ComputeDifficulty(Dictionary<String, String> categoryDifficulty); protected abstract double CalculateInternal(Dictionary<String, String> categoryDifficulty);
private void loadTiming() private void loadTiming()
{ {
@ -23,10 +23,10 @@ namespace osu.Game.Beatmaps
TimeRate = audioRate / 100.0; TimeRate = audioRate / 100.0;
} }
public double GetDifficulty(Dictionary<string, string> categoryDifficulty = null) public double Calculate(Dictionary<string, string> categoryDifficulty = null)
{ {
loadTiming(); loadTiming();
double difficulty = ComputeDifficulty(categoryDifficulty); double difficulty = CalculateInternal(categoryDifficulty);
return difficulty; return difficulty;
} }
} }

View File

@ -59,16 +59,21 @@ namespace osu.Game.Beatmaps.Drawables
} }
} }
public BeatmapGroup(WorkingBeatmap beatmap) public BeatmapGroup(BeatmapSetInfo beatmapSet, BeatmapDatabase database)
{ {
BeatmapSet = beatmapSet;
WorkingBeatmap beatmap = database.GetWorkingBeatmap(BeatmapSet.Beatmaps.FirstOrDefault());
foreach (var b in BeatmapSet.Beatmaps)
b.StarDifficulty = (float)database.GetWorkingBeatmap(b).Beatmap.CalculateStarDifficulty();
Header = new BeatmapSetHeader(beatmap) Header = new BeatmapSetHeader(beatmap)
{ {
GainedSelection = headerGainedSelection, GainedSelection = headerGainedSelection,
RelativeSizeAxes = Axes.X, RelativeSizeAxes = Axes.X,
}; };
BeatmapSet = beatmap.BeatmapSetInfo; BeatmapSet.Beatmaps = BeatmapSet.Beatmaps.OrderBy(b => b.StarDifficulty).ToList();
BeatmapPanels = beatmap.BeatmapSetInfo.Beatmaps.Select(b => new BeatmapPanel(b) BeatmapPanels = BeatmapSet.Beatmaps.Select(b => new BeatmapPanel(b)
{ {
Alpha = 0, Alpha = 0,
GainedSelection = panelGainedSelection, GainedSelection = panelGainedSelection,

View File

@ -26,6 +26,7 @@ namespace osu.Game.Beatmaps.Drawables
public Action<BeatmapPanel> GainedSelection; public Action<BeatmapPanel> GainedSelection;
public Action<BeatmapPanel> StartRequested; public Action<BeatmapPanel> StartRequested;
private Triangles triangles; private Triangles triangles;
private StarCounter starCounter;
protected override void Selected() protected override void Selected()
{ {
@ -56,6 +57,14 @@ namespace osu.Game.Beatmaps.Drawables
return base.OnClick(state); return base.OnClick(state);
} }
protected override void ApplyState(PanelSelectedState last = PanelSelectedState.Hidden)
{
base.ApplyState(last);
if (last == PanelSelectedState.Hidden && State != last)
starCounter.ReplayAnimation();
}
public BeatmapPanel(BeatmapInfo beatmap) public BeatmapPanel(BeatmapInfo beatmap)
{ {
Beatmap = beatmap; Beatmap = beatmap;
@ -92,7 +101,6 @@ namespace osu.Game.Beatmaps.Drawables
new FlowContainer new FlowContainer
{ {
Padding = new MarginPadding { Left = 5 }, Padding = new MarginPadding { Left = 5 },
Spacing = new Vector2(0, 5),
Direction = FlowDirections.Vertical, Direction = FlowDirections.Vertical,
AutoSizeAxes = Axes.Both, AutoSizeAxes = Axes.Both,
Children = new Drawable[] Children = new Drawable[]
@ -130,7 +138,11 @@ namespace osu.Game.Beatmaps.Drawables
}, },
} }
}, },
new StarCounter { Count = beatmap.StarDifficulty, StarSize = 8 } starCounter = new StarCounter
{
Count = beatmap.StarDifficulty,
Scale = new Vector2(0.8f),
}
} }
} }
} }

View File

@ -4,7 +4,7 @@
using osu.Framework; using osu.Framework;
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.Transformations; using osu.Framework.Graphics.Transforms;
using osu.Framework.Input; using osu.Framework.Input;
using OpenTK; using OpenTK;
using OpenTK.Graphics; using OpenTK.Graphics;
@ -50,10 +50,10 @@ namespace osu.Game.Beatmaps.Drawables
protected override void LoadComplete() protected override void LoadComplete()
{ {
base.LoadComplete(); base.LoadComplete();
applyState(); ApplyState();
} }
private void applyState() protected virtual void ApplyState(PanelSelectedState last = PanelSelectedState.Hidden)
{ {
switch (state) switch (state)
{ {
@ -81,9 +81,10 @@ namespace osu.Game.Beatmaps.Drawables
set set
{ {
if (state == value) return; if (state == value) return;
state = value;
applyState(); var last = state;
state = value;
ApplyState(last);
} }
} }

View File

@ -119,10 +119,6 @@ namespace osu.Game.Database
using (var reader = ArchiveReader.GetReader(storage, path)) using (var reader = ArchiveReader.GetReader(storage, path))
metadata = reader.ReadMetadata(); metadata = reader.ReadMetadata();
if (metadata.OnlineBeatmapSetID.HasValue &&
connection.Table<BeatmapSetInfo>().Count(b => b.OnlineBeatmapSetID == metadata.OnlineBeatmapSetID) != 0)
return; // TODO: Update this beatmap instead
if (File.Exists(path)) // Not always the case, i.e. for LegacyFilesystemReader if (File.Exists(path)) // Not always the case, i.e. for LegacyFilesystemReader
{ {
using (var md5 = MD5.Create()) using (var md5 = MD5.Create())
@ -131,10 +127,26 @@ namespace osu.Game.Database
hash = BitConverter.ToString(md5.ComputeHash(input)).Replace("-", "").ToLowerInvariant(); hash = BitConverter.ToString(md5.ComputeHash(input)).Replace("-", "").ToLowerInvariant();
input.Seek(0, SeekOrigin.Begin); input.Seek(0, SeekOrigin.Begin);
path = Path.Combine(@"beatmaps", hash.Remove(1), hash.Remove(2), hash); path = Path.Combine(@"beatmaps", hash.Remove(1), hash.Remove(2), hash);
using (var output = storage.GetStream(path, FileAccess.Write)) if (!storage.Exists(path))
input.CopyTo(output); using (var output = storage.GetStream(path, FileAccess.Write))
input.CopyTo(output);
} }
} }
var existing = connection.Table<BeatmapSetInfo>().FirstOrDefault(b => b.Hash == hash);
if (existing != null)
{
if (existing.DeletePending)
{
existing.DeletePending = false;
Update(existing, false);
BeatmapSetAdded?.Invoke(existing);
}
return;
}
var beatmapSet = new BeatmapSetInfo var beatmapSet = new BeatmapSetInfo
{ {
OnlineBeatmapSetID = metadata.OnlineBeatmapSetID, OnlineBeatmapSetID = metadata.OnlineBeatmapSetID,
@ -169,15 +181,18 @@ namespace osu.Game.Database
public void Import(IEnumerable<BeatmapSetInfo> beatmapSets) public void Import(IEnumerable<BeatmapSetInfo> beatmapSets)
{ {
connection.BeginTransaction(); lock (connection)
foreach (var s in beatmapSets)
{ {
connection.InsertWithChildren(s, true); connection.BeginTransaction();
BeatmapSetAdded?.Invoke(s);
}
connection.Commit(); foreach (var s in beatmapSets)
{
connection.InsertWithChildren(s, true);
BeatmapSetAdded?.Invoke(s);
}
connection.Commit();
}
} }
public void Delete(BeatmapSetInfo beatmapSet) public void Delete(BeatmapSetInfo beatmapSet)

View File

@ -7,7 +7,6 @@ using osu.Game.Beatmaps.Samples;
using osu.Game.Modes; using osu.Game.Modes;
using SQLite.Net.Attributes; using SQLite.Net.Attributes;
using SQLiteNetExtensions.Attributes; using SQLiteNetExtensions.Attributes;
using osu.Game.Beatmaps;
namespace osu.Game.Database namespace osu.Game.Database
{ {
@ -73,7 +72,6 @@ namespace osu.Game.Database
// Metadata // Metadata
public string Version { get; set; } public string Version { get; set; }
//todo: background threaded computation of this
private float starDifficulty = -1; private float starDifficulty = -1;
public float StarDifficulty public float StarDifficulty
{ {
@ -85,11 +83,6 @@ namespace osu.Game.Database
set { starDifficulty = value; } set { starDifficulty = value; }
} }
internal void ComputeDifficulty(BeatmapDatabase database)
{
StarDifficulty = (float)Ruleset.GetRuleset(Mode).CreateDifficultyCalculator(database.GetWorkingBeatmap(this).Beatmap).GetDifficulty();
}
public bool Equals(BeatmapInfo other) public bool Equals(BeatmapInfo other)
{ {
return ID == other?.ID; return ID == other?.ID;

View File

@ -2,7 +2,6 @@
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel;
using SQLite.Net.Attributes; using SQLite.Net.Attributes;
using SQLiteNetExtensions.Attributes; using SQLiteNetExtensions.Attributes;

View File

@ -6,7 +6,7 @@ using osu.Framework.Graphics;
using osu.Framework.Input; using osu.Framework.Input;
using OpenTK; using OpenTK;
using osu.Framework.Allocation; using osu.Framework.Allocation;
using osu.Framework.Graphics.Transformations; using osu.Framework.Graphics.Transforms;
using osu.Game.Configuration; using osu.Game.Configuration;
using osu.Framework.Configuration; using osu.Framework.Configuration;

View File

@ -10,7 +10,7 @@ using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.Cursor; using osu.Framework.Graphics.Cursor;
using osu.Framework.Graphics.Sprites; using osu.Framework.Graphics.Sprites;
using osu.Framework.Graphics.Textures; using osu.Framework.Graphics.Textures;
using osu.Framework.Graphics.Transformations; using osu.Framework.Graphics.Transforms;
using osu.Framework.Input; using osu.Framework.Input;
using osu.Game.Configuration; using osu.Game.Configuration;
using System; using System;

View File

@ -8,7 +8,7 @@ using osu.Framework.Allocation;
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.Sprites; using osu.Framework.Graphics.Sprites;
using osu.Framework.Graphics.Transformations; using osu.Framework.Graphics.Transforms;
using osu.Framework.Graphics.UserInterface; using osu.Framework.Graphics.UserInterface;
namespace osu.Game.Graphics.UserInterface namespace osu.Game.Graphics.UserInterface
@ -55,7 +55,7 @@ namespace osu.Game.Graphics.UserInterface
Roundness = 8, Roundness = 8,
}; };
FadeGlowTo(0); FadeEdgeEffectTo(0);
} }
public bool Glowing public bool Glowing
@ -65,11 +65,11 @@ namespace osu.Game.Graphics.UserInterface
if (value) if (value)
{ {
FadeColour(glowingColour, 500, EasingTypes.OutQuint); FadeColour(glowingColour, 500, EasingTypes.OutQuint);
FadeGlowTo(1, 500, EasingTypes.OutQuint); FadeEdgeEffectTo(1, 500, EasingTypes.OutQuint);
} }
else else
{ {
FadeGlowTo(0, 500); FadeEdgeEffectTo(0, 500);
FadeColour(idleColour, 500); FadeColour(idleColour, 500);
} }
} }

View File

@ -5,7 +5,7 @@ using OpenTK.Graphics;
using osu.Framework.Allocation; using osu.Framework.Allocation;
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Framework.Graphics.Sprites; using osu.Framework.Graphics.Sprites;
using osu.Framework.Graphics.Transformations; using osu.Framework.Graphics.Transforms;
using osu.Framework.Graphics.UserInterface; using osu.Framework.Graphics.UserInterface;
using osu.Framework.Input; using osu.Framework.Input;
using osu.Game.Graphics.Backgrounds; using osu.Game.Graphics.Backgrounds;

View File

@ -3,7 +3,7 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using osu.Framework.Graphics.Transformations; using osu.Framework.Graphics.Transforms;
using osu.Framework.Graphics.UserInterface; using osu.Framework.Graphics.UserInterface;
using OpenTK; using OpenTK;
using OpenTK.Graphics; using OpenTK.Graphics;

View File

@ -4,7 +4,7 @@
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.Sprites; using osu.Framework.Graphics.Sprites;
using osu.Framework.Graphics.Transformations; using osu.Framework.Graphics.Transforms;
using OpenTK; using OpenTK;
using OpenTK.Graphics; using OpenTK.Graphics;

View File

@ -8,7 +8,7 @@ using osu.Framework.Audio;
using osu.Framework.Audio.Sample; using osu.Framework.Audio.Sample;
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Framework.Graphics.Sprites; using osu.Framework.Graphics.Sprites;
using osu.Framework.Graphics.Transformations; using osu.Framework.Graphics.Transforms;
using osu.Framework.Graphics.UserInterface; using osu.Framework.Graphics.UserInterface;
using osu.Framework.Input; using osu.Framework.Input;

View File

@ -2,7 +2,7 @@
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Framework.Graphics.Transformations; using osu.Framework.Graphics.Transforms;
using System; using System;
namespace osu.Game.Graphics.UserInterface namespace osu.Game.Graphics.UserInterface

View File

@ -4,7 +4,7 @@
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.Sprites; using osu.Framework.Graphics.Sprites;
using osu.Framework.Graphics.Transformations; using osu.Framework.Graphics.Transforms;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Diagnostics; using System.Diagnostics;

View File

@ -2,7 +2,7 @@
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Framework.Graphics.Transformations; using osu.Framework.Graphics.Transforms;
using osu.Framework.MathUtils; using osu.Framework.MathUtils;
using System; using System;

View File

@ -4,19 +4,17 @@
using OpenTK; using OpenTK;
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.Transformations; using osu.Framework.Graphics.Transforms;
using osu.Framework.MathUtils; using osu.Framework.MathUtils;
using System; using System;
using System.Collections.Generic;
namespace osu.Game.Graphics.UserInterface namespace osu.Game.Graphics.UserInterface
{ {
public class StarCounter : Container public class StarCounter : Container
{ {
private readonly Container starContainer; private readonly Container<Star> stars;
private readonly List<TextAwesome> stars = new List<TextAwesome>();
private double transformStartTime = 0; private double transformStartTime;
/// <summary> /// <summary>
/// Maximum amount of stars displayed. /// Maximum amount of stars displayed.
@ -24,37 +22,20 @@ namespace osu.Game.Graphics.UserInterface
/// <remarks> /// <remarks>
/// This does not limit the counter value, but the amount of stars displayed. /// This does not limit the counter value, but the amount of stars displayed.
/// </remarks> /// </remarks>
public int MaxStars public int StarCount { get; }
{
get;
protected set;
}
private double animationDelay => 80; private double animationDelay => 80;
private double scalingDuration => 500; private double scalingDuration => 1000;
private EasingTypes scalingEasing => EasingTypes.OutElasticHalf; private EasingTypes scalingEasing => EasingTypes.OutElasticHalf;
private float minStarScale => 0.3f; private float minStarScale => 0.4f;
private double fadingDuration => 100; private double fadingDuration => 100;
private float minStarAlpha => 0.5f; private float minStarAlpha => 0.5f;
public float StarSize = 20; private const float star_size = 20;
public float StarSpacing = 4; private float star_spacing = 4;
public float VisibleValue
{
get
{
double elapsedTime = Time.Current - transformStartTime;
double expectedElapsedTime = Math.Abs(prevCount - count) * animationDelay;
if (elapsedTime >= expectedElapsedTime)
return count;
return Interpolation.ValueAt(elapsedTime, prevCount, count, 0, expectedElapsedTime);
}
}
private float prevCount;
private float count; private float count;
/// <summary> /// <summary>
@ -69,119 +50,121 @@ namespace osu.Game.Graphics.UserInterface
set set
{ {
if (IsLoaded) if (count == value) return;
{
prevCount = VisibleValue;
transformCount(prevCount, value);
}
if (IsLoaded)
transformCount(value);
count = value; count = value;
} }
} }
/// <summary>
/// Shows a float count as stars (up to 10). Used as star difficulty display.
/// </summary>
public StarCounter() : this(10)
{
AutoSizeAxes = Axes.Both;
}
/// <summary> /// <summary>
/// Shows a float count as stars. Used as star difficulty display. /// Shows a float count as stars. Used as star difficulty display.
/// </summary> /// </summary>
/// <param name="maxstars">Maximum amount of stars to display.</param> /// <param name="starCount">Maximum amount of stars to display.</param>
public StarCounter(int maxstars) public StarCounter(int starCount = 10)
{ {
MaxStars = Math.Max(maxstars, 0); StarCount = Math.Max(starCount, 0);
AutoSizeAxes = Axes.Both;
Children = new Drawable[] Children = new Drawable[]
{ {
starContainer = new Container stars = new FlowContainer<Star>
{ {
Anchor = Anchor.CentreLeft, AutoSizeAxes = Axes.Both,
Origin = Anchor.CentreLeft, Direction = FlowDirections.Horizontal,
Spacing = new Vector2(star_spacing),
} }
}; };
starContainer.Width = MaxStars * StarSize + Math.Max(MaxStars - 1, 0) * StarSpacing; for (int i = 0; i < StarCount; i++)
starContainer.Height = StarSize;
for (int i = 0; i < MaxStars; i++)
{ {
TextAwesome star = new TextAwesome stars.Add(new Star
{ {
Icon = FontAwesome.fa_star,
Anchor = Anchor.CentreLeft,
Origin = Anchor.Centre,
TextSize = StarSize,
Scale = new Vector2(minStarScale),
Alpha = minStarAlpha, Alpha = minStarAlpha,
Position = new Vector2((StarSize + StarSpacing) * i + (StarSize + StarSpacing) / 2, 0), });
};
//todo: user Container<T> once we have it.
stars.Add(star);
starContainer.Add(star);
} }
} }
protected override void LoadComplete() protected override void LoadComplete()
{ {
base.LoadComplete(); base.LoadComplete();
// Animate initial state from zero. // Animate initial state from zero.
transformCount(0, Count); ReplayAnimation();
} }
public void ResetCount() public void ResetCount()
{ {
Count = 0; count = 0;
StopAnimation(); StopAnimation();
} }
public void ReplayAnimation()
{
var t = count;
ResetCount();
Count = t;
}
public void StopAnimation() public void StopAnimation()
{ {
prevCount = count; int i = 0;
transformStartTime = Time.Current; foreach (var star in stars.Children)
{
for (int i = 0; i < MaxStars; i++) star.ClearTransforms(true);
transformStarQuick(i, count); star.FadeTo(i < count ? 1.0f : minStarAlpha);
star.Icon.ScaleTo(getStarScale(i, count));
i++;
}
} }
private float getStarScale(int i, float value) private float getStarScale(int i, float value)
{ {
if (value <= i) if (value <= i)
return minStarScale; return minStarScale;
if (i + 1 <= value)
return 1.0f; return i + 1 <= value ? 1.0f : Interpolation.ValueAt(value, minStarScale, 1.0f, i, i + 1);
return Interpolation.ValueAt(value, minStarScale, 1.0f, i, i + 1);
} }
private void transformStar(int i, float value) private void transformCount(float newValue)
{ {
stars[i].FadeTo(i < value ? 1.0f : minStarAlpha, fadingDuration); int i = 0;
stars[i].ScaleTo(getStarScale(i, value), scalingDuration, scalingEasing); foreach (var star in stars.Children)
}
private void transformStarQuick(int i, float value)
{
stars[i].FadeTo(i < value ? 1.0f : minStarAlpha);
stars[i].ScaleTo(getStarScale(i, value));
}
private void transformCount(float currentValue, float newValue)
{
for (int i = 0; i < MaxStars; i++)
{ {
stars[i].ClearTransformations(); star.ClearTransforms(true);
if (currentValue <= newValue) if (count <= newValue)
stars[i].Delay(Math.Max(i - currentValue, 0) * animationDelay); star.Delay(Math.Max(i - count, 0) * animationDelay, true);
else else
stars[i].Delay(Math.Max(currentValue - 1 - i, 0) * animationDelay); star.Delay(Math.Max(count - 1 - i, 0) * animationDelay, true);
transformStar(i, newValue);
stars[i].DelayReset(); star.FadeTo(i < newValue ? 1.0f : minStarAlpha, fadingDuration);
star.Icon.ScaleTo(getStarScale(i, newValue), scalingDuration, scalingEasing);
star.DelayReset();
i++;
}
}
class Star : Container
{
public TextAwesome Icon;
public Star()
{
Size = new Vector2(star_size);
Children = new[]
{
Icon = new TextAwesome
{
TextSize = star_size,
Icon = FontAwesome.fa_star,
Anchor = Anchor.Centre,
Origin = Anchor.Centre,
}
};
} }
transformStartTime = Time.Current;
} }
} }
} }

View File

@ -6,7 +6,7 @@ using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.Primitives; using osu.Framework.Graphics.Primitives;
using osu.Framework.Graphics.Sprites; using osu.Framework.Graphics.Sprites;
using osu.Framework.Graphics.Transformations; using osu.Framework.Graphics.Transforms;
using osu.Framework.Input; using osu.Framework.Input;
using OpenTK; using OpenTK;
using OpenTK.Graphics; using OpenTK.Graphics;
@ -164,7 +164,7 @@ namespace osu.Game.Graphics.UserInterface
protected override bool OnHover(InputState state) protected override bool OnHover(InputState state)
{ {
icon.ClearTransformations(); icon.ClearTransforms();
ResizeTo(SIZE_EXTENDED, transform_time, EasingTypes.OutElastic); ResizeTo(SIZE_EXTENDED, transform_time, EasingTypes.OutElastic);
@ -193,7 +193,7 @@ namespace osu.Game.Graphics.UserInterface
protected override void OnHoverLost(InputState state) protected override void OnHoverLost(InputState state)
{ {
icon.ClearTransformations(); icon.ClearTransforms();
ResizeTo(SIZE_RETRACTED, transform_time, EasingTypes.OutElastic); ResizeTo(SIZE_RETRACTED, transform_time, EasingTypes.OutElastic);

View File

@ -94,7 +94,7 @@ namespace osu.Game.Graphics.UserInterface.Volume
protected override void PopIn() protected override void PopIn()
{ {
ClearTransformations(); ClearTransforms();
FadeIn(100); FadeIn(100);
schedulePopOut(); schedulePopOut();

View File

@ -2,7 +2,6 @@
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
using System; using System;
using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Containers;
using osu.Framework.Input; using osu.Framework.Input;
using OpenTK.Input; using OpenTK.Input;

View File

@ -5,7 +5,7 @@ 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.Graphics.Sprites; using osu.Framework.Graphics.Sprites;
using osu.Framework.Graphics.Transformations; using osu.Framework.Graphics.Transforms;
using osu.Framework.Input; using osu.Framework.Input;
using osu.Game.Graphics.Sprites; using osu.Game.Graphics.Sprites;
using OpenTK; using OpenTK;

View File

@ -5,7 +5,7 @@ using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.Primitives; using osu.Framework.Graphics.Primitives;
using osu.Framework.Graphics.Sprites; using osu.Framework.Graphics.Sprites;
using osu.Framework.Graphics.Transformations; using osu.Framework.Graphics.Transforms;
using osu.Framework.MathUtils; using osu.Framework.MathUtils;
using osu.Game.Graphics.Sprites; using osu.Game.Graphics.Sprites;

View File

@ -3,7 +3,7 @@
using System; using System;
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Framework.Graphics.Transformations; using osu.Framework.Graphics.Transforms;
using osu.Framework.MathUtils; using osu.Framework.MathUtils;
using osu.Game.Graphics.UserInterface; using osu.Game.Graphics.UserInterface;

View File

@ -7,7 +7,7 @@ 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.Graphics.Sprites; using osu.Framework.Graphics.Sprites;
using osu.Framework.Graphics.Transformations; using osu.Framework.Graphics.Transforms;
using osu.Game.Graphics; using osu.Game.Graphics;
using OpenTK; using OpenTK;
using OpenTK.Graphics; using OpenTK.Graphics;

View File

@ -15,7 +15,7 @@ using osu.Framework.Logging;
using osu.Game.Graphics.UserInterface.Volume; using osu.Game.Graphics.UserInterface.Volume;
using osu.Game.Database; using osu.Game.Database;
using osu.Framework.Allocation; using osu.Framework.Allocation;
using osu.Framework.Graphics.Transformations; using osu.Framework.Graphics.Transforms;
using osu.Framework.Timing; using osu.Framework.Timing;
using osu.Game.Modes; using osu.Game.Modes;
using osu.Game.Overlays.Toolbar; using osu.Game.Overlays.Toolbar;
@ -25,6 +25,7 @@ using OpenTK;
using System.Linq; using System.Linq;
using osu.Framework.Graphics.Primitives; using osu.Framework.Graphics.Primitives;
using System.Collections.Generic; using System.Collections.Generic;
using System.Threading.Tasks;
using osu.Game.Overlays.Notifications; using osu.Game.Overlays.Notifications;
namespace osu.Game namespace osu.Game
@ -81,7 +82,7 @@ namespace osu.Game
if (args?.Length > 0) if (args?.Length > 0)
{ {
var paths = args.Where(a => !a.StartsWith(@"-")); var paths = args.Where(a => !a.StartsWith(@"-"));
ImportBeatmaps(paths); ImportBeatmapsAsync(paths);
} }
Dependencies.Cache(this); Dependencies.Cache(this);
@ -89,9 +90,9 @@ namespace osu.Game
PlayMode = LocalConfig.GetBindable<PlayMode>(OsuConfig.PlayMode); PlayMode = LocalConfig.GetBindable<PlayMode>(OsuConfig.PlayMode);
} }
public void ImportBeatmaps(IEnumerable<string> paths) protected async void ImportBeatmapsAsync(IEnumerable<string> paths)
{ {
Schedule(delegate { Dependencies.Get<BeatmapDatabase>().Import(paths); }); await Task.Run(() => BeatmapDatabase.Import(paths));
} }
protected override void LoadComplete() protected override void LoadComplete()

View File

@ -23,6 +23,8 @@ namespace osu.Game
{ {
protected OsuConfigManager LocalConfig; protected OsuConfigManager LocalConfig;
protected BeatmapDatabase BeatmapDatabase;
protected override string MainResourceFile => @"osu.Game.Resources.dll"; protected override string MainResourceFile => @"osu.Game.Resources.dll";
public APIAccess API; public APIAccess API;
@ -40,7 +42,7 @@ namespace osu.Game
{ {
Dependencies.Cache(this); Dependencies.Cache(this);
Dependencies.Cache(LocalConfig); Dependencies.Cache(LocalConfig);
Dependencies.Cache(new BeatmapDatabase(Host.Storage, Host)); Dependencies.Cache(BeatmapDatabase = new BeatmapDatabase(Host.Storage, Host));
Dependencies.Cache(new OsuColour()); Dependencies.Cache(new OsuColour());
//this completely overrides the framework default. will need to change once we make a proper FontStore. //this completely overrides the framework default. will need to change once we make a proper FontStore.

View File

@ -10,7 +10,7 @@ using osu.Framework.Allocation;
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.Sprites; using osu.Framework.Graphics.Sprites;
using osu.Framework.Graphics.Transformations; using osu.Framework.Graphics.Transforms;
using osu.Framework.Threading; using osu.Framework.Threading;
using osu.Game.Graphics.Sprites; using osu.Game.Graphics.Sprites;
using osu.Game.Online.API; using osu.Game.Online.API;

View File

@ -6,7 +6,7 @@ using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.Primitives; using osu.Framework.Graphics.Primitives;
using osu.Framework.Graphics.Sprites; using osu.Framework.Graphics.Sprites;
using osu.Framework.Graphics.Transformations; using osu.Framework.Graphics.Transforms;
using osu.Game.Graphics; using osu.Game.Graphics;
using osu.Game.Overlays.Options.Sections.General; using osu.Game.Overlays.Options.Sections.General;
using OpenTK.Graphics; using OpenTK.Graphics;

View File

@ -14,7 +14,7 @@ using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.Sprites; using osu.Framework.Graphics.Sprites;
using osu.Framework.Graphics.Textures; using osu.Framework.Graphics.Textures;
using osu.Framework.Graphics.Transformations; using osu.Framework.Graphics.Transforms;
using osu.Framework.Input; using osu.Framework.Input;
using osu.Framework.MathUtils; using osu.Framework.MathUtils;
using osu.Game.Beatmaps; using osu.Game.Beatmaps;
@ -78,6 +78,8 @@ namespace osu.Game.Overlays
private void load(OsuGameBase osuGame, OsuConfigManager config, BeatmapDatabase beatmaps, AudioManager audio, private void load(OsuGameBase osuGame, OsuConfigManager config, BeatmapDatabase beatmaps, AudioManager audio,
TextureStore textures, OsuColour colours) TextureStore textures, OsuColour colours)
{ {
game = osuGame;
unicodeString = config.GetUnicodeString; unicodeString = config.GetUnicodeString;
Children = new Drawable[] Children = new Drawable[]
@ -322,12 +324,6 @@ namespace osu.Game.Overlays
updateDisplay(current, isNext ? TransformDirection.Next : TransformDirection.Prev); updateDisplay(current, isNext ? TransformDirection.Next : TransformDirection.Prev);
} }
protected override void Load(Framework.Game game)
{
this.game = game;
base.Load(game);
}
Action pendingBeatmapSwitch; Action pendingBeatmapSwitch;
private void updateDisplay(WorkingBeatmap beatmap, TransformDirection direction) private void updateDisplay(WorkingBeatmap beatmap, TransformDirection direction)

View File

@ -8,7 +8,7 @@ using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.Primitives; using osu.Framework.Graphics.Primitives;
using osu.Framework.Graphics.Sprites; using osu.Framework.Graphics.Sprites;
using osu.Framework.Graphics.Transformations; using osu.Framework.Graphics.Transforms;
using osu.Game.Graphics; using osu.Game.Graphics;
using osu.Game.Overlays.Notifications; using osu.Game.Overlays.Notifications;
using OpenTK.Graphics; using OpenTK.Graphics;

View File

@ -8,7 +8,7 @@ using osu.Framework.Graphics.Colour;
using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.Primitives; using osu.Framework.Graphics.Primitives;
using osu.Framework.Graphics.Sprites; using osu.Framework.Graphics.Sprites;
using osu.Framework.Graphics.Transformations; using osu.Framework.Graphics.Transforms;
using osu.Framework.Input; using osu.Framework.Input;
using osu.Game.Graphics; using osu.Game.Graphics;
using OpenTK; using OpenTK;
@ -211,7 +211,7 @@ namespace osu.Game.Overlays.Notifications
{ {
pulsate = value; pulsate = value;
pulsateLayer.ClearTransformations(); pulsateLayer.ClearTransforms();
pulsateLayer.Alpha = 1; pulsateLayer.Alpha = 1;
if (pulsate) if (pulsate)

View File

@ -9,7 +9,7 @@ using osu.Framework.Extensions.IEnumerableExtensions;
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.Primitives; using osu.Framework.Graphics.Primitives;
using osu.Framework.Graphics.Transformations; using osu.Framework.Graphics.Transforms;
using osu.Game.Graphics; using osu.Game.Graphics;
using osu.Game.Graphics.Sprites; using osu.Game.Graphics.Sprites;
using OpenTK; using OpenTK;

View File

@ -6,7 +6,7 @@ using osu.Framework.Allocation;
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.Sprites; using osu.Framework.Graphics.Sprites;
using osu.Framework.Graphics.Transformations; using osu.Framework.Graphics.Transforms;
using osu.Game.Graphics; using osu.Game.Graphics;
using osu.Game.Graphics.Sprites; using osu.Game.Graphics.Sprites;
using OpenTK; using OpenTK;

View File

@ -0,0 +1,37 @@
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
using System;
using System.Runtime;
using osu.Framework.Allocation;
using osu.Framework.Configuration;
using osu.Framework.Graphics;
using osu.Game.Configuration;
using osu.Game.Graphics.UserInterface;
namespace osu.Game.Overlays.Options.Sections.Debug
{
public class GCOptions : OptionsSubsection
{
protected override string Header => "Garbage Collector";
[BackgroundDependencyLoader]
private void load(FrameworkDebugConfigManager config)
{
Children = new Drawable[]
{
new OptionEnumDropDown<GCLatencyMode>
{
LabelText = "Active mode",
Bindable = config.GetBindable<GCLatencyMode>(FrameworkDebugConfig.ActiveGCMode)
},
new OsuButton
{
RelativeSizeAxes = Axes.X,
Text = "Force garbage collection",
Action = () => GC.Collect()
},
};
}
}
}

View File

@ -0,0 +1,23 @@
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
using osu.Framework.Graphics;
using osu.Game.Graphics;
using osu.Game.Overlays.Options.Sections.Debug;
namespace osu.Game.Overlays.Options.Sections
{
public class DebugSection : OptionsSection
{
public override string Header => "Debug";
public override FontAwesome Icon => FontAwesome.fa_bug;
public DebugSection()
{
Children = new Drawable[]
{
new GCOptions(),
};
}
}
}

View File

@ -6,7 +6,7 @@ using OpenTK.Graphics;
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.Sprites; using osu.Framework.Graphics.Sprites;
using osu.Framework.Graphics.Transformations; using osu.Framework.Graphics.Transforms;
using osu.Framework.Input; using osu.Framework.Input;
using osu.Framework.Threading; using osu.Framework.Threading;
using osu.Game.Overlays.Toolbar; using osu.Game.Overlays.Toolbar;

View File

@ -8,7 +8,7 @@ using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.Primitives; using osu.Framework.Graphics.Primitives;
using osu.Framework.Graphics.Sprites; using osu.Framework.Graphics.Sprites;
using osu.Framework.Graphics.Transformations; using osu.Framework.Graphics.Transforms;
using osu.Game.Overlays.Options; using osu.Game.Overlays.Options;
using System; using System;
using osu.Game.Graphics; using osu.Game.Graphics;
@ -55,6 +55,7 @@ namespace osu.Game.Overlays
new EditorSection(), new EditorSection(),
new OnlineSection(), new OnlineSection(),
new MaintenanceSection(), new MaintenanceSection(),
new DebugSection(),
}; };
Children = new Drawable[] Children = new Drawable[]
{ {

View File

@ -4,7 +4,7 @@
using OpenTK; using OpenTK;
using OpenTK.Graphics; using OpenTK.Graphics;
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Framework.Graphics.Transformations; using osu.Framework.Graphics.Transforms;
using osu.Framework.Graphics.Colour; using osu.Framework.Graphics.Colour;
using osu.Framework.Graphics.Sprites; using osu.Framework.Graphics.Sprites;
using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Containers;

View File

@ -11,7 +11,7 @@ using osu.Framework.Allocation;
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Framework.Graphics.Sprites; using osu.Framework.Graphics.Sprites;
using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.Transformations; using osu.Framework.Graphics.Transforms;
using osu.Game.Graphics.Sprites; using osu.Game.Graphics.Sprites;
namespace osu.Game.Overlays.Pause namespace osu.Game.Overlays.Pause

View File

@ -6,7 +6,7 @@ using osu.Framework.Graphics;
using osu.Framework.Graphics.Colour; using osu.Framework.Graphics.Colour;
using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.Sprites; using osu.Framework.Graphics.Sprites;
using osu.Framework.Graphics.Transformations; using osu.Framework.Graphics.Transforms;
using osu.Framework.Input; using osu.Framework.Input;
using osu.Game.Graphics; using osu.Game.Graphics;
using osu.Game.Modes; using osu.Game.Modes;

View File

@ -9,7 +9,7 @@ using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.Primitives; using osu.Framework.Graphics.Primitives;
using osu.Framework.Graphics.Sprites; using osu.Framework.Graphics.Sprites;
using osu.Framework.Graphics.Transformations; using osu.Framework.Graphics.Transforms;
using osu.Framework.Input; using osu.Framework.Input;
using osu.Game.Graphics; using osu.Game.Graphics;
using osu.Game.Graphics.Backgrounds; using osu.Game.Graphics.Backgrounds;

View File

@ -8,7 +8,7 @@ using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.Primitives; using osu.Framework.Graphics.Primitives;
using osu.Framework.Graphics.Sprites; using osu.Framework.Graphics.Sprites;
using osu.Framework.Graphics.Transformations; using osu.Framework.Graphics.Transforms;
using osu.Game.Modes; using osu.Game.Modes;
using OpenTK; using OpenTK;
using OpenTK.Graphics; using OpenTK.Graphics;

View File

@ -6,7 +6,7 @@ using System.Threading;
using osu.Framework.Allocation; using osu.Framework.Allocation;
using osu.Framework.Screens; using osu.Framework.Screens;
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Framework.Graphics.Transformations; using osu.Framework.Graphics.Transforms;
using osu.Framework.Input; using osu.Framework.Input;
using OpenTK; using OpenTK;

View File

@ -3,7 +3,7 @@
using osu.Framework.Allocation; using osu.Framework.Allocation;
using OpenTK; using OpenTK;
using osu.Framework.Graphics.Transformations; using osu.Framework.Graphics.Transforms;
using osu.Game.Beatmaps; using osu.Game.Beatmaps;
using osu.Game.Graphics.Backgrounds; using osu.Game.Graphics.Backgrounds;

View File

@ -7,7 +7,7 @@ using osu.Framework.Screens;
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.Sprites; using osu.Framework.Graphics.Sprites;
using osu.Framework.Graphics.Transformations; using osu.Framework.Graphics.Transforms;
using osu.Framework.Graphics.UserInterface; using osu.Framework.Graphics.UserInterface;
using osu.Game.Graphics.Sprites; using osu.Game.Graphics.Sprites;
using osu.Game.Screens.Backgrounds; using osu.Game.Screens.Backgrounds;

View File

@ -9,7 +9,7 @@ using osu.Framework.Audio.Sample;
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.Sprites; using osu.Framework.Graphics.Sprites;
using osu.Framework.Graphics.Transformations; using osu.Framework.Graphics.Transforms;
using osu.Framework.Input; using osu.Framework.Input;
using osu.Game.Graphics; using osu.Game.Graphics;
using osu.Game.Graphics.Sprites; using osu.Game.Graphics.Sprites;
@ -138,7 +138,7 @@ namespace osu.Game.Screens.Menu
int duration = 0; //(int)(Game.Audio.BeatLength / 2); int duration = 0; //(int)(Game.Audio.BeatLength / 2);
if (duration == 0) duration = 250; if (duration == 0) duration = 250;
icon.ClearTransformations(); icon.ClearTransforms();
icon.ScaleTo(1, 500, EasingTypes.OutElasticHalf); icon.ScaleTo(1, 500, EasingTypes.OutElasticHalf);
@ -219,7 +219,7 @@ namespace osu.Game.Screens.Menu
protected override void OnHoverLost(InputState state) protected override void OnHoverLost(InputState state)
{ {
icon.ClearTransformations(); icon.ClearTransforms();
icon.RotateTo(0, 500, EasingTypes.Out); icon.RotateTo(0, 500, EasingTypes.Out);
icon.MoveTo(Vector2.Zero, 500, EasingTypes.Out); icon.MoveTo(Vector2.Zero, 500, EasingTypes.Out);
icon.ScaleTo(0.7f, 500, EasingTypes.OutElasticHalf); icon.ScaleTo(0.7f, 500, EasingTypes.OutElasticHalf);
@ -274,7 +274,7 @@ namespace osu.Game.Screens.Menu
clickAction?.Invoke(); clickAction?.Invoke();
boxHoverLayer.ClearTransformations(); boxHoverLayer.ClearTransforms();
boxHoverLayer.Alpha = 0.9f; boxHoverLayer.Alpha = 0.9f;
boxHoverLayer.FadeOut(800, EasingTypes.OutExpo); boxHoverLayer.FadeOut(800, EasingTypes.OutExpo);
} }

View File

@ -10,7 +10,7 @@ using osu.Framework.Audio;
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.Sprites; using osu.Framework.Graphics.Sprites;
using osu.Framework.Graphics.Transformations; using osu.Framework.Graphics.Transforms;
using osu.Framework.Input; using osu.Framework.Input;
using osu.Game.Graphics; using osu.Game.Graphics;
using osu.Game.Overlays.Toolbar; using osu.Game.Overlays.Toolbar;

View File

@ -7,7 +7,7 @@ using osu.Framework.Audio.Sample;
using osu.Framework.Audio.Track; using osu.Framework.Audio.Track;
using osu.Framework.Screens; using osu.Framework.Screens;
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Framework.Graphics.Transformations; using osu.Framework.Graphics.Transforms;
using osu.Game.Graphics.Containers; using osu.Game.Graphics.Containers;
using osu.Game.Screens.Backgrounds; using osu.Game.Screens.Backgrounds;
using OpenTK.Graphics; using OpenTK.Graphics;

View File

@ -5,7 +5,7 @@ using osu.Framework.Allocation;
using osu.Framework.Screens; using osu.Framework.Screens;
using osu.Framework.Screens.Testing; using osu.Framework.Screens.Testing;
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Framework.Graphics.Transformations; using osu.Framework.Graphics.Transforms;
using osu.Game.Graphics.Containers; using osu.Game.Graphics.Containers;
using osu.Game.Screens.Backgrounds; using osu.Game.Screens.Backgrounds;
using osu.Game.Screens.Charts; using osu.Game.Screens.Charts;

View File

@ -9,7 +9,7 @@ using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.Sprites; using osu.Framework.Graphics.Sprites;
using osu.Framework.Graphics.Textures; using osu.Framework.Graphics.Textures;
using osu.Framework.Graphics.Transformations; using osu.Framework.Graphics.Transforms;
using osu.Framework.Input; using osu.Framework.Input;
using osu.Game.Graphics; using osu.Game.Graphics;
using osu.Game.Graphics.Backgrounds; using osu.Game.Graphics.Backgrounds;
@ -204,7 +204,7 @@ namespace osu.Game.Screens.Menu
sampleClick.Play(); sampleClick.Play();
flashLayer.ClearTransformations(); flashLayer.ClearTransforms();
flashLayer.Alpha = 0.4f; flashLayer.Alpha = 0.4f;
flashLayer.FadeOut(1500, EasingTypes.OutExpo); flashLayer.FadeOut(1500, EasingTypes.OutExpo);

View File

@ -1,7 +1,6 @@
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>. // Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
using osu.Framework.Graphics;
using osu.Framework.Input; using osu.Framework.Input;
using OpenTK.Input; using OpenTK.Input;

View File

@ -1,7 +1,6 @@
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>. // Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
using osu.Framework.Graphics;
using osu.Framework.Input; using osu.Framework.Input;
using OpenTK; using OpenTK;
using OpenTK.Input; using OpenTK.Input;

View File

@ -22,7 +22,7 @@ using System;
using System.Linq; using System.Linq;
using OpenTK.Graphics; using OpenTK.Graphics;
using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.Transformations; using osu.Framework.Graphics.Transforms;
using osu.Framework.Logging; using osu.Framework.Logging;
namespace osu.Game.Screens.Play namespace osu.Game.Screens.Play
@ -312,6 +312,9 @@ namespace osu.Game.Screens.Play
} }
else else
{ {
FadeOut(250);
Content.ScaleTo(0.7f, 750, EasingTypes.InQuint);
dimLevel.ValueChanged -= dimChanged; dimLevel.ValueChanged -= dimChanged;
Background?.FadeTo(1f, 200); Background?.FadeTo(1f, 200);
return base.OnExiting(next); return base.OnExiting(next);

View File

@ -6,7 +6,7 @@ using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.Primitives; using osu.Framework.Graphics.Primitives;
using osu.Framework.Graphics.Sprites; using osu.Framework.Graphics.Sprites;
using osu.Framework.Graphics.Transformations; using osu.Framework.Graphics.Transforms;
using osu.Framework.Screens; using osu.Framework.Screens;
using osu.Game.Beatmaps; using osu.Game.Beatmaps;
using osu.Game.Graphics; using osu.Game.Graphics;
@ -80,6 +80,8 @@ namespace osu.Game.Screens.Play
Schedule(() => Schedule(() =>
{ {
if (!IsCurrentScreen) return;
if (!Push(player)) if (!Push(player))
Exit(); Exit();
}); });
@ -89,6 +91,12 @@ namespace osu.Game.Screens.Play
{ {
Content.ScaleTo(0.7f, 150, EasingTypes.InQuint); Content.ScaleTo(0.7f, 150, EasingTypes.InQuint);
FadeOut(150); FadeOut(150);
//OsuScreens are currently never finalised due to the Bindable<Beatmap> bindings.
//can be removed once we solve that one.
if (player != null && player.LoadState != LoadState.Alive)
player.Dispose();
return base.OnExiting(next); return base.OnExiting(next);
} }

View File

@ -4,7 +4,7 @@
using osu.Framework.Screens; using osu.Framework.Screens;
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.Transformations; using osu.Framework.Graphics.Transforms;
using osu.Game.Graphics.Sprites; using osu.Game.Graphics.Sprites;
using osu.Game.Modes; using osu.Game.Modes;
using osu.Game.Screens.Backgrounds; using osu.Game.Screens.Backgrounds;

View File

@ -4,7 +4,7 @@
using OpenTK; using OpenTK;
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.Transformations; using osu.Framework.Graphics.Transforms;
using osu.Game.Database; using osu.Game.Database;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;

View File

@ -7,7 +7,7 @@ using OpenTK.Graphics;
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.Sprites; using osu.Framework.Graphics.Sprites;
using osu.Framework.Graphics.Transformations; using osu.Framework.Graphics.Transforms;
using osu.Game.Graphics; using osu.Game.Graphics;
using osu.Game.Graphics.UserInterface; using osu.Game.Graphics.UserInterface;
using osu.Game.Screens.Menu; using osu.Game.Screens.Menu;

View File

@ -8,7 +8,7 @@ using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.Sprites; using osu.Framework.Graphics.Sprites;
using osu.Framework.Input; using osu.Framework.Input;
using System; using System;
using osu.Framework.Graphics.Transformations; using osu.Framework.Graphics.Transforms;
using osu.Game.Graphics.Sprites; using osu.Game.Graphics.Sprites;
namespace osu.Game.Screens.Select namespace osu.Game.Screens.Select
@ -113,7 +113,7 @@ namespace osu.Game.Screens.Select
protected override bool OnClick(InputState state) protected override bool OnClick(InputState state)
{ {
box.ClearTransformations(); box.ClearTransforms();
box.Alpha = 1; box.Alpha = 1;
box.FadeOut(Footer.TRANSITION_LENGTH * 3, EasingTypes.OutQuint); box.FadeOut(Footer.TRANSITION_LENGTH * 3, EasingTypes.OutQuint);
return base.OnClick(state); return base.OnClick(state);

View File

@ -19,7 +19,7 @@ using osu.Game.Screens.Backgrounds;
using OpenTK; using OpenTK;
using osu.Game.Screens.Play; using osu.Game.Screens.Play;
using osu.Framework.Audio.Sample; using osu.Framework.Audio.Sample;
using osu.Framework.Graphics.Transformations; using osu.Framework.Graphics.Transforms;
using osu.Game.Beatmaps.Drawables; using osu.Game.Beatmaps.Drawables;
using osu.Game.Graphics.Containers; using osu.Game.Graphics.Containers;
using osu.Game.Graphics; using osu.Game.Graphics;
@ -341,11 +341,7 @@ namespace osu.Game.Screens.Select
if (b.Metadata == null) b.Metadata = beatmapSet.Metadata; if (b.Metadata == null) b.Metadata = beatmapSet.Metadata;
}); });
foreach (var b in beatmapSet.Beatmaps) var group = new BeatmapGroup(beatmapSet, database)
b.ComputeDifficulty(database);
beatmapSet.Beatmaps = beatmapSet.Beatmaps.OrderBy(b => b.StarDifficulty).ToList();
var group = new BeatmapGroup(database.GetWorkingBeatmap(beatmapSet.Beatmaps.FirstOrDefault()))
{ {
SelectionChanged = selectionChanged, SelectionChanged = selectionChanged,
StartRequested = b => footer.StartButton.TriggerClick() StartRequested = b => footer.StartButton.TriggerClick()

View File

@ -118,6 +118,8 @@
<Compile Include="Graphics\UserInterface\OsuDropDownHeader.cs" /> <Compile Include="Graphics\UserInterface\OsuDropDownHeader.cs" />
<Compile Include="Graphics\UserInterface\OsuDropDownMenu.cs" /> <Compile Include="Graphics\UserInterface\OsuDropDownMenu.cs" />
<Compile Include="Graphics\UserInterface\OsuDropDownMenuItem.cs" /> <Compile Include="Graphics\UserInterface\OsuDropDownMenuItem.cs" />
<Compile Include="Overlays\Options\Sections\DebugSection.cs" />
<Compile Include="Overlays\Options\Sections\Debug\GCOptions.cs" />
<Compile Include="Overlays\Toolbar\ToolbarHomeButton.cs" /> <Compile Include="Overlays\Toolbar\ToolbarHomeButton.cs" />
<Compile Include="Overlays\Toolbar\ToolbarMusicButton.cs" /> <Compile Include="Overlays\Toolbar\ToolbarMusicButton.cs" />
<Compile Include="Overlays\Toolbar\ToolbarNotificationButton.cs" /> <Compile Include="Overlays\Toolbar\ToolbarNotificationButton.cs" />