1
0
mirror of https://github.com/ppy/osu.git synced 2025-02-22 05:23:05 +08:00

Merge branch 'master' into fix-slider-path-extension-incorrectness

This commit is contained in:
Dean Herbert 2021-10-26 17:36:50 +09:00
commit d5b4c68d3a
12 changed files with 47 additions and 28 deletions

View File

@ -52,7 +52,7 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="ppy.osu.Game.Resources" Version="2021.1015.0" /> <PackageReference Include="ppy.osu.Game.Resources" Version="2021.1015.0" />
<PackageReference Include="ppy.osu.Framework.Android" Version="2021.1014.0" /> <PackageReference Include="ppy.osu.Framework.Android" Version="2021.1026.0" />
</ItemGroup> </ItemGroup>
<ItemGroup Label="Transitive Dependencies"> <ItemGroup Label="Transitive Dependencies">
<!-- Realm needs to be directly referenced in all Xamarin projects, as it will not pull in its transitive dependencies otherwise. --> <!-- Realm needs to be directly referenced in all Xamarin projects, as it will not pull in its transitive dependencies otherwise. -->

View File

@ -56,6 +56,11 @@ namespace osu.Game.Tests.Visual.Editing
checkMutations(); checkMutations();
// After placement these must be non-default as defaults are read-only.
AddAssert("Placed object has non-default control points", () =>
editorBeatmap.HitObjects[0].SampleControlPoint != SampleControlPoint.DEFAULT &&
editorBeatmap.HitObjects[0].DifficultyControlPoint != DifficultyControlPoint.DEFAULT);
AddStep("Save", () => InputManager.Keys(PlatformAction.Save)); AddStep("Save", () => InputManager.Keys(PlatformAction.Save));
checkMutations(); checkMutations();

View File

@ -462,10 +462,12 @@ namespace osu.Game.Database
if (retrievedItem == null) if (retrievedItem == null)
throw new ArgumentException(@"Specified model could not be found", nameof(item)); throw new ArgumentException(@"Specified model could not be found", nameof(item));
using (var outputStream = exportStorage.GetStream($"{getValidFilename(item.ToString())}{HandledExtensions.First()}", FileAccess.Write, FileMode.Create)) string filename = $"{getValidFilename(item.ToString())}{HandledExtensions.First()}";
ExportModelTo(retrievedItem, outputStream);
exportStorage.OpenInNativeExplorer(); using (var stream = exportStorage.GetStream(filename, FileAccess.Write, FileMode.Create))
ExportModelTo(retrievedItem, stream);
exportStorage.PresentFileExternally(filename);
} }
/// <summary> /// <summary>

View File

@ -109,40 +109,42 @@ namespace osu.Game.Graphics
if (Interlocked.Decrement(ref screenShotTasks) == 0 && cursorVisibility.Value == false) if (Interlocked.Decrement(ref screenShotTasks) == 0 && cursorVisibility.Value == false)
cursorVisibility.Value = true; cursorVisibility.Value = true;
var fileName = getFileName(); string filename = getFilename();
if (fileName == null) return;
var stream = storage.GetStream(fileName, FileAccess.Write); if (filename == null) return;
switch (screenshotFormat.Value) using (var stream = storage.GetStream(filename, FileAccess.Write))
{ {
case ScreenshotFormat.Png: switch (screenshotFormat.Value)
await image.SaveAsPngAsync(stream).ConfigureAwait(false); {
break; case ScreenshotFormat.Png:
await image.SaveAsPngAsync(stream).ConfigureAwait(false);
break;
case ScreenshotFormat.Jpg: case ScreenshotFormat.Jpg:
const int jpeg_quality = 92; const int jpeg_quality = 92;
await image.SaveAsJpegAsync(stream, new JpegEncoder { Quality = jpeg_quality }).ConfigureAwait(false); await image.SaveAsJpegAsync(stream, new JpegEncoder { Quality = jpeg_quality }).ConfigureAwait(false);
break; break;
default: default:
throw new InvalidOperationException($"Unknown enum member {nameof(ScreenshotFormat)} {screenshotFormat.Value}."); throw new InvalidOperationException($"Unknown enum member {nameof(ScreenshotFormat)} {screenshotFormat.Value}.");
}
} }
notificationOverlay.Post(new SimpleNotification notificationOverlay.Post(new SimpleNotification
{ {
Text = $"{fileName} saved!", Text = $"{filename} saved!",
Activated = () => Activated = () =>
{ {
storage.OpenInNativeExplorer(); storage.PresentFileExternally(filename);
return true; return true;
} }
}); });
} }
}); });
private string getFileName() private string getFilename()
{ {
var dt = DateTime.Now; var dt = DateTime.Now;
var fileExt = screenshotFormat.ToString().ToLowerInvariant(); var fileExt = screenshotFormat.ToString().ToLowerInvariant();

View File

@ -70,7 +70,9 @@ namespace osu.Game.IO
public override Stream GetStream(string path, FileAccess access = FileAccess.Read, FileMode mode = FileMode.OpenOrCreate) => public override Stream GetStream(string path, FileAccess access = FileAccess.Read, FileMode mode = FileMode.OpenOrCreate) =>
UnderlyingStorage.GetStream(MutatePath(path), access, mode); UnderlyingStorage.GetStream(MutatePath(path), access, mode);
public override void OpenPathInNativeExplorer(string path) => UnderlyingStorage.OpenPathInNativeExplorer(MutatePath(path)); public override void OpenFileExternally(string filename) => UnderlyingStorage.OpenFileExternally(MutatePath(filename));
public override void PresentFileExternally(string filename) => UnderlyingStorage.PresentFileExternally(MutatePath(filename));
public override Storage GetStorageForDirectory(string path) public override Storage GetStorageForDirectory(string path)
{ {

View File

@ -913,13 +913,15 @@ namespace osu.Game
} }
else if (recentLogCount == short_term_display_limit) else if (recentLogCount == short_term_display_limit)
{ {
var logFile = $@"{entry.Target.ToString().ToLowerInvariant()}.log";
Schedule(() => Notifications.Post(new SimpleNotification Schedule(() => Notifications.Post(new SimpleNotification
{ {
Icon = FontAwesome.Solid.EllipsisH, Icon = FontAwesome.Solid.EllipsisH,
Text = "Subsequent messages have been logged. Click to view log files.", Text = "Subsequent messages have been logged. Click to view log files.",
Activated = () => Activated = () =>
{ {
Storage.GetStorageForDirectory("logs").OpenInNativeExplorer(); Storage.GetStorageForDirectory(@"logs").PresentFileExternally(logFile);
return true; return true;
} }
})); }));

View File

@ -67,7 +67,7 @@ namespace osu.Game.Overlays.Settings.Sections.General
Add(new SettingsButton Add(new SettingsButton
{ {
Text = GeneralSettingsStrings.OpenOsuFolder, Text = GeneralSettingsStrings.OpenOsuFolder,
Action = storage.OpenInNativeExplorer, Action = storage.PresentExternally,
}); });
Add(new SettingsButton Add(new SettingsButton

View File

@ -119,6 +119,8 @@ namespace osu.Game.Rulesets.Objects
DifficultyControlPoint = (DifficultyControlPoint)legacyInfo.DifficultyPointAt(StartTime).DeepClone(); DifficultyControlPoint = (DifficultyControlPoint)legacyInfo.DifficultyPointAt(StartTime).DeepClone();
DifficultyControlPoint.Time = StartTime; DifficultyControlPoint.Time = StartTime;
} }
else if (DifficultyControlPoint == DifficultyControlPoint.DEFAULT)
DifficultyControlPoint = new DifficultyControlPoint();
ApplyDefaultsToSelf(controlPointInfo, difficulty); ApplyDefaultsToSelf(controlPointInfo, difficulty);
@ -128,6 +130,8 @@ namespace osu.Game.Rulesets.Objects
SampleControlPoint = (SampleControlPoint)legacyInfo.SamplePointAt(this.GetEndTime() + control_point_leniency).DeepClone(); SampleControlPoint = (SampleControlPoint)legacyInfo.SamplePointAt(this.GetEndTime() + control_point_leniency).DeepClone();
SampleControlPoint.Time = this.GetEndTime() + control_point_leniency; SampleControlPoint.Time = this.GetEndTime() + control_point_leniency;
} }
else if (SampleControlPoint == SampleControlPoint.DEFAULT)
SampleControlPoint = new SampleControlPoint();
nestedHitObjects.Clear(); nestedHitObjects.Clear();

View File

@ -19,7 +19,7 @@ namespace osu.Game.Rulesets.Objects
public static void Reverse(this SliderPath sliderPath, out Vector2 positionalOffset) public static void Reverse(this SliderPath sliderPath, out Vector2 positionalOffset)
{ {
var points = sliderPath.ControlPoints.ToArray(); var points = sliderPath.ControlPoints.ToArray();
positionalOffset = points.Last().Position; positionalOffset = sliderPath.PositionAt(1);
sliderPath.ControlPoints.Clear(); sliderPath.ControlPoints.Clear();
@ -32,7 +32,10 @@ namespace osu.Game.Rulesets.Objects
// propagate types forwards to last null type // propagate types forwards to last null type
if (i == points.Length - 1) if (i == points.Length - 1)
{
p.Type = lastType; p.Type = lastType;
p.Position = Vector2.Zero;
}
else if (p.Type != null) else if (p.Type != null)
(p.Type, lastType) = (lastType, p.Type); (p.Type, lastType) = (lastType, p.Type);

View File

@ -10,7 +10,6 @@ using osu.Game.Input.Bindings;
using osu.Game.Online.Rooms; using osu.Game.Online.Rooms;
using osu.Game.Screens.OnlinePlay.Match.Components; using osu.Game.Screens.OnlinePlay.Match.Components;
using osu.Game.Screens.Play; using osu.Game.Screens.Play;
using osuTK.Input;
namespace osu.Game.Screens.OnlinePlay.Multiplayer namespace osu.Game.Screens.OnlinePlay.Multiplayer
{ {

View File

@ -36,7 +36,7 @@
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference> </PackageReference>
<PackageReference Include="Realm" Version="10.6.0" /> <PackageReference Include="Realm" Version="10.6.0" />
<PackageReference Include="ppy.osu.Framework" Version="2021.1014.0" /> <PackageReference Include="ppy.osu.Framework" Version="2021.1026.0" />
<PackageReference Include="ppy.osu.Game.Resources" Version="2021.1015.0" /> <PackageReference Include="ppy.osu.Game.Resources" Version="2021.1015.0" />
<PackageReference Include="Sentry" Version="3.9.4" /> <PackageReference Include="Sentry" Version="3.9.4" />
<PackageReference Include="SharpCompress" Version="0.29.0" /> <PackageReference Include="SharpCompress" Version="0.29.0" />

View File

@ -70,7 +70,7 @@
<Reference Include="System.Net.Http" /> <Reference Include="System.Net.Http" />
</ItemGroup> </ItemGroup>
<ItemGroup Label="Package References"> <ItemGroup Label="Package References">
<PackageReference Include="ppy.osu.Framework.iOS" Version="2021.1014.0" /> <PackageReference Include="ppy.osu.Framework.iOS" Version="2021.1026.0" />
<PackageReference Include="ppy.osu.Game.Resources" Version="2021.1015.0" /> <PackageReference Include="ppy.osu.Game.Resources" Version="2021.1015.0" />
</ItemGroup> </ItemGroup>
<!-- See https://github.com/dotnet/runtime/issues/35988 (can be removed after Xamarin uses net5.0 / net6.0) --> <!-- See https://github.com/dotnet/runtime/issues/35988 (can be removed after Xamarin uses net5.0 / net6.0) -->
@ -93,7 +93,7 @@
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="2.2.6" /> <PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="2.2.6" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite.Core" Version="2.2.6" /> <PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite.Core" Version="2.2.6" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" /> <PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
<PackageReference Include="ppy.osu.Framework" Version="2021.1014.0" /> <PackageReference Include="ppy.osu.Framework" Version="2021.1026.0" />
<PackageReference Include="SharpCompress" Version="0.28.3" /> <PackageReference Include="SharpCompress" Version="0.28.3" />
<PackageReference Include="NUnit" Version="3.13.2" /> <PackageReference Include="NUnit" Version="3.13.2" />
<PackageReference Include="SharpRaven" Version="2.4.0" /> <PackageReference Include="SharpRaven" Version="2.4.0" />