diff --git a/osu-framework b/osu-framework
index 46d4704b0a..10cae790c6 160000
--- a/osu-framework
+++ b/osu-framework
@@ -1 +1 @@
-Subproject commit 46d4704b0a3f140fa8ad10ca0b1553b67d8385ab
+Subproject commit 10cae790c6f1d559c326f9438958d0b012d61dc6
diff --git a/osu.Desktop/osu.Desktop.csproj b/osu.Desktop/osu.Desktop.csproj
index e4e9807754..4a1798feb4 100644
--- a/osu.Desktop/osu.Desktop.csproj
+++ b/osu.Desktop/osu.Desktop.csproj
@@ -135,8 +135,8 @@
$(SolutionDir)\packages\squirrel.windows.1.7.8\lib\Net45\NuGet.Squirrel.dll
True
-
- $(SolutionDir)\packages\OpenTK.3.0.0-git00009\lib\net20\OpenTK.dll
+
+ $(SolutionDir)\packages\OpenTK.3.0.0-git00021\lib\net20\OpenTK.dll
True
diff --git a/osu.Desktop/packages.config b/osu.Desktop/packages.config
index 6b6361b578..e7233a42ac 100644
--- a/osu.Desktop/packages.config
+++ b/osu.Desktop/packages.config
@@ -6,7 +6,7 @@ Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/maste
-
+
diff --git a/osu.Game.Rulesets.Catch/osu.Game.Rulesets.Catch.csproj b/osu.Game.Rulesets.Catch/osu.Game.Rulesets.Catch.csproj
index b03c8d2eea..578d8eb34d 100644
--- a/osu.Game.Rulesets.Catch/osu.Game.Rulesets.Catch.csproj
+++ b/osu.Game.Rulesets.Catch/osu.Game.Rulesets.Catch.csproj
@@ -36,8 +36,8 @@
$(SolutionDir)\packages\NUnit.3.8.1\lib\net45\nunit.framework.dll
True
-
- $(SolutionDir)\packages\OpenTK.3.0.0-git00009\lib\net20\OpenTK.dll
+
+ $(SolutionDir)\packages\OpenTK.3.0.0-git00021\lib\net20\OpenTK.dll
True
diff --git a/osu.Game.Rulesets.Catch/packages.config b/osu.Game.Rulesets.Catch/packages.config
index cde428acea..2369f7529b 100644
--- a/osu.Game.Rulesets.Catch/packages.config
+++ b/osu.Game.Rulesets.Catch/packages.config
@@ -1,5 +1,5 @@
-
+
\ No newline at end of file
diff --git a/osu.Game.Rulesets.Mania/osu.Game.Rulesets.Mania.csproj b/osu.Game.Rulesets.Mania/osu.Game.Rulesets.Mania.csproj
index 26181164f9..bdd6656ed9 100644
--- a/osu.Game.Rulesets.Mania/osu.Game.Rulesets.Mania.csproj
+++ b/osu.Game.Rulesets.Mania/osu.Game.Rulesets.Mania.csproj
@@ -36,8 +36,8 @@
$(SolutionDir)\packages\NUnit.3.8.1\lib\net45\nunit.framework.dll
True
-
- $(SolutionDir)\packages\OpenTK.3.0.0-git00009\lib\net20\OpenTK.dll
+
+ $(SolutionDir)\packages\OpenTK.3.0.0-git00021\lib\net20\OpenTK.dll
True
diff --git a/osu.Game.Rulesets.Mania/packages.config b/osu.Game.Rulesets.Mania/packages.config
index cde428acea..2369f7529b 100644
--- a/osu.Game.Rulesets.Mania/packages.config
+++ b/osu.Game.Rulesets.Mania/packages.config
@@ -1,5 +1,5 @@
-
+
\ No newline at end of file
diff --git a/osu.Game.Rulesets.Osu/osu.Game.Rulesets.Osu.csproj b/osu.Game.Rulesets.Osu/osu.Game.Rulesets.Osu.csproj
index ec71869adb..6e61d7fb2d 100644
--- a/osu.Game.Rulesets.Osu/osu.Game.Rulesets.Osu.csproj
+++ b/osu.Game.Rulesets.Osu/osu.Game.Rulesets.Osu.csproj
@@ -37,8 +37,8 @@
$(SolutionDir)\packages\NUnit.3.8.1\lib\net45\nunit.framework.dll
True
-
- $(SolutionDir)\packages\OpenTK.3.0.0-git00009\lib\net20\OpenTK.dll
+
+ $(SolutionDir)\packages\OpenTK.3.0.0-git00021\lib\net20\OpenTK.dll
True
diff --git a/osu.Game.Rulesets.Osu/packages.config b/osu.Game.Rulesets.Osu/packages.config
index cde428acea..2369f7529b 100644
--- a/osu.Game.Rulesets.Osu/packages.config
+++ b/osu.Game.Rulesets.Osu/packages.config
@@ -1,5 +1,5 @@
-
+
\ No newline at end of file
diff --git a/osu.Game.Rulesets.Taiko/osu.Game.Rulesets.Taiko.csproj b/osu.Game.Rulesets.Taiko/osu.Game.Rulesets.Taiko.csproj
index f1c29c1a34..f73831a952 100644
--- a/osu.Game.Rulesets.Taiko/osu.Game.Rulesets.Taiko.csproj
+++ b/osu.Game.Rulesets.Taiko/osu.Game.Rulesets.Taiko.csproj
@@ -36,8 +36,8 @@
$(SolutionDir)\packages\NUnit.3.8.1\lib\net45\nunit.framework.dll
True
-
- $(SolutionDir)\packages\OpenTK.3.0.0-git00009\lib\net20\OpenTK.dll
+
+ $(SolutionDir)\packages\OpenTK.3.0.0-git00021\lib\net20\OpenTK.dll
True
diff --git a/osu.Game.Rulesets.Taiko/packages.config b/osu.Game.Rulesets.Taiko/packages.config
index cde428acea..2369f7529b 100644
--- a/osu.Game.Rulesets.Taiko/packages.config
+++ b/osu.Game.Rulesets.Taiko/packages.config
@@ -1,5 +1,5 @@
-
+
\ No newline at end of file
diff --git a/osu.Game.Tests/Visual/TestCaseNotificationOverlay.cs b/osu.Game.Tests/Visual/TestCaseNotificationOverlay.cs
index 233914767d..a83cead213 100644
--- a/osu.Game.Tests/Visual/TestCaseNotificationOverlay.cs
+++ b/osu.Game.Tests/Visual/TestCaseNotificationOverlay.cs
@@ -1,6 +1,7 @@
// Copyright (c) 2007-2017 ppy Pty Ltd .
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
+using System;
using System.Collections.Generic;
using System.Linq;
using osu.Framework.Graphics;
@@ -16,6 +17,15 @@ namespace osu.Game.Tests.Visual
private readonly NotificationOverlay manager;
private readonly List progressingNotifications = new List();
+ public override IReadOnlyList RequiredTypes => new[]
+ {
+ typeof(Notification),
+ typeof(ProgressNotification),
+ typeof(ProgressCompletionNotification),
+ typeof(SimpleNotification),
+ typeof(IHasCompletionTarget),
+ };
+
public TestCaseNotificationOverlay()
{
progressingNotifications.Clear();
diff --git a/osu.Game.Tests/osu.Game.Tests.csproj b/osu.Game.Tests/osu.Game.Tests.csproj
index e0b9eb4091..df66896d9b 100644
--- a/osu.Game.Tests/osu.Game.Tests.csproj
+++ b/osu.Game.Tests/osu.Game.Tests.csproj
@@ -37,8 +37,8 @@
$(SolutionDir)\packages\NUnit.3.8.1\lib\net45\nunit.framework.dll
True
-
- $(SolutionDir)\packages\OpenTK.3.0.0-git00009\lib\net20\OpenTK.dll
+
+ $(SolutionDir)\packages\OpenTK.3.0.0-git00021\lib\net20\OpenTK.dll
True
diff --git a/osu.Game.Tests/packages.config b/osu.Game.Tests/packages.config
index e09f2a07ba..c2056e09a8 100644
--- a/osu.Game.Tests/packages.config
+++ b/osu.Game.Tests/packages.config
@@ -6,6 +6,6 @@ Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/maste
-
+
\ No newline at end of file
diff --git a/osu.Game/OsuGame.cs b/osu.Game/OsuGame.cs
index fe7ca77d44..1dc4c487f3 100644
--- a/osu.Game/OsuGame.cs
+++ b/osu.Game/OsuGame.cs
@@ -16,6 +16,7 @@ using osu.Game.Screens;
using osu.Game.Screens.Menu;
using OpenTK;
using System.Linq;
+using System.Threading;
using System.Threading.Tasks;
using osu.Framework.Input.Bindings;
using osu.Framework.Platform;
@@ -220,15 +221,7 @@ namespace osu.Game
Depth = -6,
}, overlayContent.Add);
- Logger.NewEntry += entry =>
- {
- if (entry.Level < LogLevel.Important) return;
-
- notifications.Post(new SimpleNotification
- {
- Text = $@"{entry.Level}: {entry.Message}"
- });
- };
+ forwardLoggedErrorsToNotifications();
dependencies.Cache(settings);
dependencies.Cache(social);
@@ -290,6 +283,36 @@ namespace osu.Game
Cursor.State = Visibility.Hidden;
}
+ private void forwardLoggedErrorsToNotifications()
+ {
+ int recentErrorCount = 0;
+
+ const double debounce = 5000;
+
+ Logger.NewEntry += entry =>
+ {
+ if (entry.Level < LogLevel.Error || entry.Target == null) return;
+
+ if (recentErrorCount < 2)
+ {
+ notifications.Post(new SimpleNotification
+ {
+ Icon = FontAwesome.fa_bomb,
+ Text = (recentErrorCount == 0 ? entry.Message : "Subsequent errors occurred and have been logged.") + "\nClick to view log files.",
+ Activated = () =>
+ {
+ Host.Storage.GetStorageForDirectory("logs").OpenInNativeExplorer();
+ return true;
+ }
+ });
+ }
+
+ Interlocked.Increment(ref recentErrorCount);
+
+ Scheduler.AddDelayed(() => Interlocked.Decrement(ref recentErrorCount), debounce);
+ };
+ }
+
private Task asyncLoadStream;
private void loadComponentSingleFile(T d, Action add)
diff --git a/osu.Game/OsuGameBase.cs b/osu.Game/OsuGameBase.cs
index 0ddff5e5aa..ea0bf22112 100644
--- a/osu.Game/OsuGameBase.cs
+++ b/osu.Game/OsuGameBase.cs
@@ -177,8 +177,7 @@ namespace osu.Game
}
catch (MigrationFailedException e)
{
- Logger.Log((e.InnerException ?? e).ToString(), LoggingTarget.Database, LogLevel.Error);
- Logger.Log("Migration failed! We'll be starting with a fresh database.", LoggingTarget.Database, LogLevel.Error);
+ Logger.Error(e.InnerException ?? e, "Migration failed! We'll be starting with a fresh database.", LoggingTarget.Database);
// if we failed, let's delete the database and start fresh.
// todo: we probably want a better (non-destructive) migrations/recovery process at a later point than this.
diff --git a/osu.Game/Overlays/NotificationOverlay.cs b/osu.Game/Overlays/NotificationOverlay.cs
index 2f1c3285ef..f19a80ef47 100644
--- a/osu.Game/Overlays/NotificationOverlay.cs
+++ b/osu.Game/Overlays/NotificationOverlay.cs
@@ -85,9 +85,12 @@ namespace osu.Game.Overlays
private void notificationClosed()
{
- // hide ourselves if all notifications have been dismissed.
- if (totalCount == 0)
- State = Visibility.Hidden;
+ Schedule(() =>
+ {
+ // hide ourselves if all notifications have been dismissed.
+ if (totalCount == 0)
+ State = Visibility.Hidden;
+ });
updateCounts();
}
diff --git a/osu.Game/Overlays/Notifications/Notification.cs b/osu.Game/Overlays/Notifications/Notification.cs
index b4720e79c4..dc2dcf2d74 100644
--- a/osu.Game/Overlays/Notifications/Notification.cs
+++ b/osu.Game/Overlays/Notifications/Notification.cs
@@ -91,7 +91,6 @@ namespace osu.Game.Overlays.Notifications
AutoSizeAxes = Axes.Y,
Padding = new MarginPadding
{
- Top = 5,
Left = 45,
Right = 30
},
diff --git a/osu.Game/Overlays/Notifications/ProgressNotification.cs b/osu.Game/Overlays/Notifications/ProgressNotification.cs
index c39c630858..d797372390 100644
--- a/osu.Game/Overlays/Notifications/ProgressNotification.cs
+++ b/osu.Game/Overlays/Notifications/ProgressNotification.cs
@@ -95,8 +95,8 @@ namespace osu.Game.Overlays.Notifications
protected virtual void Completed()
{
- base.Close();
CompletionTarget?.Invoke(CreateCompletionNotification());
+ base.Close();
}
public override bool DisplayOnTop => false;
diff --git a/osu.Game/Rulesets/Edit/HitObjectComposer.cs b/osu.Game/Rulesets/Edit/HitObjectComposer.cs
index 4487f74364..36740b96cb 100644
--- a/osu.Game/Rulesets/Edit/HitObjectComposer.cs
+++ b/osu.Game/Rulesets/Edit/HitObjectComposer.cs
@@ -42,7 +42,7 @@ namespace osu.Game.Rulesets.Edit
}
catch (Exception e)
{
- Logger.Log($"Could not load this beatmap sucessfully ({e})!", LoggingTarget.Runtime, LogLevel.Error);
+ Logger.Error(e, "Could not load beatmap sucessfully!");
return;
}
diff --git a/osu.Game/Screens/Play/Player.cs b/osu.Game/Screens/Play/Player.cs
index 340fc39d52..546bb0dcff 100644
--- a/osu.Game/Screens/Play/Player.cs
+++ b/osu.Game/Screens/Play/Player.cs
@@ -46,6 +46,8 @@ namespace osu.Game.Screens.Play
public bool HasFailed { get; private set; }
public bool AllowPause { get; set; } = true;
+ public bool AllowLeadIn { get; set; } = true;
+ public bool AllowResults { get; set; } = true;
public int RestartCount;
@@ -125,7 +127,7 @@ namespace osu.Game.Screens.Play
}
catch (Exception e)
{
- Logger.Log($"Could not load this beatmap sucessfully ({e})!", LoggingTarget.Runtime, LogLevel.Error);
+ Logger.Error(e, "Could not load beatmap sucessfully!");
//couldn't load, hard abort!
Exit();
@@ -136,7 +138,10 @@ namespace osu.Game.Screens.Play
decoupledClock = new DecoupleableInterpolatingFramedClock { IsCoupled = false };
var firstObjectTime = RulesetContainer.Objects.First().StartTime;
- decoupledClock.Seek(Math.Min(0, firstObjectTime - Math.Max(beatmap.ControlPointInfo.TimingPointAt(firstObjectTime).BeatLength * 4, beatmap.BeatmapInfo.AudioLeadIn)));
+ decoupledClock.Seek(AllowLeadIn
+ ? Math.Min(0, firstObjectTime - Math.Max(beatmap.ControlPointInfo.TimingPointAt(firstObjectTime).BeatLength * 4, beatmap.BeatmapInfo.AudioLeadIn))
+ : firstObjectTime);
+
decoupledClock.ProcessFrame();
offsetClock = new FramedOffsetClock(decoupledClock);
@@ -273,6 +278,8 @@ namespace osu.Game.Screens.Play
ValidForResume = false;
+ if (!AllowResults) return;
+
using (BeginDelayedSequence(1000))
{
onCompletionEvent = Schedule(delegate
diff --git a/osu.Game/Screens/Select/SongSelect.cs b/osu.Game/Screens/Select/SongSelect.cs
index b4494936f4..9e5a2fa633 100644
--- a/osu.Game/Screens/Select/SongSelect.cs
+++ b/osu.Game/Screens/Select/SongSelect.cs
@@ -444,7 +444,7 @@ namespace osu.Game.Screens.Select
{
if (!Beatmap.IsDefault && Beatmap.Value.BeatmapSetInfo?.DeletePending == false)
Carousel.SelectBeatmap(Beatmap.Value.BeatmapInfo);
- else
+ else if (Carousel.SelectedBeatmapSet == null)
Carousel.SelectNextRandom();
}
diff --git a/osu.Game/Tests/Beatmaps/TestWorkingBeatmap.cs b/osu.Game/Tests/Beatmaps/TestWorkingBeatmap.cs
index da139775b1..82248c2cb8 100644
--- a/osu.Game/Tests/Beatmaps/TestWorkingBeatmap.cs
+++ b/osu.Game/Tests/Beatmaps/TestWorkingBeatmap.cs
@@ -19,6 +19,6 @@ namespace osu.Game.Tests.Beatmaps
protected override Beatmap GetBeatmap() => beatmap;
protected override Texture GetBackground() => null;
- protected override Track GetTrack() => null;
+ protected override Track GetTrack() => new TrackVirtual();
}
}
diff --git a/osu.Game/Tests/Visual/TestCasePlayer.cs b/osu.Game/Tests/Visual/TestCasePlayer.cs
index 106f0fa8f3..933781890f 100644
--- a/osu.Game/Tests/Visual/TestCasePlayer.cs
+++ b/osu.Game/Tests/Visual/TestCasePlayer.cs
@@ -22,6 +22,8 @@ namespace osu.Game.Tests.Visual
protected Player Player;
+ private TestWorkingBeatmap working;
+
///
/// Create a TestCase which runs through the Player screen.
///
@@ -75,7 +77,7 @@ namespace osu.Game.Tests.Visual
var instance = r.CreateInstance();
- WorkingBeatmap working = new TestWorkingBeatmap(beatmap);
+ working = new TestWorkingBeatmap(beatmap);
working.Mods.Value = new[] { instance.GetAllMods().First(m => m is ModNoFail) };
if (Player != null)
@@ -88,10 +90,21 @@ namespace osu.Game.Tests.Visual
return player;
}
+ protected override void Update()
+ {
+ base.Update();
+
+ if (working != null)
+ // note that this will override any mod rate application
+ working.Track.Rate = Clock.Rate;
+ }
+
protected virtual Player CreatePlayer(WorkingBeatmap beatmap, Ruleset ruleset) => new Player
{
InitialBeatmap = beatmap,
- AllowPause = false
+ AllowPause = false,
+ AllowLeadIn = false,
+ AllowResults = false,
};
private const string test_beatmap_data =
diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj
index b5f93123fd..7d146c0a12 100644
--- a/osu.Game/osu.Game.csproj
+++ b/osu.Game/osu.Game.csproj
@@ -143,8 +143,8 @@
$(SolutionDir)\packages\NUnit.3.8.1\lib\net45\nunit.framework.dll
True
-
- $(SolutionDir)\packages\OpenTK.3.0.0-git00009\lib\net20\OpenTK.dll
+
+ $(SolutionDir)\packages\OpenTK.3.0.0-git00021\lib\net20\OpenTK.dll
True
diff --git a/osu.Game/packages.config b/osu.Game/packages.config
index 02ace918de..3ba50388e8 100644
--- a/osu.Game/packages.config
+++ b/osu.Game/packages.config
@@ -66,7 +66,7 @@ Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/maste
-
+