mirror of
https://github.com/osukey/osukey.git
synced 2025-06-01 02:47:31 +09:00
Merge branch 'master' into news-fix
This commit is contained in:
commit
8644d04a84
@ -52,6 +52,6 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="ppy.osu.Game.Resources" Version="2020.731.0" />
|
<PackageReference Include="ppy.osu.Game.Resources" Version="2020.731.0" />
|
||||||
<PackageReference Include="ppy.osu.Framework.Android" Version="2020.730.1" />
|
<PackageReference Include="ppy.osu.Framework.Android" Version="2020.804.0" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
@ -23,7 +23,8 @@ namespace osu.Game.Rulesets.Osu.UI
|
|||||||
{
|
{
|
||||||
public class OsuPlayfield : Playfield
|
public class OsuPlayfield : Playfield
|
||||||
{
|
{
|
||||||
private readonly ApproachCircleProxyContainer approachCircles;
|
private readonly ProxyContainer approachCircles;
|
||||||
|
private readonly ProxyContainer spinnerProxies;
|
||||||
private readonly JudgementContainer<DrawableOsuJudgement> judgementLayer;
|
private readonly JudgementContainer<DrawableOsuJudgement> judgementLayer;
|
||||||
private readonly FollowPointRenderer followPoints;
|
private readonly FollowPointRenderer followPoints;
|
||||||
private readonly OrderedHitPolicy hitPolicy;
|
private readonly OrderedHitPolicy hitPolicy;
|
||||||
@ -38,6 +39,10 @@ namespace osu.Game.Rulesets.Osu.UI
|
|||||||
{
|
{
|
||||||
InternalChildren = new Drawable[]
|
InternalChildren = new Drawable[]
|
||||||
{
|
{
|
||||||
|
spinnerProxies = new ProxyContainer
|
||||||
|
{
|
||||||
|
RelativeSizeAxes = Axes.Both
|
||||||
|
},
|
||||||
followPoints = new FollowPointRenderer
|
followPoints = new FollowPointRenderer
|
||||||
{
|
{
|
||||||
RelativeSizeAxes = Axes.Both,
|
RelativeSizeAxes = Axes.Both,
|
||||||
@ -54,7 +59,7 @@ namespace osu.Game.Rulesets.Osu.UI
|
|||||||
{
|
{
|
||||||
Child = HitObjectContainer,
|
Child = HitObjectContainer,
|
||||||
},
|
},
|
||||||
approachCircles = new ApproachCircleProxyContainer
|
approachCircles = new ProxyContainer
|
||||||
{
|
{
|
||||||
RelativeSizeAxes = Axes.Both,
|
RelativeSizeAxes = Axes.Both,
|
||||||
Depth = -1,
|
Depth = -1,
|
||||||
@ -76,6 +81,9 @@ namespace osu.Game.Rulesets.Osu.UI
|
|||||||
h.OnNewResult += onNewResult;
|
h.OnNewResult += onNewResult;
|
||||||
h.OnLoadComplete += d =>
|
h.OnLoadComplete += d =>
|
||||||
{
|
{
|
||||||
|
if (d is DrawableSpinner)
|
||||||
|
spinnerProxies.Add(d.CreateProxy());
|
||||||
|
|
||||||
if (d is IDrawableHitObjectWithProxiedApproach c)
|
if (d is IDrawableHitObjectWithProxiedApproach c)
|
||||||
approachCircles.Add(c.ProxiedLayer.CreateProxy());
|
approachCircles.Add(c.ProxiedLayer.CreateProxy());
|
||||||
};
|
};
|
||||||
@ -113,9 +121,9 @@ namespace osu.Game.Rulesets.Osu.UI
|
|||||||
|
|
||||||
public override bool ReceivePositionalInputAt(Vector2 screenSpacePos) => HitObjectContainer.ReceivePositionalInputAt(screenSpacePos);
|
public override bool ReceivePositionalInputAt(Vector2 screenSpacePos) => HitObjectContainer.ReceivePositionalInputAt(screenSpacePos);
|
||||||
|
|
||||||
private class ApproachCircleProxyContainer : LifetimeManagementContainer
|
private class ProxyContainer : LifetimeManagementContainer
|
||||||
{
|
{
|
||||||
public void Add(Drawable approachCircleProxy) => AddInternal(approachCircleProxy);
|
public void Add(Drawable proxy) => AddInternal(proxy);
|
||||||
}
|
}
|
||||||
|
|
||||||
private class DrawableJudgementPool : DrawablePool<DrawableOsuJudgement>
|
private class DrawableJudgementPool : DrawablePool<DrawableOsuJudgement>
|
||||||
|
@ -6,9 +6,9 @@ using osu.Framework.IO.Stores;
|
|||||||
using osu.Framework.Testing;
|
using osu.Framework.Testing;
|
||||||
using osu.Game.Rulesets;
|
using osu.Game.Rulesets;
|
||||||
using osu.Game.Rulesets.Osu;
|
using osu.Game.Rulesets.Osu;
|
||||||
using osu.Game.Skinning;
|
|
||||||
using osu.Game.Tests.Beatmaps;
|
using osu.Game.Tests.Beatmaps;
|
||||||
using osu.Game.Tests.Resources;
|
using osu.Game.Tests.Resources;
|
||||||
|
using static osu.Game.Skinning.LegacySkinConfiguration;
|
||||||
|
|
||||||
namespace osu.Game.Tests.Gameplay
|
namespace osu.Game.Tests.Gameplay
|
||||||
{
|
{
|
||||||
@ -211,7 +211,7 @@ namespace osu.Game.Tests.Gameplay
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Tests that when a custom sample bank is used, but <see cref="GlobalSkinConfiguration.LayeredHitSounds"/> is disabled,
|
/// Tests that when a custom sample bank is used, but <see cref="LegacySetting.LayeredHitSounds"/> is disabled,
|
||||||
/// only the additional sound will be looked up.
|
/// only the additional sound will be looked up.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[Test]
|
[Test]
|
||||||
@ -230,7 +230,7 @@ namespace osu.Game.Tests.Gameplay
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Tests that when a normal sample bank is used and <see cref="GlobalSkinConfiguration.LayeredHitSounds"/> is disabled,
|
/// Tests that when a normal sample bank is used and <see cref="LegacySetting.LayeredHitSounds"/> is disabled,
|
||||||
/// the normal sound will be looked up anyway.
|
/// the normal sound will be looked up anyway.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[Test]
|
[Test]
|
||||||
@ -247,6 +247,6 @@ namespace osu.Game.Tests.Gameplay
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void disableLayeredHitSounds()
|
private void disableLayeredHitSounds()
|
||||||
=> AddStep("set LayeredHitSounds to false", () => Skin.Configuration.ConfigDictionary[GlobalSkinConfiguration.LayeredHitSounds.ToString()] = "0");
|
=> AddStep("set LayeredHitSounds to false", () => Skin.Configuration.ConfigDictionary[LegacySetting.LayeredHitSounds.ToString()] = "0");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,150 @@
|
|||||||
|
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
|
||||||
|
// See the LICENCE file in the repository root for full licence text.
|
||||||
|
|
||||||
|
using osu.Framework.Graphics.Containers;
|
||||||
|
using osu.Framework.Graphics;
|
||||||
|
using osu.Game.Overlays.Dashboard.Home;
|
||||||
|
using osu.Game.Beatmaps;
|
||||||
|
using osu.Game.Overlays;
|
||||||
|
using osu.Framework.Allocation;
|
||||||
|
using osu.Game.Users;
|
||||||
|
using System;
|
||||||
|
using osu.Framework.Graphics.Shapes;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace osu.Game.Tests.Visual.UserInterface
|
||||||
|
{
|
||||||
|
public class TestSceneDashboardBeatmapListing : OsuTestScene
|
||||||
|
{
|
||||||
|
[Cached]
|
||||||
|
private readonly OverlayColourProvider colourProvider = new OverlayColourProvider(OverlayColourScheme.Purple);
|
||||||
|
|
||||||
|
private readonly Container content;
|
||||||
|
|
||||||
|
public TestSceneDashboardBeatmapListing()
|
||||||
|
{
|
||||||
|
Add(content = new Container
|
||||||
|
{
|
||||||
|
Anchor = Anchor.Centre,
|
||||||
|
Origin = Anchor.Centre,
|
||||||
|
AutoSizeAxes = Axes.Y,
|
||||||
|
Width = 300,
|
||||||
|
Children = new Drawable[]
|
||||||
|
{
|
||||||
|
new Box
|
||||||
|
{
|
||||||
|
RelativeSizeAxes = Axes.Both,
|
||||||
|
Colour = colourProvider.Background4
|
||||||
|
},
|
||||||
|
new Container
|
||||||
|
{
|
||||||
|
RelativeSizeAxes = Axes.X,
|
||||||
|
AutoSizeAxes = Axes.Y,
|
||||||
|
Padding = new MarginPadding { Horizontal = 10 },
|
||||||
|
Child = new DashboardBeatmapListing(new_beatmaps, popular_beatmaps)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void LoadComplete()
|
||||||
|
{
|
||||||
|
base.LoadComplete();
|
||||||
|
|
||||||
|
AddStep("Set width to 500", () => content.ResizeWidthTo(500, 500));
|
||||||
|
AddStep("Set width to 300", () => content.ResizeWidthTo(300, 500));
|
||||||
|
}
|
||||||
|
|
||||||
|
private static readonly List<BeatmapSetInfo> new_beatmaps = new List<BeatmapSetInfo>
|
||||||
|
{
|
||||||
|
new BeatmapSetInfo
|
||||||
|
{
|
||||||
|
Metadata = new BeatmapMetadata
|
||||||
|
{
|
||||||
|
Title = "Very Long Title (TV size) [TATOE]",
|
||||||
|
Artist = "This artist has a really long name how is this possible",
|
||||||
|
Author = new User
|
||||||
|
{
|
||||||
|
Username = "author",
|
||||||
|
Id = 100
|
||||||
|
}
|
||||||
|
},
|
||||||
|
OnlineInfo = new BeatmapSetOnlineInfo
|
||||||
|
{
|
||||||
|
Covers = new BeatmapSetOnlineCovers
|
||||||
|
{
|
||||||
|
Cover = "https://assets.ppy.sh/beatmaps/1189904/covers/cover.jpg?1595456608",
|
||||||
|
},
|
||||||
|
Ranked = DateTimeOffset.Now
|
||||||
|
}
|
||||||
|
},
|
||||||
|
new BeatmapSetInfo
|
||||||
|
{
|
||||||
|
Metadata = new BeatmapMetadata
|
||||||
|
{
|
||||||
|
Title = "Very Long Title (TV size) [TATOE]",
|
||||||
|
Artist = "This artist has a really long name how is this possible",
|
||||||
|
Author = new User
|
||||||
|
{
|
||||||
|
Username = "author",
|
||||||
|
Id = 100
|
||||||
|
}
|
||||||
|
},
|
||||||
|
OnlineInfo = new BeatmapSetOnlineInfo
|
||||||
|
{
|
||||||
|
Covers = new BeatmapSetOnlineCovers
|
||||||
|
{
|
||||||
|
Cover = "https://assets.ppy.sh/beatmaps/1189904/covers/cover.jpg?1595456608",
|
||||||
|
},
|
||||||
|
Ranked = DateTimeOffset.MinValue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
private static readonly List<BeatmapSetInfo> popular_beatmaps = new List<BeatmapSetInfo>
|
||||||
|
{
|
||||||
|
new BeatmapSetInfo
|
||||||
|
{
|
||||||
|
Metadata = new BeatmapMetadata
|
||||||
|
{
|
||||||
|
Title = "Title",
|
||||||
|
Artist = "Artist",
|
||||||
|
Author = new User
|
||||||
|
{
|
||||||
|
Username = "author",
|
||||||
|
Id = 100
|
||||||
|
}
|
||||||
|
},
|
||||||
|
OnlineInfo = new BeatmapSetOnlineInfo
|
||||||
|
{
|
||||||
|
Covers = new BeatmapSetOnlineCovers
|
||||||
|
{
|
||||||
|
Cover = "https://assets.ppy.sh/beatmaps/1079428/covers/cover.jpg?1595295586",
|
||||||
|
},
|
||||||
|
FavouriteCount = 100
|
||||||
|
}
|
||||||
|
},
|
||||||
|
new BeatmapSetInfo
|
||||||
|
{
|
||||||
|
Metadata = new BeatmapMetadata
|
||||||
|
{
|
||||||
|
Title = "Title 2",
|
||||||
|
Artist = "Artist 2",
|
||||||
|
Author = new User
|
||||||
|
{
|
||||||
|
Username = "someone",
|
||||||
|
Id = 100
|
||||||
|
}
|
||||||
|
},
|
||||||
|
OnlineInfo = new BeatmapSetOnlineInfo
|
||||||
|
{
|
||||||
|
Covers = new BeatmapSetOnlineCovers
|
||||||
|
{
|
||||||
|
Cover = "https://assets.ppy.sh/beatmaps/1079428/covers/cover.jpg?1595295586",
|
||||||
|
},
|
||||||
|
FavouriteCount = 10
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
@ -2,6 +2,7 @@
|
|||||||
// See the LICENCE file in the repository root for full licence text.
|
// See the LICENCE file in the repository root for full licence text.
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
|
using System.Linq;
|
||||||
using NUnit.Framework;
|
using NUnit.Framework;
|
||||||
using osu.Framework.Graphics;
|
using osu.Framework.Graphics;
|
||||||
using osu.Framework.Graphics.Containers;
|
using osu.Framework.Graphics.Containers;
|
||||||
@ -263,7 +264,7 @@ namespace osu.Game.Tests.Visual.UserInterface
|
|||||||
|
|
||||||
private void moveLogoFacade()
|
private void moveLogoFacade()
|
||||||
{
|
{
|
||||||
if (logoFacade?.Transforms.Count == 0 && transferContainer?.Transforms.Count == 0)
|
if (!(logoFacade?.Transforms).Any() && !(transferContainer?.Transforms).Any())
|
||||||
{
|
{
|
||||||
Random random = new Random();
|
Random random = new Random();
|
||||||
trackingContainer.Delay(500).MoveTo(new Vector2(random.Next(0, (int)logo.Parent.DrawWidth), random.Next(0, (int)logo.Parent.DrawHeight)), 300);
|
trackingContainer.Delay(500).MoveTo(new Vector2(random.Next(0, (int)logo.Parent.DrawWidth), random.Next(0, (int)logo.Parent.DrawHeight)), 300);
|
||||||
|
@ -36,6 +36,7 @@ using osu.Game.Rulesets.Mods;
|
|||||||
using osu.Game.Scoring;
|
using osu.Game.Scoring;
|
||||||
using osu.Game.Skinning;
|
using osu.Game.Skinning;
|
||||||
using osuTK.Input;
|
using osuTK.Input;
|
||||||
|
using RuntimeInfo = osu.Framework.RuntimeInfo;
|
||||||
|
|
||||||
namespace osu.Game
|
namespace osu.Game
|
||||||
{
|
{
|
||||||
@ -134,8 +135,17 @@ namespace osu.Game
|
|||||||
[BackgroundDependencyLoader]
|
[BackgroundDependencyLoader]
|
||||||
private void load()
|
private void load()
|
||||||
{
|
{
|
||||||
using (var str = File.OpenRead(typeof(OsuGameBase).Assembly.Location))
|
try
|
||||||
VersionHash = str.ComputeMD5Hash();
|
{
|
||||||
|
using (var str = File.OpenRead(typeof(OsuGameBase).Assembly.Location))
|
||||||
|
VersionHash = str.ComputeMD5Hash();
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
// special case for android builds, which can't read DLLs from a packed apk.
|
||||||
|
// should eventually be handled in a better way.
|
||||||
|
VersionHash = $"{Version}-{RuntimeInfo.OS}".ComputeMD5Hash();
|
||||||
|
}
|
||||||
|
|
||||||
Resources.AddStore(new DllResourceStore(OsuResources.ResourceAssembly));
|
Resources.AddStore(new DllResourceStore(OsuResources.ResourceAssembly));
|
||||||
|
|
||||||
|
43
osu.Game/Overlays/Dashboard/Home/DashboardBeatmapListing.cs
Normal file
43
osu.Game/Overlays/Dashboard/Home/DashboardBeatmapListing.cs
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
|
||||||
|
// See the LICENCE file in the repository root for full licence text.
|
||||||
|
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using osu.Framework.Allocation;
|
||||||
|
using osu.Framework.Graphics;
|
||||||
|
using osu.Framework.Graphics.Containers;
|
||||||
|
using osu.Game.Beatmaps;
|
||||||
|
using osuTK;
|
||||||
|
|
||||||
|
namespace osu.Game.Overlays.Dashboard.Home
|
||||||
|
{
|
||||||
|
public class DashboardBeatmapListing : CompositeDrawable
|
||||||
|
{
|
||||||
|
private readonly List<BeatmapSetInfo> newBeatmaps;
|
||||||
|
private readonly List<BeatmapSetInfo> popularBeatmaps;
|
||||||
|
|
||||||
|
public DashboardBeatmapListing(List<BeatmapSetInfo> newBeatmaps, List<BeatmapSetInfo> popularBeatmaps)
|
||||||
|
{
|
||||||
|
this.newBeatmaps = newBeatmaps;
|
||||||
|
this.popularBeatmaps = popularBeatmaps;
|
||||||
|
}
|
||||||
|
|
||||||
|
[BackgroundDependencyLoader]
|
||||||
|
private void load()
|
||||||
|
{
|
||||||
|
RelativeSizeAxes = Axes.X;
|
||||||
|
AutoSizeAxes = Axes.Y;
|
||||||
|
InternalChild = new FillFlowContainer<DrawableBeatmapList>
|
||||||
|
{
|
||||||
|
RelativeSizeAxes = Axes.X,
|
||||||
|
AutoSizeAxes = Axes.Y,
|
||||||
|
Direction = FillDirection.Vertical,
|
||||||
|
Spacing = new Vector2(0, 10),
|
||||||
|
Children = new DrawableBeatmapList[]
|
||||||
|
{
|
||||||
|
new DrawableNewBeatmapList(newBeatmaps),
|
||||||
|
new DrawablePopularBeatmapList(popularBeatmaps)
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
168
osu.Game/Overlays/Dashboard/Home/DashboardBeatmapPanel.cs
Normal file
168
osu.Game/Overlays/Dashboard/Home/DashboardBeatmapPanel.cs
Normal file
@ -0,0 +1,168 @@
|
|||||||
|
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
|
||||||
|
// See the LICENCE file in the repository root for full licence text.
|
||||||
|
|
||||||
|
using osu.Framework.Allocation;
|
||||||
|
using osu.Framework.Graphics;
|
||||||
|
using osu.Framework.Graphics.Containers;
|
||||||
|
using osu.Framework.Graphics.Shapes;
|
||||||
|
using osu.Framework.Graphics.Sprites;
|
||||||
|
using osu.Framework.Input.Events;
|
||||||
|
using osu.Game.Beatmaps;
|
||||||
|
using osu.Game.Beatmaps.Drawables;
|
||||||
|
using osu.Game.Graphics;
|
||||||
|
using osu.Game.Graphics.Containers;
|
||||||
|
using osu.Game.Graphics.Sprites;
|
||||||
|
using osuTK;
|
||||||
|
|
||||||
|
namespace osu.Game.Overlays.Dashboard.Home
|
||||||
|
{
|
||||||
|
public abstract class DashboardBeatmapPanel : OsuClickableContainer
|
||||||
|
{
|
||||||
|
[Resolved]
|
||||||
|
protected OverlayColourProvider ColourProvider { get; private set; }
|
||||||
|
|
||||||
|
[Resolved(canBeNull: true)]
|
||||||
|
private BeatmapSetOverlay beatmapOverlay { get; set; }
|
||||||
|
|
||||||
|
protected readonly BeatmapSetInfo SetInfo;
|
||||||
|
|
||||||
|
private Box hoverBackground;
|
||||||
|
private SpriteIcon chevron;
|
||||||
|
|
||||||
|
protected DashboardBeatmapPanel(BeatmapSetInfo setInfo)
|
||||||
|
{
|
||||||
|
SetInfo = setInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
[BackgroundDependencyLoader]
|
||||||
|
private void load()
|
||||||
|
{
|
||||||
|
RelativeSizeAxes = Axes.X;
|
||||||
|
Height = 60;
|
||||||
|
Children = new Drawable[]
|
||||||
|
{
|
||||||
|
new Container
|
||||||
|
{
|
||||||
|
RelativeSizeAxes = Axes.Both,
|
||||||
|
Padding = new MarginPadding { Horizontal = -10 },
|
||||||
|
Child = hoverBackground = new Box
|
||||||
|
{
|
||||||
|
RelativeSizeAxes = Axes.Both,
|
||||||
|
Colour = ColourProvider.Background3,
|
||||||
|
Alpha = 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
new Container
|
||||||
|
{
|
||||||
|
RelativeSizeAxes = Axes.Both,
|
||||||
|
Child = new GridContainer
|
||||||
|
{
|
||||||
|
RelativeSizeAxes = Axes.Both,
|
||||||
|
ColumnDimensions = new[]
|
||||||
|
{
|
||||||
|
new Dimension(GridSizeMode.Absolute, 70),
|
||||||
|
new Dimension(),
|
||||||
|
new Dimension(GridSizeMode.AutoSize)
|
||||||
|
},
|
||||||
|
RowDimensions = new[]
|
||||||
|
{
|
||||||
|
new Dimension()
|
||||||
|
},
|
||||||
|
Content = new[]
|
||||||
|
{
|
||||||
|
new Drawable[]
|
||||||
|
{
|
||||||
|
new Container
|
||||||
|
{
|
||||||
|
RelativeSizeAxes = Axes.Both,
|
||||||
|
Masking = true,
|
||||||
|
CornerRadius = 6,
|
||||||
|
Child = new UpdateableBeatmapSetCover
|
||||||
|
{
|
||||||
|
RelativeSizeAxes = Axes.Both,
|
||||||
|
Anchor = Anchor.Centre,
|
||||||
|
Origin = Anchor.Centre,
|
||||||
|
BeatmapSet = SetInfo
|
||||||
|
}
|
||||||
|
},
|
||||||
|
new Container
|
||||||
|
{
|
||||||
|
RelativeSizeAxes = Axes.Both,
|
||||||
|
Padding = new MarginPadding { Horizontal = 10 },
|
||||||
|
Child = new FillFlowContainer
|
||||||
|
{
|
||||||
|
Anchor = Anchor.CentreLeft,
|
||||||
|
Origin = Anchor.CentreLeft,
|
||||||
|
AutoSizeAxes = Axes.Y,
|
||||||
|
RelativeSizeAxes = Axes.X,
|
||||||
|
Direction = FillDirection.Vertical,
|
||||||
|
Children = new Drawable[]
|
||||||
|
{
|
||||||
|
new OsuSpriteText
|
||||||
|
{
|
||||||
|
RelativeSizeAxes = Axes.X,
|
||||||
|
Truncate = true,
|
||||||
|
Font = OsuFont.GetFont(weight: FontWeight.Regular),
|
||||||
|
Text = SetInfo.Metadata.Title
|
||||||
|
},
|
||||||
|
new OsuSpriteText
|
||||||
|
{
|
||||||
|
RelativeSizeAxes = Axes.X,
|
||||||
|
Truncate = true,
|
||||||
|
Font = OsuFont.GetFont(size: 12, weight: FontWeight.Regular),
|
||||||
|
Text = SetInfo.Metadata.Artist
|
||||||
|
},
|
||||||
|
new LinkFlowContainer(f => f.Font = OsuFont.GetFont(size: 10, weight: FontWeight.Regular))
|
||||||
|
{
|
||||||
|
AutoSizeAxes = Axes.Y,
|
||||||
|
RelativeSizeAxes = Axes.X,
|
||||||
|
Spacing = new Vector2(3),
|
||||||
|
Margin = new MarginPadding { Top = 2 }
|
||||||
|
}.With(c =>
|
||||||
|
{
|
||||||
|
c.AddText("by");
|
||||||
|
c.AddUserLink(SetInfo.Metadata.Author);
|
||||||
|
c.AddArbitraryDrawable(CreateInfo());
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
chevron = new SpriteIcon
|
||||||
|
{
|
||||||
|
Anchor = Anchor.CentreRight,
|
||||||
|
Origin = Anchor.CentreRight,
|
||||||
|
Size = new Vector2(16),
|
||||||
|
Icon = FontAwesome.Solid.ChevronRight,
|
||||||
|
Colour = ColourProvider.Foreground1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
Action = () =>
|
||||||
|
{
|
||||||
|
if (SetInfo.OnlineBeatmapSetID.HasValue)
|
||||||
|
beatmapOverlay?.FetchAndShowBeatmapSet(SetInfo.OnlineBeatmapSetID.Value);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
protected abstract Drawable CreateInfo();
|
||||||
|
|
||||||
|
protected override bool OnHover(HoverEvent e)
|
||||||
|
{
|
||||||
|
base.OnHover(e);
|
||||||
|
hoverBackground.FadeIn(200, Easing.OutQuint);
|
||||||
|
chevron.FadeColour(ColourProvider.Light1, 200, Easing.OutQuint);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnHoverLost(HoverLostEvent e)
|
||||||
|
{
|
||||||
|
base.OnHoverLost(e);
|
||||||
|
hoverBackground.FadeOut(200, Easing.OutQuint);
|
||||||
|
chevron.FadeColour(ColourProvider.Foreground1, 200, Easing.OutQuint);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
23
osu.Game/Overlays/Dashboard/Home/DashboardNewBeatmapPanel.cs
Normal file
23
osu.Game/Overlays/Dashboard/Home/DashboardNewBeatmapPanel.cs
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
|
||||||
|
// See the LICENCE file in the repository root for full licence text.
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using osu.Framework.Graphics;
|
||||||
|
using osu.Game.Beatmaps;
|
||||||
|
using osu.Game.Graphics;
|
||||||
|
|
||||||
|
namespace osu.Game.Overlays.Dashboard.Home
|
||||||
|
{
|
||||||
|
public class DashboardNewBeatmapPanel : DashboardBeatmapPanel
|
||||||
|
{
|
||||||
|
public DashboardNewBeatmapPanel(BeatmapSetInfo setInfo)
|
||||||
|
: base(setInfo)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override Drawable CreateInfo() => new DrawableDate(SetInfo.OnlineInfo.Ranked ?? DateTimeOffset.Now, 10, false)
|
||||||
|
{
|
||||||
|
Colour = ColourProvider.Foreground1
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,42 @@
|
|||||||
|
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
|
||||||
|
// See the LICENCE file in the repository root for full licence text.
|
||||||
|
|
||||||
|
using osu.Framework.Graphics;
|
||||||
|
using osu.Framework.Graphics.Containers;
|
||||||
|
using osu.Framework.Graphics.Sprites;
|
||||||
|
using osu.Game.Beatmaps;
|
||||||
|
using osu.Game.Graphics;
|
||||||
|
using osu.Game.Graphics.Sprites;
|
||||||
|
using osuTK;
|
||||||
|
|
||||||
|
namespace osu.Game.Overlays.Dashboard.Home
|
||||||
|
{
|
||||||
|
public class DashboardPopularBeatmapPanel : DashboardBeatmapPanel
|
||||||
|
{
|
||||||
|
public DashboardPopularBeatmapPanel(BeatmapSetInfo setInfo)
|
||||||
|
: base(setInfo)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override Drawable CreateInfo() => new FillFlowContainer
|
||||||
|
{
|
||||||
|
AutoSizeAxes = Axes.Both,
|
||||||
|
Direction = FillDirection.Horizontal,
|
||||||
|
Spacing = new Vector2(3, 0),
|
||||||
|
Colour = ColourProvider.Foreground1,
|
||||||
|
Children = new Drawable[]
|
||||||
|
{
|
||||||
|
new SpriteIcon
|
||||||
|
{
|
||||||
|
Size = new Vector2(10),
|
||||||
|
Icon = FontAwesome.Solid.Heart
|
||||||
|
},
|
||||||
|
new OsuSpriteText
|
||||||
|
{
|
||||||
|
Font = OsuFont.GetFont(size: 10, weight: FontWeight.Regular),
|
||||||
|
Text = SetInfo.OnlineInfo.FavouriteCount.ToString()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
56
osu.Game/Overlays/Dashboard/Home/DrawableBeatmapList.cs
Normal file
56
osu.Game/Overlays/Dashboard/Home/DrawableBeatmapList.cs
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
|
||||||
|
// See the LICENCE file in the repository root for full licence text.
|
||||||
|
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using osu.Framework.Allocation;
|
||||||
|
using osu.Framework.Graphics;
|
||||||
|
using osu.Framework.Graphics.Containers;
|
||||||
|
using osu.Game.Beatmaps;
|
||||||
|
using osu.Game.Graphics;
|
||||||
|
using osu.Game.Graphics.Sprites;
|
||||||
|
using osuTK;
|
||||||
|
|
||||||
|
namespace osu.Game.Overlays.Dashboard.Home
|
||||||
|
{
|
||||||
|
public abstract class DrawableBeatmapList : CompositeDrawable
|
||||||
|
{
|
||||||
|
private readonly List<BeatmapSetInfo> beatmaps;
|
||||||
|
|
||||||
|
protected DrawableBeatmapList(List<BeatmapSetInfo> beatmaps)
|
||||||
|
{
|
||||||
|
this.beatmaps = beatmaps;
|
||||||
|
}
|
||||||
|
|
||||||
|
[BackgroundDependencyLoader]
|
||||||
|
private void load(OverlayColourProvider colourProvider)
|
||||||
|
{
|
||||||
|
FillFlowContainer flow;
|
||||||
|
|
||||||
|
RelativeSizeAxes = Axes.X;
|
||||||
|
AutoSizeAxes = Axes.Y;
|
||||||
|
InternalChild = flow = new FillFlowContainer
|
||||||
|
{
|
||||||
|
RelativeSizeAxes = Axes.X,
|
||||||
|
AutoSizeAxes = Axes.Y,
|
||||||
|
Direction = FillDirection.Vertical,
|
||||||
|
Spacing = new Vector2(0, 10),
|
||||||
|
Children = new Drawable[]
|
||||||
|
{
|
||||||
|
new OsuSpriteText
|
||||||
|
{
|
||||||
|
Font = OsuFont.GetFont(size: 16, weight: FontWeight.Bold),
|
||||||
|
Colour = colourProvider.Light1,
|
||||||
|
Text = Title
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
flow.AddRange(beatmaps.Select(CreateBeatmapPanel));
|
||||||
|
}
|
||||||
|
|
||||||
|
protected abstract string Title { get; }
|
||||||
|
|
||||||
|
protected abstract DashboardBeatmapPanel CreateBeatmapPanel(BeatmapSetInfo setInfo);
|
||||||
|
}
|
||||||
|
}
|
20
osu.Game/Overlays/Dashboard/Home/DrawableNewBeatmapList.cs
Normal file
20
osu.Game/Overlays/Dashboard/Home/DrawableNewBeatmapList.cs
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
|
||||||
|
// See the LICENCE file in the repository root for full licence text.
|
||||||
|
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using osu.Game.Beatmaps;
|
||||||
|
|
||||||
|
namespace osu.Game.Overlays.Dashboard.Home
|
||||||
|
{
|
||||||
|
public class DrawableNewBeatmapList : DrawableBeatmapList
|
||||||
|
{
|
||||||
|
public DrawableNewBeatmapList(List<BeatmapSetInfo> beatmaps)
|
||||||
|
: base(beatmaps)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override DashboardBeatmapPanel CreateBeatmapPanel(BeatmapSetInfo setInfo) => new DashboardNewBeatmapPanel(setInfo);
|
||||||
|
|
||||||
|
protected override string Title => "New Ranked Beatmaps";
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,20 @@
|
|||||||
|
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
|
||||||
|
// See the LICENCE file in the repository root for full licence text.
|
||||||
|
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using osu.Game.Beatmaps;
|
||||||
|
|
||||||
|
namespace osu.Game.Overlays.Dashboard.Home
|
||||||
|
{
|
||||||
|
public class DrawablePopularBeatmapList : DrawableBeatmapList
|
||||||
|
{
|
||||||
|
public DrawablePopularBeatmapList(List<BeatmapSetInfo> beatmaps)
|
||||||
|
: base(beatmaps)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override DashboardBeatmapPanel CreateBeatmapPanel(BeatmapSetInfo setInfo) => new DashboardPopularBeatmapPanel(setInfo);
|
||||||
|
|
||||||
|
protected override string Title => "Popular Beatmaps";
|
||||||
|
}
|
||||||
|
}
|
@ -434,7 +434,7 @@ namespace osu.Game.Rulesets.Objects.Legacy
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <remarks>
|
/// <remarks>
|
||||||
/// Layered hit samples are automatically added in all modes (except osu!mania), but can be disabled
|
/// Layered hit samples are automatically added in all modes (except osu!mania), but can be disabled
|
||||||
/// using the <see cref="GlobalSkinConfiguration.LayeredHitSounds"/> skin config option.
|
/// using the <see cref="LegacySkinConfiguration.LegacySetting.LayeredHitSounds"/> skin config option.
|
||||||
/// </remarks>
|
/// </remarks>
|
||||||
public bool IsLayered { get; set; }
|
public bool IsLayered { get; set; }
|
||||||
}
|
}
|
||||||
|
@ -17,6 +17,7 @@ using osu.Game.Graphics.UserInterface;
|
|||||||
using osu.Game.Input;
|
using osu.Game.Input;
|
||||||
using osu.Game.Online.API;
|
using osu.Game.Online.API;
|
||||||
using osu.Game.Online.Multiplayer;
|
using osu.Game.Online.Multiplayer;
|
||||||
|
using osu.Game.Overlays;
|
||||||
using osu.Game.Screens.Menu;
|
using osu.Game.Screens.Menu;
|
||||||
using osu.Game.Screens.Multi.Components;
|
using osu.Game.Screens.Multi.Components;
|
||||||
using osu.Game.Screens.Multi.Lounge;
|
using osu.Game.Screens.Multi.Lounge;
|
||||||
@ -50,6 +51,9 @@ namespace osu.Game.Screens.Multi
|
|||||||
[Cached]
|
[Cached]
|
||||||
private readonly Bindable<FilterCriteria> currentFilter = new Bindable<FilterCriteria>(new FilterCriteria());
|
private readonly Bindable<FilterCriteria> currentFilter = new Bindable<FilterCriteria>(new FilterCriteria());
|
||||||
|
|
||||||
|
[Resolved]
|
||||||
|
private MusicController music { get; set; }
|
||||||
|
|
||||||
[Cached(Type = typeof(IRoomManager))]
|
[Cached(Type = typeof(IRoomManager))]
|
||||||
private RoomManager roomManager;
|
private RoomManager roomManager;
|
||||||
|
|
||||||
@ -346,8 +350,7 @@ namespace osu.Game.Screens.Multi
|
|||||||
track.RestartPoint = Beatmap.Value.Metadata.PreviewTime;
|
track.RestartPoint = Beatmap.Value.Metadata.PreviewTime;
|
||||||
track.Looping = true;
|
track.Looping = true;
|
||||||
|
|
||||||
if (!track.IsRunning)
|
music.EnsurePlayingSomething();
|
||||||
track.Restart();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -1,11 +0,0 @@
|
|||||||
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
|
|
||||||
// See the LICENCE file in the repository root for full licence text.
|
|
||||||
|
|
||||||
namespace osu.Game.Skinning
|
|
||||||
{
|
|
||||||
public enum GlobalSkinConfiguration
|
|
||||||
{
|
|
||||||
AnimationFramerate,
|
|
||||||
LayeredHitSounds,
|
|
||||||
}
|
|
||||||
}
|
|
@ -126,15 +126,6 @@ namespace osu.Game.Skinning
|
|||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LegacySkinConfiguration.LegacySetting legacy:
|
|
||||||
switch (legacy)
|
|
||||||
{
|
|
||||||
case LegacySkinConfiguration.LegacySetting.Version:
|
|
||||||
return SkinUtils.As<TValue>(new Bindable<decimal>(Configuration.LegacyVersion ?? LegacySkinConfiguration.LATEST_VERSION));
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SkinCustomColourLookup customColour:
|
case SkinCustomColourLookup customColour:
|
||||||
return SkinUtils.As<TValue>(getCustomColour(Configuration, customColour.Lookup.ToString()));
|
return SkinUtils.As<TValue>(getCustomColour(Configuration, customColour.Lookup.ToString()));
|
||||||
|
|
||||||
@ -148,28 +139,11 @@ namespace osu.Game.Skinning
|
|||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case LegacySkinConfiguration.LegacySetting legacy:
|
||||||
|
return legacySettingLookup<TValue>(legacy);
|
||||||
|
|
||||||
default:
|
default:
|
||||||
// handles lookups like GlobalSkinConfiguration
|
return genericLookup<TLookup, TValue>(lookup);
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
if (Configuration.ConfigDictionary.TryGetValue(lookup.ToString(), out var val))
|
|
||||||
{
|
|
||||||
// special case for handling skins which use 1 or 0 to signify a boolean state.
|
|
||||||
if (typeof(TValue) == typeof(bool))
|
|
||||||
val = val == "1" ? "true" : "false";
|
|
||||||
|
|
||||||
var bindable = new Bindable<TValue>();
|
|
||||||
if (val != null)
|
|
||||||
bindable.Parse(val);
|
|
||||||
return bindable;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
@ -292,6 +266,43 @@ namespace osu.Game.Skinning
|
|||||||
private IBindable<string> getManiaImage(LegacyManiaSkinConfiguration source, string lookup)
|
private IBindable<string> getManiaImage(LegacyManiaSkinConfiguration source, string lookup)
|
||||||
=> source.ImageLookups.TryGetValue(lookup, out var image) ? new Bindable<string>(image) : null;
|
=> source.ImageLookups.TryGetValue(lookup, out var image) ? new Bindable<string>(image) : null;
|
||||||
|
|
||||||
|
[CanBeNull]
|
||||||
|
private IBindable<TValue> legacySettingLookup<TValue>(LegacySkinConfiguration.LegacySetting legacySetting)
|
||||||
|
{
|
||||||
|
switch (legacySetting)
|
||||||
|
{
|
||||||
|
case LegacySkinConfiguration.LegacySetting.Version:
|
||||||
|
return SkinUtils.As<TValue>(new Bindable<decimal>(Configuration.LegacyVersion ?? LegacySkinConfiguration.LATEST_VERSION));
|
||||||
|
|
||||||
|
default:
|
||||||
|
return genericLookup<LegacySkinConfiguration.LegacySetting, TValue>(legacySetting);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[CanBeNull]
|
||||||
|
private IBindable<TValue> genericLookup<TLookup, TValue>(TLookup lookup)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (Configuration.ConfigDictionary.TryGetValue(lookup.ToString(), out var val))
|
||||||
|
{
|
||||||
|
// special case for handling skins which use 1 or 0 to signify a boolean state.
|
||||||
|
if (typeof(TValue) == typeof(bool))
|
||||||
|
val = val == "1" ? "true" : "false";
|
||||||
|
|
||||||
|
var bindable = new Bindable<TValue>();
|
||||||
|
if (val != null)
|
||||||
|
bindable.Parse(val);
|
||||||
|
return bindable;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
public override Drawable GetDrawableComponent(ISkinComponent component)
|
public override Drawable GetDrawableComponent(ISkinComponent component)
|
||||||
{
|
{
|
||||||
switch (component)
|
switch (component)
|
||||||
|
@ -15,6 +15,8 @@ namespace osu.Game.Skinning
|
|||||||
public enum LegacySetting
|
public enum LegacySetting
|
||||||
{
|
{
|
||||||
Version,
|
Version,
|
||||||
|
AnimationFramerate,
|
||||||
|
LayeredHitSounds,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -9,6 +9,7 @@ using osu.Framework.Graphics.Animations;
|
|||||||
using osu.Framework.Graphics.OpenGL.Textures;
|
using osu.Framework.Graphics.OpenGL.Textures;
|
||||||
using osu.Framework.Graphics.Sprites;
|
using osu.Framework.Graphics.Sprites;
|
||||||
using osu.Framework.Graphics.Textures;
|
using osu.Framework.Graphics.Textures;
|
||||||
|
using static osu.Game.Skinning.LegacySkinConfiguration;
|
||||||
|
|
||||||
namespace osu.Game.Skinning
|
namespace osu.Game.Skinning
|
||||||
{
|
{
|
||||||
@ -89,7 +90,7 @@ namespace osu.Game.Skinning
|
|||||||
{
|
{
|
||||||
if (applyConfigFrameRate)
|
if (applyConfigFrameRate)
|
||||||
{
|
{
|
||||||
var iniRate = source.GetConfig<GlobalSkinConfiguration, int>(GlobalSkinConfiguration.AnimationFramerate);
|
var iniRate = source.GetConfig<LegacySetting, int>(LegacySetting.AnimationFramerate);
|
||||||
|
|
||||||
if (iniRate?.Value > 0)
|
if (iniRate?.Value > 0)
|
||||||
return 1000f / iniRate.Value;
|
return 1000f / iniRate.Value;
|
||||||
|
@ -8,6 +8,7 @@ using osu.Framework.Graphics.OpenGL.Textures;
|
|||||||
using osu.Framework.Graphics.Textures;
|
using osu.Framework.Graphics.Textures;
|
||||||
using osu.Game.Audio;
|
using osu.Game.Audio;
|
||||||
using osu.Game.Rulesets.Objects.Legacy;
|
using osu.Game.Rulesets.Objects.Legacy;
|
||||||
|
using static osu.Game.Skinning.LegacySkinConfiguration;
|
||||||
|
|
||||||
namespace osu.Game.Skinning
|
namespace osu.Game.Skinning
|
||||||
{
|
{
|
||||||
@ -38,7 +39,7 @@ namespace osu.Game.Skinning
|
|||||||
if (!(sampleInfo is ConvertHitObjectParser.LegacyHitSampleInfo legacySample))
|
if (!(sampleInfo is ConvertHitObjectParser.LegacyHitSampleInfo legacySample))
|
||||||
return Source.GetSample(sampleInfo);
|
return Source.GetSample(sampleInfo);
|
||||||
|
|
||||||
var playLayeredHitSounds = GetConfig<GlobalSkinConfiguration, bool>(GlobalSkinConfiguration.LayeredHitSounds);
|
var playLayeredHitSounds = GetConfig<LegacySetting, bool>(LegacySetting.LayeredHitSounds);
|
||||||
if (legacySample.IsLayered && playLayeredHitSounds?.Value == false)
|
if (legacySample.IsLayered && playLayeredHitSounds?.Value == false)
|
||||||
return new SampleChannelVirtual();
|
return new SampleChannelVirtual();
|
||||||
|
|
||||||
|
@ -24,7 +24,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="12.0.3" />
|
<PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
|
||||||
<PackageReference Include="ppy.osu.Framework" Version="2020.730.1" />
|
<PackageReference Include="ppy.osu.Framework" Version="2020.804.0" />
|
||||||
<PackageReference Include="ppy.osu.Game.Resources" Version="2020.731.0" />
|
<PackageReference Include="ppy.osu.Game.Resources" Version="2020.731.0" />
|
||||||
<PackageReference Include="Sentry" Version="2.1.5" />
|
<PackageReference Include="Sentry" Version="2.1.5" />
|
||||||
<PackageReference Include="SharpCompress" Version="0.26.0" />
|
<PackageReference Include="SharpCompress" Version="0.26.0" />
|
||||||
|
@ -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="2020.730.1" />
|
<PackageReference Include="ppy.osu.Framework.iOS" Version="2020.804.0" />
|
||||||
<PackageReference Include="ppy.osu.Game.Resources" Version="2020.731.0" />
|
<PackageReference Include="ppy.osu.Game.Resources" Version="2020.731.0" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<!-- Xamarin.iOS does not automatically handle transitive dependencies from NuGet packages. -->
|
<!-- Xamarin.iOS does not automatically handle transitive dependencies from NuGet packages. -->
|
||||||
@ -80,7 +80,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="12.0.3" />
|
<PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
|
||||||
<PackageReference Include="ppy.osu.Framework" Version="2020.730.1" />
|
<PackageReference Include="ppy.osu.Framework" Version="2020.804.0" />
|
||||||
<PackageReference Include="SharpCompress" Version="0.26.0" />
|
<PackageReference Include="SharpCompress" Version="0.26.0" />
|
||||||
<PackageReference Include="NUnit" Version="3.12.0" />
|
<PackageReference Include="NUnit" Version="3.12.0" />
|
||||||
<PackageReference Include="SharpRaven" Version="2.4.0" />
|
<PackageReference Include="SharpRaven" Version="2.4.0" />
|
||||||
|
Loading…
x
Reference in New Issue
Block a user