diff --git a/fastlane/Fastfile b/fastlane/Fastfile
index 18b5907e82..cc5abf5b03 100644
--- a/fastlane/Fastfile
+++ b/fastlane/Fastfile
@@ -48,6 +48,13 @@ desc 'Deploy to play store'
desc 'Compile the project'
lane :build do |options|
+ nuget_restore(project_path: 'osu.Android/osu.Android.csproj')
+ nuget_restore(project_path: 'osu.Game/osu.Game.csproj')
+ nuget_restore(project_path: 'osu.Game.Rulesets.Osu/osu.Game.Rulesets.Osu.csproj')
+ nuget_restore(project_path: 'osu.Game.Rulesets.Taiko/osu.Game.Rulesets.Taiko.csproj')
+ nuget_restore(project_path: 'osu.Game.Rulesets.Catch/osu.Game.Rulesets.Catch.csproj')
+ nuget_restore(project_path: 'osu.Game.Rulesets.Mania/osu.Game.Rulesets.Mania.csproj')
+
souyuz(
build_configuration: 'Release',
solution_path: 'osu.sln',
@@ -103,6 +110,13 @@ platform :ios do
desc 'Compile the project'
lane :build do
+ nuget_restore(project_path: 'osu.iOS/osu.iOS.csproj')
+ nuget_restore(project_path: 'osu.Game/osu.Game.csproj')
+ nuget_restore(project_path: 'osu.Game.Rulesets.Osu/osu.Game.Rulesets.Osu.csproj')
+ nuget_restore(project_path: 'osu.Game.Rulesets.Taiko/osu.Game.Rulesets.Taiko.csproj')
+ nuget_restore(project_path: 'osu.Game.Rulesets.Catch/osu.Game.Rulesets.Catch.csproj')
+ nuget_restore(project_path: 'osu.Game.Rulesets.Mania/osu.Game.Rulesets.Mania.csproj')
+
souyuz(
platform: "ios",
plist_path: "osu.iOS/Info.plist"
diff --git a/osu.Android.props b/osu.Android.props
index db5c933c41..9ad5946311 100644
--- a/osu.Android.props
+++ b/osu.Android.props
@@ -52,6 +52,6 @@
-
+
diff --git a/osu.Game.Rulesets.Osu/Edit/OsuSelectionHandler.cs b/osu.Game.Rulesets.Osu/Edit/OsuSelectionHandler.cs
index 660e1844aa..871339ae7b 100644
--- a/osu.Game.Rulesets.Osu/Edit/OsuSelectionHandler.cs
+++ b/osu.Game.Rulesets.Osu/Edit/OsuSelectionHandler.cs
@@ -236,7 +236,20 @@ namespace osu.Game.Rulesets.Osu.Edit
///
/// The hit objects to calculate a quad for.
private Quad getSurroundingQuad(OsuHitObject[] hitObjects) =>
- getSurroundingQuad(hitObjects.SelectMany(h => new[] { h.Position, h.EndPosition }));
+ getSurroundingQuad(hitObjects.SelectMany(h =>
+ {
+ if (h is IHasPath path)
+ {
+ return new[]
+ {
+ h.Position,
+ // can't use EndPosition for reverse slider cases.
+ h.Position + path.Path.PositionAt(1)
+ };
+ }
+
+ return new[] { h.Position };
+ }));
///
/// Returns a gamefield-space quad surrounding the provided points.
diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSpinner.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSpinner.cs
index 1f3bcece0c..56aedebed3 100644
--- a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSpinner.cs
+++ b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSpinner.cs
@@ -130,12 +130,12 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables
{
if (tracking.NewValue)
{
- spinningSample?.Play();
- spinningSample?.VolumeTo(1, 200);
+ spinningSample?.Play(!spinningSample.IsPlaying);
+ spinningSample?.VolumeTo(1, 300);
}
else
{
- spinningSample?.VolumeTo(0, 200).Finally(_ => spinningSample.Stop());
+ spinningSample?.VolumeTo(0, 300).OnComplete(_ => spinningSample.Stop());
}
}
diff --git a/osu.Game.Tests/Rulesets/TestSceneDrawableRulesetDependencies.cs b/osu.Game.Tests/Rulesets/TestSceneDrawableRulesetDependencies.cs
index 33e3c7cb8c..987a5812db 100644
--- a/osu.Game.Tests/Rulesets/TestSceneDrawableRulesetDependencies.cs
+++ b/osu.Game.Tests/Rulesets/TestSceneDrawableRulesetDependencies.cs
@@ -9,7 +9,6 @@ using NUnit.Framework;
using osu.Framework.Allocation;
using osu.Framework.Audio;
using osu.Framework.Audio.Sample;
-using osu.Framework.Audio.Track;
using osu.Framework.Bindables;
using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers;
diff --git a/osu.Game.Tests/Testing/TestSceneRulesetDependencies.cs b/osu.Game.Tests/Testing/TestSceneRulesetDependencies.cs
index 80f1b02794..97087e31ab 100644
--- a/osu.Game.Tests/Testing/TestSceneRulesetDependencies.cs
+++ b/osu.Game.Tests/Testing/TestSceneRulesetDependencies.cs
@@ -5,7 +5,7 @@ using System;
using System.Collections.Generic;
using NUnit.Framework;
using osu.Framework.Allocation;
-using osu.Framework.Audio.Track;
+using osu.Framework.Audio.Sample;
using osu.Framework.Configuration.Tracking;
using osu.Framework.Graphics.Textures;
using osu.Framework.IO.Stores;
diff --git a/osu.Game.Tests/Visual/Multiplayer/TestSceneDrawableRoomPlaylist.cs b/osu.Game.Tests/Visual/Multiplayer/TestSceneDrawableRoomPlaylist.cs
index 17d85d1120..874c1694eb 100644
--- a/osu.Game.Tests/Visual/Multiplayer/TestSceneDrawableRoomPlaylist.cs
+++ b/osu.Game.Tests/Visual/Multiplayer/TestSceneDrawableRoomPlaylist.cs
@@ -201,11 +201,20 @@ namespace osu.Game.Tests.Visual.Multiplayer
}
[Test]
- public void TestDownloadButtonHiddenInitiallyWhenBeatmapExists()
+ public void TestDownloadButtonHiddenWhenBeatmapExists()
{
createPlaylist(new TestBeatmap(new OsuRuleset().RulesetInfo).BeatmapInfo);
- AddAssert("download button hidden", () => !playlist.ChildrenOfType().Single().IsPresent);
+ assertDownloadButtonVisible(false);
+
+ AddStep("delete beatmap set", () => manager.Delete(manager.QueryBeatmapSets(_ => true).Single()));
+ assertDownloadButtonVisible(true);
+
+ AddStep("undelete beatmap set", () => manager.Undelete(manager.QueryBeatmapSets(_ => true).Single()));
+ assertDownloadButtonVisible(false);
+
+ void assertDownloadButtonVisible(bool visible) => AddUntilStep($"download button {(visible ? "shown" : "hidden")}",
+ () => playlist.ChildrenOfType().Single().Alpha == (visible ? 1 : 0));
}
[Test]
diff --git a/osu.Game/Rulesets/UI/DrawableRulesetDependencies.cs b/osu.Game/Rulesets/UI/DrawableRulesetDependencies.cs
index b13b20dae2..81ec73a6c5 100644
--- a/osu.Game/Rulesets/UI/DrawableRulesetDependencies.cs
+++ b/osu.Game/Rulesets/UI/DrawableRulesetDependencies.cs
@@ -8,7 +8,6 @@ using System.Threading.Tasks;
using osu.Framework.Allocation;
using osu.Framework.Audio;
using osu.Framework.Audio.Sample;
-using osu.Framework.Audio.Track;
using osu.Framework.Bindables;
using osu.Framework.Graphics.OpenGL.Textures;
using osu.Framework.Graphics.Textures;
diff --git a/osu.Game/Rulesets/UI/Playfield.cs b/osu.Game/Rulesets/UI/Playfield.cs
index b4e0025351..c40ab4bd94 100644
--- a/osu.Game/Rulesets/UI/Playfield.cs
+++ b/osu.Game/Rulesets/UI/Playfield.cs
@@ -8,7 +8,6 @@ using JetBrains.Annotations;
using osu.Framework.Graphics;
using osu.Game.Rulesets.Objects.Drawables;
using osu.Framework.Allocation;
-using osu.Framework.Audio.Track;
using osu.Framework.Bindables;
using osu.Framework.Extensions.IEnumerableExtensions;
using osu.Framework.Graphics.Containers;
@@ -20,6 +19,7 @@ using osu.Game.Rulesets.Objects;
using osu.Game.Skinning;
using osuTK;
using System.Diagnostics;
+using osu.Framework.Audio.Sample;
namespace osu.Game.Rulesets.UI
{
diff --git a/osu.Game/Screens/OnlinePlay/DrawableRoomPlaylistItem.cs b/osu.Game/Screens/OnlinePlay/DrawableRoomPlaylistItem.cs
index b16f82fce9..f8982582d5 100644
--- a/osu.Game/Screens/OnlinePlay/DrawableRoomPlaylistItem.cs
+++ b/osu.Game/Screens/OnlinePlay/DrawableRoomPlaylistItem.cs
@@ -249,6 +249,8 @@ namespace osu.Game.Screens.OnlinePlay
[Resolved]
private BeatmapManager beatmapManager { get; set; }
+ public override bool IsPresent => base.IsPresent || Scheduler.HasPendingTasks;
+
public PlaylistDownloadButton(PlaylistItem playlistItem)
: base(playlistItem.Beatmap.Value.BeatmapSet)
{
diff --git a/osu.Game/Skinning/PausableSkinnableSound.cs b/osu.Game/Skinning/PausableSkinnableSound.cs
index 4b6099e85f..cb5234c847 100644
--- a/osu.Game/Skinning/PausableSkinnableSound.cs
+++ b/osu.Game/Skinning/PausableSkinnableSound.cs
@@ -67,7 +67,7 @@ namespace osu.Game.Skinning
}
}
- public override void Play()
+ public override void Play(bool restart = true)
{
cancelPendingStart();
RequestedPlaying = true;
@@ -75,7 +75,7 @@ namespace osu.Game.Skinning
if (samplePlaybackDisabled.Value)
return;
- base.Play();
+ base.Play(restart);
}
public override void Stop()
diff --git a/osu.Game/Skinning/PoolableSkinnableSample.cs b/osu.Game/Skinning/PoolableSkinnableSample.cs
index cc6b85a13e..2a0f480b48 100644
--- a/osu.Game/Skinning/PoolableSkinnableSample.cs
+++ b/osu.Game/Skinning/PoolableSkinnableSample.cs
@@ -5,7 +5,7 @@ using System;
using JetBrains.Annotations;
using osu.Framework.Allocation;
using osu.Framework.Audio;
-using osu.Framework.Audio.Track;
+using osu.Framework.Audio.Sample;
using osu.Framework.Bindables;
using osu.Framework.Graphics;
using osu.Framework.Graphics.Audio;
diff --git a/osu.Game/Skinning/SkinnableSound.cs b/osu.Game/Skinning/SkinnableSound.cs
index 645c08cd00..a874e9a0db 100644
--- a/osu.Game/Skinning/SkinnableSound.cs
+++ b/osu.Game/Skinning/SkinnableSound.cs
@@ -7,7 +7,7 @@ using System.Linq;
using JetBrains.Annotations;
using osu.Framework.Allocation;
using osu.Framework.Audio;
-using osu.Framework.Audio.Track;
+using osu.Framework.Audio.Sample;
using osu.Framework.Bindables;
using osu.Framework.Extensions.IEnumerableExtensions;
using osu.Framework.Graphics;
@@ -119,12 +119,13 @@ namespace osu.Game.Skinning
///
/// Plays the samples.
///
- public virtual void Play()
+ /// Whether to play the sample from the beginning.
+ public virtual void Play(bool restart = true)
{
samplesContainer.ForEach(c =>
{
if (PlayWhenZeroVolume || c.AggregateVolume.Value > 0)
- c.Play();
+ c.Play(restart);
});
}
diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj
index 301ee39a61..2b8f81532d 100644
--- a/osu.Game/osu.Game.csproj
+++ b/osu.Game/osu.Game.csproj
@@ -26,7 +26,7 @@
-
+
diff --git a/osu.iOS.props b/osu.iOS.props
index 225cf981f2..4732620085 100644
--- a/osu.iOS.props
+++ b/osu.iOS.props
@@ -70,7 +70,7 @@
-
+
@@ -88,7 +88,7 @@
-
+