1
0
mirror of https://github.com/ppy/osu.git synced 2024-12-14 16:52:54 +08:00

Merge pull request #3331 from smoogipoo/update-framework

Update with framework async changes
This commit is contained in:
Dean Herbert 2018-08-30 15:10:28 +09:00 committed by GitHub
commit 247e1ee714
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
60 changed files with 225 additions and 175 deletions

View File

@ -2,6 +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 System; using System;
using System.Threading.Tasks;
using osu.Framework.Allocation; using osu.Framework.Allocation;
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Containers;
@ -31,7 +32,7 @@ namespace osu.Desktop.Overlays
public override bool HandleMouseInput => false; public override bool HandleMouseInput => false;
[BackgroundDependencyLoader] [BackgroundDependencyLoader]
private void load(NotificationOverlay notification, OsuColour colours, TextureStore textures, OsuGameBase game, OsuConfigManager config, GameHost host) private async Task load(NotificationOverlay notification, OsuColour colours, TextureStore textures, OsuGameBase game, OsuConfigManager config, GameHost host)
{ {
notificationOverlay = notification; notificationOverlay = notification;
this.config = config; this.config = config;
@ -86,7 +87,7 @@ namespace osu.Desktop.Overlays
{ {
Anchor = Anchor.TopCentre, Anchor = Anchor.TopCentre,
Origin = Anchor.TopCentre, Origin = Anchor.TopCentre,
Texture = textures.Get(@"Menu/dev-build-footer"), Texture = await textures.GetAsync(@"Menu/dev-build-footer"),
}, },
} }
} }

View File

@ -28,8 +28,8 @@
<ItemGroup Label="Package References"> <ItemGroup Label="Package References">
<PackageReference Include="System.IO.Packaging" Version="4.5.0" /> <PackageReference Include="System.IO.Packaging" Version="4.5.0" />
<PackageReference Include="ppy.squirrel.windows" Version="1.8.0.5" /> <PackageReference Include="ppy.squirrel.windows" Version="1.8.0.5" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="2.1.1" /> <PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="2.1.2" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="2.1.1" /> <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="2.1.2" />
</ItemGroup> </ItemGroup>
<ItemGroup Label="Resources"> <ItemGroup Label="Resources">
<EmbeddedResource Include="lazer.ico" /> <EmbeddedResource Include="lazer.ico" />

View File

@ -3,6 +3,7 @@
using System; using System;
using System.Linq; using System.Linq;
using System.Threading.Tasks;
using osu.Framework.Allocation; using osu.Framework.Allocation;
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Containers;
@ -448,9 +449,9 @@ namespace osu.Game.Rulesets.Catch.UI
} }
[BackgroundDependencyLoader] [BackgroundDependencyLoader]
private void load(TextureStore textures) private async Task load(TextureStore textures)
{ {
Texture = textures.Get(@"Play/Catch/fruit-catcher-idle"); Texture = await textures.GetAsync(@"Play/Catch/fruit-catcher-idle");
} }
} }
} }

View File

@ -26,11 +26,11 @@ namespace osu.Game.Rulesets.Mania.UI
throw new ArgumentException("Can't have zero or fewer stages."); throw new ArgumentException("Can't have zero or fewer stages.");
GridContainer playfieldGrid; GridContainer playfieldGrid;
InternalChild = playfieldGrid = new GridContainer AddInternal(playfieldGrid = new GridContainer
{ {
RelativeSizeAxes = Axes.Both, RelativeSizeAxes = Axes.Both,
Content = new[] { new Drawable[stageDefinitions.Count] } Content = new[] { new Drawable[stageDefinitions.Count] }
}; });
var normalColumnAction = ManiaAction.Key1; var normalColumnAction = ManiaAction.Key1;
var specialColumnAction = ManiaAction.Special1; var specialColumnAction = ManiaAction.Special1;

View File

@ -28,7 +28,7 @@ namespace osu.Game.Rulesets.Osu.Mods
const float relax_leniency = 3; const float relax_leniency = 3;
foreach (var drawable in playfield.HitObjects.AliveObjects) foreach (var drawable in playfield.HitObjectContainer.AliveObjects)
{ {
if (!(drawable is DrawableOsuHitObject osuHit)) if (!(drawable is DrawableOsuHitObject osuHit))
continue; continue;

View File

@ -1,6 +1,7 @@
// Copyright (c) 2007-2018 ppy Pty Ltd <contact@ppy.sh>. // Copyright (c) 2007-2018 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 System.Threading.Tasks;
using osu.Framework.Allocation; using osu.Framework.Allocation;
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Containers;
@ -12,7 +13,7 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables.Pieces
public class DefaultCirclePiece : Container public class DefaultCirclePiece : Container
{ {
[BackgroundDependencyLoader] [BackgroundDependencyLoader]
private void load(TextureStore textures) private async Task load(TextureStore textures)
{ {
RelativeSizeAxes = Axes.Both; RelativeSizeAxes = Axes.Both;
Children = new Drawable[] Children = new Drawable[]
@ -21,7 +22,7 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables.Pieces
{ {
Anchor = Anchor.Centre, Anchor = Anchor.Centre,
Origin = Anchor.Centre, Origin = Anchor.Centre,
Texture = textures.Get(@"Play/osu/disc"), Texture = await textures.GetAsync(@"Play/osu/disc"),
}, },
new TrianglesPiece new TrianglesPiece
{ {

View File

@ -4,6 +4,7 @@
using System; using System;
using System.Diagnostics; using System.Diagnostics;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using System.Threading.Tasks;
using osu.Framework.Allocation; using osu.Framework.Allocation;
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Framework.Graphics.OpenGL.Buffers; using osu.Framework.Graphics.OpenGL.Buffers;
@ -79,10 +80,10 @@ namespace osu.Game.Rulesets.Osu.UI.Cursor
public override bool ReceiveMouseInputAt(Vector2 screenSpacePos) => true; public override bool ReceiveMouseInputAt(Vector2 screenSpacePos) => true;
[BackgroundDependencyLoader] [BackgroundDependencyLoader]
private void load(ShaderManager shaders, TextureStore textures) private async Task load(ShaderManager shaders, TextureStore textures)
{ {
shader = shaders?.Load(@"CursorTrail", FragmentShaderDescriptor.TEXTURE); shader = shaders?.Load(@"CursorTrail", FragmentShaderDescriptor.TEXTURE);
texture = textures.Get(@"Cursor/cursortrail"); texture = await textures.GetAsync(@"Cursor/cursortrail");
Scale = new Vector2(1 / texture.ScaleAdjust); Scale = new Vector2(1 / texture.ScaleAdjust);
} }

View File

@ -61,7 +61,7 @@ namespace osu.Game.Rulesets.Osu.UI
public override void PostProcess() public override void PostProcess()
{ {
connectionLayer.HitObjects = HitObjects.Objects.Select(d => d.HitObject).OfType<OsuHitObject>(); connectionLayer.HitObjects = HitObjectContainer.Objects.Select(d => d.HitObject).OfType<OsuHitObject>();
} }
private void onNewResult(DrawableHitObject judgedObject, JudgementResult result) private void onNewResult(DrawableHitObject judgedObject, JudgementResult result)

View File

@ -2,6 +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 System; using System;
using System.Threading.Tasks;
using OpenTK; using OpenTK;
using osu.Framework.Allocation; using osu.Framework.Allocation;
using osu.Framework.Graphics; using osu.Framework.Graphics;
@ -130,12 +131,12 @@ namespace osu.Game.Rulesets.Taiko.UI
} }
[BackgroundDependencyLoader] [BackgroundDependencyLoader]
private void load(TextureStore textures, OsuColour colours) private async Task load(TextureStore textures, OsuColour colours)
{ {
rim.Texture = textures.Get(@"Play/Taiko/taiko-drum-outer"); rim.Texture = await textures.GetAsync(@"Play/Taiko/taiko-drum-outer");
rimHit.Texture = textures.Get(@"Play/Taiko/taiko-drum-outer-hit"); rimHit.Texture = await textures.GetAsync(@"Play/Taiko/taiko-drum-outer-hit");
centre.Texture = textures.Get(@"Play/Taiko/taiko-drum-inner"); centre.Texture = await textures.GetAsync(@"Play/Taiko/taiko-drum-inner");
centreHit.Texture = textures.Get(@"Play/Taiko/taiko-drum-inner-hit"); centreHit.Texture = await textures.GetAsync(@"Play/Taiko/taiko-drum-inner-hit");
rimHit.Colour = colours.Blue; rimHit.Colour = colours.Blue;
centreHit.Colour = colours.Pink; centreHit.Colour = colours.Pink;

View File

@ -319,17 +319,17 @@ namespace osu.Game.Beatmaps
/// <summary> /// <summary>
/// This is a temporary method and will likely be replaced by a full-fledged (and more correctly placed) migration process in the future. /// This is a temporary method and will likely be replaced by a full-fledged (and more correctly placed) migration process in the future.
/// </summary> /// </summary>
public async Task ImportFromStable() public Task ImportFromStable()
{ {
var stable = GetStableStorage?.Invoke(); var stable = GetStableStorage?.Invoke();
if (stable == null) if (stable == null)
{ {
Logger.Log("No osu!stable installation available!", LoggingTarget.Information, LogLevel.Error); Logger.Log("No osu!stable installation available!", LoggingTarget.Information, LogLevel.Error);
return; return Task.CompletedTask;
} }
await Task.Factory.StartNew(() => Import(stable.GetDirectories("Songs").Select(f => stable.GetFullPath(f)).ToArray()), TaskCreationOptions.LongRunning); return Task.Factory.StartNew(() => Import(stable.GetDirectories("Songs").Select(f => stable.GetFullPath(f)).ToArray()), TaskCreationOptions.LongRunning);
} }
/// <summary> /// <summary>

View File

@ -2,6 +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 System; using System;
using System.Threading.Tasks;
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;
@ -23,7 +24,7 @@ namespace osu.Game.Beatmaps.Drawables
} }
[BackgroundDependencyLoader] [BackgroundDependencyLoader]
private void load(TextureStore textures) private async Task load(TextureStore textures)
{ {
string resource = null; string resource = null;
@ -41,7 +42,7 @@ namespace osu.Game.Beatmaps.Drawables
} }
if (resource != null) if (resource != null)
Texture = textures.Get(resource); Texture = await textures.GetAsync(resource);
} }
} }

View File

@ -67,7 +67,7 @@ namespace osu.Game.Beatmaps
public bool BeatmapLoaded => beatmap.IsResultAvailable; public bool BeatmapLoaded => beatmap.IsResultAvailable;
public IBeatmap Beatmap => beatmap.Value.Result; public IBeatmap Beatmap => beatmap.Value.Result;
public async Task<IBeatmap> GetBeatmapAsync() => await beatmap.Value; public Task<IBeatmap> GetBeatmapAsync() => beatmap.Value;
private readonly AsyncLazy<IBeatmap> beatmap; private readonly AsyncLazy<IBeatmap> beatmap;
private IBeatmap populateBeatmap() private IBeatmap populateBeatmap()
@ -138,14 +138,14 @@ namespace osu.Game.Beatmaps
public bool BackgroundLoaded => background.IsResultAvailable; public bool BackgroundLoaded => background.IsResultAvailable;
public Texture Background => background.Value.Result; public Texture Background => background.Value.Result;
public async Task<Texture> GetBackgroundAsync() => await background.Value; public Task<Texture> GetBackgroundAsync() => background.Value;
private AsyncLazy<Texture> background; private AsyncLazy<Texture> background;
private Texture populateBackground() => GetBackground(); private Texture populateBackground() => GetBackground();
public bool TrackLoaded => track.IsResultAvailable; public bool TrackLoaded => track.IsResultAvailable;
public Track Track => track.Value.Result; public Track Track => track.Value.Result;
public async Task<Track> GetTrackAsync() => await track.Value; public Task<Track> GetTrackAsync() => track.Value;
private AsyncLazy<Track> track; private AsyncLazy<Track> track;
private Track populateTrack() private Track populateTrack()
@ -158,21 +158,21 @@ namespace osu.Game.Beatmaps
public bool WaveformLoaded => waveform.IsResultAvailable; public bool WaveformLoaded => waveform.IsResultAvailable;
public Waveform Waveform => waveform.Value.Result; public Waveform Waveform => waveform.Value.Result;
public async Task<Waveform> GetWaveformAsync() => await waveform.Value; public Task<Waveform> GetWaveformAsync() => waveform.Value;
private readonly AsyncLazy<Waveform> waveform; private readonly AsyncLazy<Waveform> waveform;
private Waveform populateWaveform() => GetWaveform(); private Waveform populateWaveform() => GetWaveform();
public bool StoryboardLoaded => storyboard.IsResultAvailable; public bool StoryboardLoaded => storyboard.IsResultAvailable;
public Storyboard Storyboard => storyboard.Value.Result; public Storyboard Storyboard => storyboard.Value.Result;
public async Task<Storyboard> GetStoryboardAsync() => await storyboard.Value; public Task<Storyboard> GetStoryboardAsync() => storyboard.Value;
private readonly AsyncLazy<Storyboard> storyboard; private readonly AsyncLazy<Storyboard> storyboard;
private Storyboard populateStoryboard() => GetStoryboard(); private Storyboard populateStoryboard() => GetStoryboard();
public bool SkinLoaded => skin.IsResultAvailable; public bool SkinLoaded => skin.IsResultAvailable;
public Skin Skin => skin.Value.Result; public Skin Skin => skin.Value.Result;
public async Task<Skin> GetSkinAsync() => await skin.Value; public Task<Skin> GetSkinAsync() => skin.Value;
private readonly AsyncLazy<Skin> skin; private readonly AsyncLazy<Skin> skin;
private Skin populateSkin() => GetSkin(); private Skin populateSkin() => GetSkin();

View File

@ -1,6 +1,7 @@
// Copyright (c) 2007-2018 ppy Pty Ltd <contact@ppy.sh>. // Copyright (c) 2007-2018 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 System.Threading.Tasks;
using osu.Framework.Allocation; using osu.Framework.Allocation;
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Containers;
@ -34,10 +35,10 @@ namespace osu.Game.Graphics.Backgrounds
} }
[BackgroundDependencyLoader] [BackgroundDependencyLoader]
private void load(LargeTextureStore textures) private async Task load(LargeTextureStore textures)
{ {
if (!string.IsNullOrEmpty(textureName)) if (!string.IsNullOrEmpty(textureName))
Sprite.Texture = textures.Get(textureName); Sprite.Texture = await textures.GetAsync(textureName);
} }
} }
} }

View File

@ -1,6 +1,7 @@
// Copyright (c) 2007-2018 ppy Pty Ltd <contact@ppy.sh>. // Copyright (c) 2007-2018 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 System.Threading.Tasks;
using osu.Framework.Allocation; using osu.Framework.Allocation;
using osu.Framework.Audio; using osu.Framework.Audio;
using osu.Framework.Audio.Sample; using osu.Framework.Audio.Sample;
@ -37,15 +38,15 @@ namespace osu.Game.Graphics.Containers
} }
[BackgroundDependencyLoader(true)] [BackgroundDependencyLoader(true)]
private void load(OsuGame osuGame, AudioManager audio, PreviewTrackManager previewTrackManager) private async Task load(OsuGame osuGame, AudioManager audio, PreviewTrackManager previewTrackManager)
{ {
this.previewTrackManager = previewTrackManager; this.previewTrackManager = previewTrackManager;
if (osuGame != null) if (osuGame != null)
OverlayActivationMode.BindTo(osuGame.OverlayActivationMode); OverlayActivationMode.BindTo(osuGame.OverlayActivationMode);
samplePopIn = audio.Sample.Get(@"UI/overlay-pop-in"); samplePopIn = await audio.Sample.GetAsync(@"UI/overlay-pop-in");
samplePopOut = audio.Sample.Get(@"UI/overlay-pop-out"); samplePopOut = await audio.Sample.GetAsync(@"UI/overlay-pop-out");
StateChanged += onStateChanged; StateChanged += onStateChanged;
} }

View File

@ -10,6 +10,7 @@ using osu.Framework.Graphics.Cursor;
using osu.Framework.Graphics.Sprites; using osu.Framework.Graphics.Sprites;
using osu.Game.Configuration; using osu.Game.Configuration;
using System; using System;
using System.Threading.Tasks;
using JetBrains.Annotations; using JetBrains.Annotations;
using osu.Framework.Graphics.Textures; using osu.Framework.Graphics.Textures;
using osu.Framework.Input.EventArgs; using osu.Framework.Input.EventArgs;
@ -132,7 +133,7 @@ namespace osu.Game.Graphics.Cursor
} }
[BackgroundDependencyLoader] [BackgroundDependencyLoader]
private void load(OsuConfigManager config, TextureStore textures, OsuColour colour) private async Task load(OsuConfigManager config, TextureStore textures, OsuColour colour)
{ {
Children = new Drawable[] Children = new Drawable[]
{ {
@ -143,14 +144,14 @@ namespace osu.Game.Graphics.Cursor
{ {
new Sprite new Sprite
{ {
Texture = textures.Get(@"Cursor/menu-cursor"), Texture = await textures.GetAsync(@"Cursor/menu-cursor"),
}, },
AdditiveLayer = new Sprite AdditiveLayer = new Sprite
{ {
Blending = BlendingMode.Additive, Blending = BlendingMode.Additive,
Colour = colour.Pink, Colour = colour.Pink,
Alpha = 0, Alpha = 0,
Texture = textures.Get(@"Cursor/menu-cursor-additive"), Texture = await textures.GetAsync(@"Cursor/menu-cursor-additive"),
}, },
} }
} }

View File

@ -42,7 +42,7 @@ namespace osu.Game.Graphics
private SampleChannel shutter; private SampleChannel shutter;
[BackgroundDependencyLoader] [BackgroundDependencyLoader]
private void load(GameHost host, OsuConfigManager config, Storage storage, NotificationOverlay notificationOverlay, AudioManager audio) private async Task load(GameHost host, OsuConfigManager config, Storage storage, NotificationOverlay notificationOverlay, AudioManager audio)
{ {
this.host = host; this.host = host;
this.storage = storage.GetStorageForDirectory(@"screenshots"); this.storage = storage.GetStorageForDirectory(@"screenshots");
@ -51,7 +51,7 @@ namespace osu.Game.Graphics
screenshotFormat = config.GetBindable<ScreenshotFormat>(OsuSetting.ScreenshotFormat); screenshotFormat = config.GetBindable<ScreenshotFormat>(OsuSetting.ScreenshotFormat);
captureMenuCursor = config.GetBindable<bool>(OsuSetting.ScreenshotCaptureMenuCursor); captureMenuCursor = config.GetBindable<bool>(OsuSetting.ScreenshotCaptureMenuCursor);
shutter = audio.Sample.Get("UI/shutter"); shutter = await audio.Sample.GetAsync("UI/shutter");
} }
public bool OnPressed(GlobalAction action) public bool OnPressed(GlobalAction action)
@ -71,7 +71,7 @@ namespace osu.Game.Graphics
private volatile int screenShotTasks; private volatile int screenShotTasks;
public async Task TakeScreenshotAsync() => await Task.Run(async () => public Task TakeScreenshotAsync() => Task.Run(async () =>
{ {
Interlocked.Increment(ref screenShotTasks); Interlocked.Increment(ref screenShotTasks);

View File

@ -2,6 +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 System; using System;
using System.Threading.Tasks;
using osu.Framework.Allocation; using osu.Framework.Allocation;
using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.Sprites; using osu.Framework.Graphics.Sprites;
@ -24,7 +25,7 @@ namespace osu.Game.Graphics
private FontStore store; private FontStore store;
[BackgroundDependencyLoader] [BackgroundDependencyLoader]
private void load(FontStore store) private async Task load(FontStore store)
{ {
this.store = store; this.store = store;
@ -55,23 +56,23 @@ namespace osu.Game.Graphics
}, },
}; };
updateTexture(); await updateTexture();
} }
protected override void LoadComplete() protected override void LoadComplete()
{ {
base.LoadComplete(); base.LoadComplete();
updateTexture(); updateTexture().Wait();
} }
private FontAwesome loadedIcon; private FontAwesome loadedIcon;
private void updateTexture() private async Task updateTexture()
{ {
var loadableIcon = icon; var loadableIcon = icon;
if (loadableIcon == loadedIcon) return; if (loadableIcon == loadedIcon) return;
var texture = store?.Get(((char)loadableIcon).ToString()); var texture = await store.GetAsync(((char)loadableIcon).ToString());
spriteMain.Texture = texture; spriteMain.Texture = texture;
spriteShadow.Texture = texture; spriteShadow.Texture = texture;
@ -129,8 +130,8 @@ namespace osu.Game.Graphics
if (icon == value) return; if (icon == value) return;
icon = value; icon = value;
if (IsLoaded) if (LoadState == LoadState.Loaded)
updateTexture(); updateTexture().Wait();
} }
} }
} }

View File

@ -22,7 +22,7 @@ namespace osu.Game.Graphics.Sprites
protected override Drawable CreateFallbackCharacterDrawable() protected override Drawable CreateFallbackCharacterDrawable()
{ {
var tex = GetTextureForCharacter('?'); var tex = GetTextureForCharacter('?').Result;
if (tex != null) if (tex != null)
{ {

View File

@ -1,6 +1,7 @@
// Copyright (c) 2007-2018 ppy Pty Ltd <contact@ppy.sh>. // Copyright (c) 2007-2018 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 System.Threading.Tasks;
using osu.Framework.Allocation; using osu.Framework.Allocation;
using osu.Framework.Audio; using osu.Framework.Audio;
using osu.Framework.Audio.Sample; using osu.Framework.Audio.Sample;
@ -28,9 +29,9 @@ namespace osu.Game.Graphics.UserInterface
} }
[BackgroundDependencyLoader] [BackgroundDependencyLoader]
private void load(AudioManager audio) private async Task load(AudioManager audio)
{ {
sampleClick = audio.Sample.Get($@"UI/generic-select{SampleSet.GetDescription()}"); sampleClick = await audio.Sample.GetAsync($@"UI/generic-select{SampleSet.GetDescription()}");
} }
} }
} }

View File

@ -2,6 +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 System.ComponentModel; using System.ComponentModel;
using System.Threading.Tasks;
using osu.Framework.Allocation; using osu.Framework.Allocation;
using osu.Framework.Audio; using osu.Framework.Audio;
using osu.Framework.Audio.Sample; using osu.Framework.Audio.Sample;
@ -35,9 +36,9 @@ namespace osu.Game.Graphics.UserInterface
} }
[BackgroundDependencyLoader] [BackgroundDependencyLoader]
private void load(AudioManager audio) private async Task load(AudioManager audio)
{ {
sampleHover = audio.Sample.Get($@"UI/generic-hover{SampleSet.GetDescription()}"); sampleHover = await audio.Sample.GetAsync($@"UI/generic-hover{SampleSet.GetDescription()}");
} }
} }

View File

@ -1,6 +1,7 @@
// Copyright (c) 2007-2018 ppy Pty Ltd <contact@ppy.sh>. // Copyright (c) 2007-2018 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 System.Threading.Tasks;
using osu.Framework.Allocation; using osu.Framework.Allocation;
using osu.Framework.Audio; using osu.Framework.Audio;
using osu.Framework.Audio.Sample; using osu.Framework.Audio.Sample;
@ -110,10 +111,10 @@ namespace osu.Game.Graphics.UserInterface
} }
[BackgroundDependencyLoader] [BackgroundDependencyLoader]
private void load(AudioManager audio) private async Task load(AudioManager audio)
{ {
sampleChecked = audio.Sample.Get(@"UI/check-on"); sampleChecked = await audio.Sample.GetAsync(@"UI/check-on");
sampleUnchecked = audio.Sample.Get(@"UI/check-off"); sampleUnchecked = await audio.Sample.GetAsync(@"UI/check-off");
} }
} }
} }

View File

@ -1,6 +1,7 @@
// Copyright (c) 2007-2018 ppy Pty Ltd <contact@ppy.sh>. // Copyright (c) 2007-2018 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 System.Threading.Tasks;
using osu.Framework.Allocation; using osu.Framework.Allocation;
using osu.Framework.Audio; using osu.Framework.Audio;
using osu.Framework.Audio.Sample; using osu.Framework.Audio.Sample;
@ -69,10 +70,10 @@ namespace osu.Game.Graphics.UserInterface
} }
[BackgroundDependencyLoader] [BackgroundDependencyLoader]
private void load(AudioManager audio) private async Task load(AudioManager audio)
{ {
sampleHover = audio.Sample.Get(@"UI/generic-hover"); sampleHover = await audio.Sample.GetAsync(@"UI/generic-hover");
sampleClick = audio.Sample.Get(@"UI/generic-select"); sampleClick = await audio.Sample.GetAsync(@"UI/generic-select");
BackgroundColour = Color4.Transparent; BackgroundColour = Color4.Transparent;
BackgroundColourHover = OsuColour.FromHex(@"172023"); BackgroundColourHover = OsuColour.FromHex(@"172023");

View File

@ -3,6 +3,7 @@
using System; using System;
using System.Globalization; using System.Globalization;
using System.Threading.Tasks;
using OpenTK; using OpenTK;
using OpenTK.Graphics; using OpenTK.Graphics;
using osu.Framework.Allocation; using osu.Framework.Allocation;
@ -119,9 +120,9 @@ namespace osu.Game.Graphics.UserInterface
} }
[BackgroundDependencyLoader] [BackgroundDependencyLoader]
private void load(AudioManager audio, OsuColour colours) private async Task load(AudioManager audio, OsuColour colours)
{ {
sample = audio.Sample.Get(@"UI/sliderbar-notch"); sample = await audio.Sample.GetAsync(@"UI/sliderbar-notch");
AccentColour = colours.Pink; AccentColour = colours.Pink;
} }

View File

@ -3,6 +3,7 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
using System.Threading.Tasks;
using osu.Framework.IO.Stores; using osu.Framework.IO.Stores;
namespace osu.Game.IO.Archives namespace osu.Game.IO.Archives
@ -28,7 +29,9 @@ namespace osu.Game.IO.Archives
public abstract IEnumerable<string> Filenames { get; } public abstract IEnumerable<string> Filenames { get; }
public virtual byte[] Get(string name) public virtual byte[] Get(string name) => GetAsync(name).Result;
public async Task<byte[]> GetAsync(string name)
{ {
using (Stream input = GetStream(name)) using (Stream input = GetStream(name))
{ {
@ -36,7 +39,7 @@ namespace osu.Game.IO.Archives
return null; return null;
byte[] buffer = new byte[input.Length]; byte[] buffer = new byte[input.Length];
input.Read(buffer, 0, buffer.Length); await input.ReadAsync(buffer, 0, buffer.Length);
return buffer; return buffer;
} }
} }

View File

@ -20,6 +20,7 @@ using OpenTK.Input;
using osu.Framework.Graphics.Shapes; using osu.Framework.Graphics.Shapes;
using System; using System;
using System.Linq; using System.Linq;
using System.Threading.Tasks;
using osu.Framework.Input.States; using osu.Framework.Input.States;
using osu.Framework.MathUtils; using osu.Framework.MathUtils;
@ -143,10 +144,10 @@ namespace osu.Game.Overlays
} }
[BackgroundDependencyLoader] [BackgroundDependencyLoader]
private void load(OsuColour colours, TextureStore textures, AudioManager audio) private async Task load(OsuColour colours, TextureStore textures, AudioManager audio)
{ {
getSample = audio.Sample.Get(@"MedalSplash/medal-get"); getSample = await audio.Sample.GetAsync(@"MedalSplash/medal-get");
innerSpin.Texture = outerSpin.Texture = textures.Get(@"MedalSplash/disc-spin"); innerSpin.Texture = outerSpin.Texture = await textures.GetAsync(@"MedalSplash/disc-spin");
disc.EdgeEffect = leftStrip.EdgeEffect = rightStrip.EdgeEffect = new EdgeEffectParameters disc.EdgeEffect = leftStrip.EdgeEffect = rightStrip.EdgeEffect = new EdgeEffectParameters
{ {

View File

@ -2,6 +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 System; using System;
using System.Threading.Tasks;
using osu.Framework; using osu.Framework;
using OpenTK; using OpenTK;
using osu.Framework.Allocation; using osu.Framework.Allocation;
@ -118,10 +119,10 @@ namespace osu.Game.Overlays.MedalSplash
} }
[BackgroundDependencyLoader] [BackgroundDependencyLoader]
private void load(OsuColour colours, TextureStore textures) private async Task load(OsuColour colours, TextureStore textures)
{ {
medalSprite.Texture = textures.Get(medal.ImageUrl); medalSprite.Texture = await textures.GetAsync(medal.ImageUrl);
medalGlow.Texture = textures.Get(@"MedalSplash/medal-glow"); medalGlow.Texture = await textures.GetAsync(@"MedalSplash/medal-glow");
description.Colour = colours.BlueLight; description.Colour = colours.BlueLight;
} }

View File

@ -15,6 +15,7 @@ using osu.Game.Rulesets.Mods;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Threading.Tasks;
using osu.Framework.Audio; using osu.Framework.Audio;
using osu.Framework.Audio.Sample; using osu.Framework.Audio.Sample;
using osu.Framework.Graphics.Shapes; using osu.Framework.Graphics.Shapes;
@ -49,7 +50,7 @@ namespace osu.Game.Overlays.Mods
protected readonly IBindable<RulesetInfo> Ruleset = new Bindable<RulesetInfo>(); protected readonly IBindable<RulesetInfo> Ruleset = new Bindable<RulesetInfo>();
[BackgroundDependencyLoader(true)] [BackgroundDependencyLoader(true)]
private void load(OsuColour colours, IBindable<RulesetInfo> ruleset, AudioManager audio, Bindable<IEnumerable<Mod>> selectedMods) private async Task load(OsuColour colours, IBindable<RulesetInfo> ruleset, AudioManager audio, Bindable<IEnumerable<Mod>> selectedMods)
{ {
LowMultiplierColour = colours.Red; LowMultiplierColour = colours.Red;
HighMultiplierColour = colours.Green; HighMultiplierColour = colours.Green;
@ -58,8 +59,8 @@ namespace osu.Game.Overlays.Mods
Ruleset.BindTo(ruleset); Ruleset.BindTo(ruleset);
if (selectedMods != null) SelectedMods.BindTo(selectedMods); if (selectedMods != null) SelectedMods.BindTo(selectedMods);
sampleOn = audio.Sample.Get(@"UI/check-on"); sampleOn = await audio.Sample.GetAsync(@"UI/check-on");
sampleOff = audio.Sample.Get(@"UI/check-off"); sampleOff = await audio.Sample.GetAsync(@"UI/check-off");
} }
protected override void LoadComplete() protected override void LoadComplete()

View File

@ -454,9 +454,9 @@ namespace osu.Game.Overlays
} }
[BackgroundDependencyLoader] [BackgroundDependencyLoader]
private void load(TextureStore textures) private async Task load(TextureStore textures)
{ {
sprite.Texture = beatmap?.Background ?? textures.Get(@"Backgrounds/bg4"); sprite.Texture = beatmap?.Background ?? await textures.GetAsync(@"Backgrounds/bg4");
} }
} }

View File

@ -1,6 +1,7 @@
// Copyright (c) 2007-2018 ppy Pty Ltd <contact@ppy.sh>. // Copyright (c) 2007-2018 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 System.Threading.Tasks;
using osu.Framework.Allocation; using osu.Framework.Allocation;
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Containers;
@ -42,9 +43,9 @@ namespace osu.Game.Overlays.Profile.Components
} }
[BackgroundDependencyLoader] [BackgroundDependencyLoader]
private void load(TextureStore textures) private async Task load(TextureStore textures)
{ {
badge.Texture = textures.Get($"Grades/{grade}"); badge.Texture = await textures.GetAsync($"Grades/{grade}");
} }
} }
} }

View File

@ -2,6 +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 System; using System;
using System.Threading.Tasks;
using osu.Framework.Allocation; using osu.Framework.Allocation;
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Containers;
@ -176,13 +177,13 @@ namespace osu.Game.Overlays.Profile.Header
} }
[BackgroundDependencyLoader] [BackgroundDependencyLoader]
private void load(TextureStore textures) private async Task load(TextureStore textures)
{ {
Child = new Sprite Child = new Sprite
{ {
FillMode = FillMode.Fit, FillMode = FillMode.Fit,
RelativeSizeAxes = Axes.Both, RelativeSizeAxes = Axes.Both,
Texture = textures.Get(badge.ImageUrl), Texture = await textures.GetAsync(badge.ImageUrl),
}; };
} }

View File

@ -2,6 +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 System; using System;
using System.Threading.Tasks;
using OpenTK; using OpenTK;
using OpenTK.Graphics; using OpenTK.Graphics;
using osu.Framework.Allocation; using osu.Framework.Allocation;
@ -311,9 +312,9 @@ namespace osu.Game.Overlays.Profile
} }
[BackgroundDependencyLoader] [BackgroundDependencyLoader]
private void load(TextureStore textures) private async Task load(TextureStore textures)
{ {
levelBadge.Texture = textures.Get(@"Profile/levelbadge"); levelBadge.Texture = await textures.GetAsync(@"Profile/levelbadge");
} }
private User user; private User user;

View File

@ -1,6 +1,7 @@
// Copyright (c) 2007-2018 ppy Pty Ltd <contact@ppy.sh>. // Copyright (c) 2007-2018 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 System.Threading.Tasks;
using osu.Framework.Allocation; using osu.Framework.Allocation;
using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics; using osu.Framework.Graphics;
@ -30,9 +31,9 @@ namespace osu.Game.Overlays.Profile.Sections.Recent
} }
[BackgroundDependencyLoader] [BackgroundDependencyLoader]
private void load(TextureStore textures) private async Task load(TextureStore textures)
{ {
sprite.Texture = textures.Get(url); sprite.Texture = await textures.GetAsync(url);
} }
} }
} }

View File

@ -19,12 +19,12 @@ namespace osu.Game.Rulesets.UI
/// <summary> /// <summary>
/// The <see cref="DrawableHitObject"/> contained in this Playfield. /// The <see cref="DrawableHitObject"/> contained in this Playfield.
/// </summary> /// </summary>
public HitObjectContainer HitObjects { get; private set; } public HitObjectContainer HitObjectContainer { get; private set; }
/// <summary> /// <summary>
/// All the <see cref="DrawableHitObject"/>s contained in this <see cref="Playfield"/> and all <see cref="NestedPlayfields"/>. /// All the <see cref="DrawableHitObject"/>s contained in this <see cref="Playfield"/> and all <see cref="NestedPlayfields"/>.
/// </summary> /// </summary>
public IEnumerable<DrawableHitObject> AllHitObjects => HitObjects?.Objects.Concat(NestedPlayfields.SelectMany(p => p.AllHitObjects)) ?? Enumerable.Empty<DrawableHitObject>(); public IEnumerable<DrawableHitObject> AllHitObjects => HitObjectContainer?.Objects.Concat(NestedPlayfields.SelectMany(p => p.AllHitObjects)) ?? Enumerable.Empty<DrawableHitObject>();
/// <summary> /// <summary>
/// All <see cref="Playfield"/>s nested inside this <see cref="Playfield"/>. /// All <see cref="Playfield"/>s nested inside this <see cref="Playfield"/>.
@ -60,10 +60,10 @@ namespace osu.Game.Rulesets.UI
{ {
this.beatmap = beatmap.Value; this.beatmap = beatmap.Value;
HitObjects = CreateHitObjectContainer(); HitObjectContainer = CreateHitObjectContainer();
HitObjects.RelativeSizeAxes = Axes.Both; HitObjectContainer.RelativeSizeAxes = Axes.Both;
Add(HitObjects); Add(HitObjectContainer);
} }
/// <summary> /// <summary>
@ -75,13 +75,13 @@ namespace osu.Game.Rulesets.UI
/// Adds a DrawableHitObject to this Playfield. /// Adds a DrawableHitObject to this Playfield.
/// </summary> /// </summary>
/// <param name="h">The DrawableHitObject to add.</param> /// <param name="h">The DrawableHitObject to add.</param>
public virtual void Add(DrawableHitObject h) => HitObjects.Add(h); public virtual void Add(DrawableHitObject h) => HitObjectContainer.Add(h);
/// <summary> /// <summary>
/// Remove a DrawableHitObject from this Playfield. /// Remove a DrawableHitObject from this Playfield.
/// </summary> /// </summary>
/// <param name="h">The DrawableHitObject to remove.</param> /// <param name="h">The DrawableHitObject to remove.</param>
public virtual void Remove(DrawableHitObject h) => HitObjects.Remove(h); public virtual void Remove(DrawableHitObject h) => HitObjectContainer.Remove(h);
/// <summary> /// <summary>
/// Registers a <see cref="Playfield"/> as a nested <see cref="Playfield"/>. /// Registers a <see cref="Playfield"/> as a nested <see cref="Playfield"/>.

View File

@ -306,7 +306,7 @@ namespace osu.Game.Rulesets.UI
Playfield.PostProcess(); Playfield.PostProcess();
foreach (var mod in Mods.OfType<IApplicableToDrawableHitObjects>()) foreach (var mod in Mods.OfType<IApplicableToDrawableHitObjects>())
mod.ApplyToDrawableHitObjects(Playfield.HitObjects.Objects); mod.ApplyToDrawableHitObjects(Playfield.HitObjectContainer.Objects);
} }
protected override void Update() protected override void Update()

View File

@ -55,7 +55,7 @@ namespace osu.Game.Rulesets.UI.Scrolling
/// <summary> /// <summary>
/// The container that contains the <see cref="DrawableHitObject"/>s. /// The container that contains the <see cref="DrawableHitObject"/>s.
/// </summary> /// </summary>
public new ScrollingHitObjectContainer HitObjects => (ScrollingHitObjectContainer)base.HitObjects; public new ScrollingHitObjectContainer HitObjects => (ScrollingHitObjectContainer)HitObjectContainer;
/// <summary> /// <summary>
/// The direction in which <see cref="DrawableHitObject"/>s in this <see cref="ScrollingPlayfield"/> should scroll. /// The direction in which <see cref="DrawableHitObject"/>s in this <see cref="ScrollingPlayfield"/> should scroll.

View File

@ -1,6 +1,7 @@
// Copyright (c) 2007-2018 ppy Pty Ltd <contact@ppy.sh>. // Copyright (c) 2007-2018 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 System.Threading.Tasks;
using osu.Framework.Allocation; using osu.Framework.Allocation;
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Framework.Graphics.Textures; using osu.Framework.Graphics.Textures;
@ -75,9 +76,9 @@ namespace osu.Game.Screens.Backgrounds
} }
[BackgroundDependencyLoader] [BackgroundDependencyLoader]
private void load(TextureStore textures) private async Task load(TextureStore textures)
{ {
Sprite.Texture = beatmap?.Background ?? textures.Get(@"Backgrounds/bg1"); Sprite.Texture = beatmap?.Background ?? await textures.GetAsync(@"Backgrounds/bg1");
} }
} }
} }

View File

@ -2,6 +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 System; using System;
using System.Threading.Tasks;
using osu.Framework; using osu.Framework;
using osu.Framework.Allocation; using osu.Framework.Allocation;
using osu.Framework.Audio; using osu.Framework.Audio;
@ -179,11 +180,11 @@ namespace osu.Game.Screens.Menu
} }
[BackgroundDependencyLoader] [BackgroundDependencyLoader]
private void load(AudioManager audio) private async Task load(AudioManager audio)
{ {
sampleHover = audio.Sample.Get(@"Menu/button-hover"); sampleHover = await audio.Sample.GetAsync(@"Menu/button-hover");
if (!string.IsNullOrEmpty(sampleName)) if (!string.IsNullOrEmpty(sampleName))
sampleClick = audio.Sample.Get($@"Menu/{sampleName}"); sampleClick = await audio.Sample.GetAsync($@"Menu/{sampleName}");
} }
protected override bool OnMouseDown(InputState state, MouseDownEventArgs args) protected override bool OnMouseDown(InputState state, MouseDownEventArgs args)

View File

@ -4,6 +4,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Threading.Tasks;
using osu.Framework; using osu.Framework;
using osu.Framework.Allocation; using osu.Framework.Allocation;
using osu.Framework.Audio; using osu.Framework.Audio;
@ -102,10 +103,10 @@ namespace osu.Game.Screens.Menu
private OsuGame game; private OsuGame game;
[BackgroundDependencyLoader(true)] [BackgroundDependencyLoader(true)]
private void load(AudioManager audio, OsuGame game) private async Task load(AudioManager audio, OsuGame game)
{ {
this.game = game; this.game = game;
sampleBack = audio.Sample.Get(@"Menu/button-back-select"); sampleBack = await audio.Sample.GetAsync(@"Menu/button-back-select");
} }
public bool OnPressed(GlobalAction action) public bool OnPressed(GlobalAction action)

View File

@ -1,6 +1,7 @@
// Copyright (c) 2007-2018 ppy Pty Ltd <contact@ppy.sh>. // Copyright (c) 2007-2018 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 System.Threading.Tasks;
using osu.Framework.Allocation; using osu.Framework.Allocation;
using osu.Framework.Audio; using osu.Framework.Audio;
using osu.Framework.Audio.Sample; using osu.Framework.Audio.Sample;
@ -47,7 +48,7 @@ namespace osu.Game.Screens.Menu
private WorkingBeatmap introBeatmap; private WorkingBeatmap introBeatmap;
[BackgroundDependencyLoader] [BackgroundDependencyLoader]
private void load(AudioManager audio, OsuConfigManager config, BeatmapManager beatmaps, Framework.Game game, BindableBeatmap beatmap) private async Task load(AudioManager audio, OsuConfigManager config, BeatmapManager beatmaps, Framework.Game game, BindableBeatmap beatmap)
{ {
this.beatmap.BindTo(beatmap); this.beatmap.BindTo(beatmap);
@ -80,8 +81,8 @@ namespace osu.Game.Screens.Menu
introBeatmap = beatmaps.GetWorkingBeatmap(setInfo.Beatmaps[0]); introBeatmap = beatmaps.GetWorkingBeatmap(setInfo.Beatmaps[0]);
track = introBeatmap.Track; track = introBeatmap.Track;
welcome = audio.Sample.Get(@"welcome"); welcome = await audio.Sample.GetAsync(@"welcome");
seeya = audio.Sample.Get(@"seeya"); seeya = await audio.Sample.GetAsync(@"seeya");
} }
private const double delay_step_one = 2300; private const double delay_step_one = 2300;

View File

@ -2,6 +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 System; using System;
using System.Threading.Tasks;
using osu.Framework.Allocation; using osu.Framework.Allocation;
using osu.Framework.Audio; using osu.Framework.Audio;
using osu.Framework.Audio.Sample; using osu.Framework.Audio.Sample;
@ -253,13 +254,13 @@ namespace osu.Game.Screens.Menu
} }
[BackgroundDependencyLoader] [BackgroundDependencyLoader]
private void load(TextureStore textures, AudioManager audio) private async Task load(TextureStore textures, AudioManager audio)
{ {
sampleClick = audio.Sample.Get(@"Menu/osu-logo-select"); sampleClick = await audio.Sample.GetAsync(@"Menu/osu-logo-select");
sampleBeat = audio.Sample.Get(@"Menu/osu-logo-heartbeat"); sampleBeat = await audio.Sample.GetAsync(@"Menu/osu-logo-heartbeat");
logo.Texture = textures.Get(@"Menu/logo"); logo.Texture = await textures.GetAsync(@"Menu/logo");
ripple.Texture = textures.Get(@"Menu/logo"); ripple.Texture = await textures.GetAsync(@"Menu/logo");
} }
private int lastBeatIndex; private int lastBeatIndex;

View File

@ -2,6 +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 System; using System;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore.Internal; using Microsoft.EntityFrameworkCore.Internal;
using osu.Framework.Allocation; using osu.Framework.Allocation;
using osu.Framework.Audio; using osu.Framework.Audio;
@ -80,7 +81,7 @@ namespace osu.Game.Screens
private SampleChannel sampleExit; private SampleChannel sampleExit;
[BackgroundDependencyLoader(true)] [BackgroundDependencyLoader(true)]
private void load(BindableBeatmap beatmap, OsuGame osu, AudioManager audio, Bindable<RulesetInfo> ruleset) private async Task load(BindableBeatmap beatmap, OsuGame osu, AudioManager audio, Bindable<RulesetInfo> ruleset)
{ {
Beatmap.BindTo(beatmap); Beatmap.BindTo(beatmap);
Ruleset.BindTo(ruleset); Ruleset.BindTo(ruleset);
@ -98,7 +99,7 @@ namespace osu.Game.Screens
}; };
} }
sampleExit = audio.Sample.Get(@"UI/screen-back"); sampleExit = await audio.Sample.GetAsync(@"UI/screen-back");
} }
public virtual bool OnPressed(GlobalAction action) public virtual bool OnPressed(GlobalAction action)

View File

@ -1,6 +1,7 @@
// Copyright (c) 2007-2018 ppy Pty Ltd <contact@ppy.sh>. // Copyright (c) 2007-2018 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 System.Threading.Tasks;
using osu.Framework.Allocation; using osu.Framework.Allocation;
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Containers;
@ -61,19 +62,19 @@ namespace osu.Game.Screens.Play
} }
[BackgroundDependencyLoader] [BackgroundDependencyLoader]
private void load(TextureStore textures) private async Task load(TextureStore textures)
{ {
Children = new Drawable[] Children = new Drawable[]
{ {
buttonSprite = new Sprite buttonSprite = new Sprite
{ {
Texture = textures.Get(@"KeyCounter/key-up"), Texture = await textures.GetAsync(@"KeyCounter/key-up"),
Anchor = Anchor.Centre, Anchor = Anchor.Centre,
Origin = Anchor.Centre, Origin = Anchor.Centre,
}, },
glowSprite = new Sprite glowSprite = new Sprite
{ {
Texture = textures.Get(@"KeyCounter/key-glow"), Texture = await textures.GetAsync(@"KeyCounter/key-glow"),
Anchor = Anchor.Centre, Anchor = Anchor.Centre,
Origin = Anchor.Centre, Origin = Anchor.Centre,
Alpha = 0 Alpha = 0

View File

@ -84,7 +84,7 @@ namespace osu.Game.Screens.Play
public bool LoadedBeatmapSuccessfully => RulesetContainer?.Objects.Any() == true; public bool LoadedBeatmapSuccessfully => RulesetContainer?.Objects.Any() == true;
[BackgroundDependencyLoader] [BackgroundDependencyLoader]
private void load(AudioManager audio, APIAccess api, OsuConfigManager config) private async Task load(AudioManager audio, APIAccess api, OsuConfigManager config)
{ {
this.api = api; this.api = api;
@ -92,7 +92,7 @@ namespace osu.Game.Screens.Play
if (working is DummyWorkingBeatmap) if (working is DummyWorkingBeatmap)
return; return;
sampleRestart = audio.Sample.Get(@"Gameplay/restart"); sampleRestart = await audio.Sample.GetAsync(@"Gameplay/restart");
mouseWheelDisabled = config.GetBindable<bool>(OsuSetting.MouseDisableWheel); mouseWheelDisabled = config.GetBindable<bool>(OsuSetting.MouseDisableWheel);
userAudioOffset = config.GetBindable<double>(OsuSetting.AudioOffset); userAudioOffset = config.GetBindable<double>(OsuSetting.AudioOffset);

View File

@ -2,6 +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 System; using System;
using System.Threading.Tasks;
using osu.Framework; using osu.Framework;
using osu.Framework.Allocation; using osu.Framework.Allocation;
using osu.Framework.Audio; using osu.Framework.Audio;
@ -224,12 +225,12 @@ namespace osu.Game.Screens.Play
} }
[BackgroundDependencyLoader] [BackgroundDependencyLoader]
private void load(OsuColour colours, AudioManager audio) private async Task load(OsuColour colours, AudioManager audio)
{ {
colourNormal = colours.Yellow; colourNormal = colours.Yellow;
colourHover = colours.YellowDark; colourHover = colours.YellowDark;
sampleConfirm = audio.Sample.Get(@"SongSelect/confirm-selection"); sampleConfirm = await audio.Sample.GetAsync(@"SongSelect/confirm-selection");
Children = new Drawable[] Children = new Drawable[]
{ {

View File

@ -4,6 +4,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Threading.Tasks;
using OpenTK; using OpenTK;
using OpenTK.Graphics; using OpenTK.Graphics;
using osu.Framework.Allocation; using osu.Framework.Allocation;
@ -368,10 +369,10 @@ namespace osu.Game.Screens.Ranking
} }
[BackgroundDependencyLoader] [BackgroundDependencyLoader]
private void load(TextureStore textures) private async Task load(TextureStore textures)
{ {
if (!string.IsNullOrEmpty(user.CoverUrl)) if (!string.IsNullOrEmpty(user.CoverUrl))
cover.Texture = textures.Get(user.CoverUrl); cover.Texture = await textures.GetAsync(user.CoverUrl);
} }
} }

View File

@ -64,14 +64,19 @@ namespace osu.Game.Screens.Select
public IEnumerable<BeatmapSetInfo> BeatmapSets public IEnumerable<BeatmapSetInfo> BeatmapSets
{ {
get { return beatmapSets.Select(g => g.BeatmapSet); } get => beatmapSets.Select(g => g.BeatmapSet);
set set => loadBeatmapSets(() => value);
}
public void LoadBeatmapSetsFromManager(BeatmapManager manager) => loadBeatmapSets(manager.GetAllUsableBeatmapSetsEnumerable);
private void loadBeatmapSets(Func<IEnumerable<BeatmapSetInfo>> beatmapSets)
{ {
CarouselRoot newRoot = new CarouselRoot(this); CarouselRoot newRoot = new CarouselRoot(this);
Task.Run(() => Task.Run(() =>
{ {
value.Select(createCarouselSet).Where(g => g != null).ForEach(newRoot.AddChild); beatmapSets().Select(createCarouselSet).Where(g => g != null).ForEach(newRoot.AddChild);
newRoot.Filter(activeCriteria); newRoot.Filter(activeCriteria);
// preload drawables as the ctor overhead is quite high currently. // preload drawables as the ctor overhead is quite high currently.
@ -90,7 +95,6 @@ namespace osu.Game.Screens.Select
}); });
})); }));
} }
}
private readonly List<float> yPositions = new List<float>(); private readonly List<float> yPositions = new List<float>();
private Cached itemsCache = new Cached(); private Cached itemsCache = new Cached();

View File

@ -1,6 +1,7 @@
// Copyright (c) 2007-2018 ppy Pty Ltd <contact@ppy.sh>. // Copyright (c) 2007-2018 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 System.Threading.Tasks;
using osu.Framework.Allocation; using osu.Framework.Allocation;
using osu.Framework.Audio; using osu.Framework.Audio;
using osu.Framework.Audio.Sample; using osu.Framework.Audio.Sample;
@ -45,7 +46,7 @@ namespace osu.Game.Screens.Select.Carousel
private SampleChannel sampleHover; private SampleChannel sampleHover;
[BackgroundDependencyLoader] [BackgroundDependencyLoader]
private void load(AudioManager audio, OsuColour colours) private async Task load(AudioManager audio, OsuColour colours)
{ {
InternalChild = borderContainer = new Container InternalChild = borderContainer = new Container
{ {
@ -68,7 +69,7 @@ namespace osu.Game.Screens.Select.Carousel
} }
}; };
sampleHover = audio.Sample.Get($@"SongSelect/song-ping-variation-{RNG.Next(1, 5)}"); sampleHover = await audio.Sample.GetAsync($@"SongSelect/song-ping-variation-{RNG.Next(1, 5)}");
hoverLayer.Colour = colours.Blue.Opacity(0.1f); hoverLayer.Colour = colours.Blue.Opacity(0.1f);
} }

View File

@ -1,6 +1,7 @@
// Copyright (c) 2007-2018 ppy Pty Ltd <contact@ppy.sh>. // Copyright (c) 2007-2018 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 System.Threading.Tasks;
using osu.Framework.Allocation; using osu.Framework.Allocation;
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Containers;
@ -35,20 +36,20 @@ namespace osu.Game.Screens.Select.Leaderboards
} }
[BackgroundDependencyLoader] [BackgroundDependencyLoader]
private void load(TextureStore textures) private async Task load(TextureStore textures)
{ {
this.textures = textures; this.textures = textures;
updateTexture(); await updateTexture();
} }
private void updateTexture() => rankSprite.Texture = textures.Get($@"Grades/{Rank.GetDescription()}"); private async Task updateTexture() => rankSprite.Texture = await textures.GetAsync($@"Grades/{Rank.GetDescription()}");
public void UpdateRank(ScoreRank newRank) public void UpdateRank(ScoreRank newRank)
{ {
Rank = newRank; Rank = newRank;
if (LoadState >= LoadState.Ready) if (LoadState >= LoadState.Ready)
updateTexture(); updateTexture().Wait();
} }
} }
} }

View File

@ -55,11 +55,11 @@ namespace osu.Game.Screens.Select
private readonly Bindable<IEnumerable<Mod>> selectedMods = new Bindable<IEnumerable<Mod>>(new Mod[] { }); private readonly Bindable<IEnumerable<Mod>> selectedMods = new Bindable<IEnumerable<Mod>>(new Mod[] { });
[BackgroundDependencyLoader(true)] [BackgroundDependencyLoader(true)]
private void load(OsuColour colours, AudioManager audio, BeatmapManager beatmaps, DialogOverlay dialogOverlay, Bindable<IEnumerable<Mod>> selectedMods) private async Task load(OsuColour colours, AudioManager audio, BeatmapManager beatmaps, DialogOverlay dialogOverlay, Bindable<IEnumerable<Mod>> selectedMods)
{ {
if (selectedMods != null) this.selectedMods.BindTo(selectedMods); if (selectedMods != null) this.selectedMods.BindTo(selectedMods);
sampleConfirm = audio.Sample.Get(@"SongSelect/confirm-selection"); sampleConfirm = await audio.Sample.GetAsync(@"SongSelect/confirm-selection");
Footer.AddButton(@"mods", colours.Yellow, modSelect, Key.F1, float.MaxValue); Footer.AddButton(@"mods", colours.Yellow, modSelect, Key.F1, float.MaxValue);

View File

@ -3,6 +3,7 @@
using System; using System;
using System.Linq; using System.Linq;
using System.Threading.Tasks;
using OpenTK; using OpenTK;
using OpenTK.Input; using OpenTK.Input;
using osu.Framework.Allocation; using osu.Framework.Allocation;
@ -198,7 +199,7 @@ namespace osu.Game.Screens.Select
} }
[BackgroundDependencyLoader(true)] [BackgroundDependencyLoader(true)]
private void load(BeatmapManager beatmaps, AudioManager audio, DialogOverlay dialog, OsuColour colours) private async Task load(BeatmapManager beatmaps, AudioManager audio, DialogOverlay dialog, OsuColour colours)
{ {
if (Footer != null) if (Footer != null)
{ {
@ -218,10 +219,10 @@ namespace osu.Game.Screens.Select
dialogOverlay = dialog; dialogOverlay = dialog;
sampleChangeDifficulty = audio.Sample.Get(@"SongSelect/select-difficulty"); sampleChangeDifficulty = await audio.Sample.GetAsync(@"SongSelect/select-difficulty");
sampleChangeBeatmap = audio.Sample.Get(@"SongSelect/select-expand"); sampleChangeBeatmap = await audio.Sample.GetAsync(@"SongSelect/select-expand");
Carousel.BeatmapSets = this.beatmaps.GetAllUsableBeatmapSetsEnumerable(); Carousel.LoadBeatmapSetsFromManager(this.beatmaps);
} }
public void Edit(BeatmapInfo beatmap) public void Edit(BeatmapInfo beatmap)

View File

@ -9,6 +9,7 @@ using osu.Framework.Graphics.Textures;
using osu.Framework.MathUtils; using osu.Framework.MathUtils;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Threading.Tasks;
namespace osu.Game.Screens.Tournament.Components namespace osu.Game.Screens.Tournament.Components
{ {
@ -75,9 +76,9 @@ namespace osu.Game.Screens.Tournament.Components
private int expiredCount; private int expiredCount;
[BackgroundDependencyLoader] [BackgroundDependencyLoader]
private void load(TextureStore textures) private async Task load(TextureStore textures)
{ {
texture = textures.Get("Drawings/visualiser-line"); texture = await textures.GetAsync("Drawings/visualiser-line");
} }
protected override void UpdateAfterChildren() protected override void UpdateAfterChildren()

View File

@ -53,7 +53,7 @@ namespace osu.Game.Screens.Tournament
dependencies = new DependencyContainer(base.CreateChildDependencies(parent)); dependencies = new DependencyContainer(base.CreateChildDependencies(parent));
[BackgroundDependencyLoader] [BackgroundDependencyLoader]
private void load(TextureStore textures, Storage storage) private async Task load(TextureStore textures, Storage storage)
{ {
this.storage = storage; this.storage = storage;
@ -87,7 +87,7 @@ namespace osu.Game.Screens.Tournament
{ {
RelativeSizeAxes = Axes.Both, RelativeSizeAxes = Axes.Both,
FillMode = FillMode.Fill, FillMode = FillMode.Fill,
Texture = textures.Get(@"Backgrounds/Drawings/background.png") Texture = await textures.GetAsync(@"Backgrounds/Drawings/background.png")
}, },
new FillFlowContainer new FillFlowContainer
{ {

View File

@ -4,6 +4,7 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks;
using osu.Framework.Allocation; using osu.Framework.Allocation;
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Containers;
@ -178,9 +179,9 @@ namespace osu.Game.Screens.Tournament
} }
[BackgroundDependencyLoader] [BackgroundDependencyLoader]
private void load(TextureStore textures) private async Task load(TextureStore textures)
{ {
flagSprite.Texture = textures.Get($@"Flags/{Team.FlagName}"); flagSprite.Texture = await textures.GetAsync($@"Flags/{Team.FlagName}");
} }
} }
} }

View File

@ -5,6 +5,7 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Diagnostics; using System.Diagnostics;
using System.Linq; using System.Linq;
using System.Threading.Tasks;
using osu.Framework.Allocation; using osu.Framework.Allocation;
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Framework.Graphics.Colour; using osu.Framework.Graphics.Colour;
@ -372,9 +373,9 @@ namespace osu.Game.Screens.Tournament
} }
[BackgroundDependencyLoader] [BackgroundDependencyLoader]
private void load(TextureStore textures) private async Task load(TextureStore textures)
{ {
flagSprite.Texture = textures.Get($@"Flags/{Team.FlagName}"); flagSprite.Texture = await textures.GetAsync($@"Flags/{Team.FlagName}");
} }
} }
} }

View File

@ -4,6 +4,7 @@
using System; using System;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Threading.Tasks;
using osu.Framework.Audio; using osu.Framework.Audio;
using osu.Framework.Audio.Sample; using osu.Framework.Audio.Sample;
using osu.Framework.Graphics; using osu.Framework.Graphics;
@ -108,10 +109,12 @@ namespace osu.Game.Skinning
return path == null ? null : underlyingStore.GetStream(path); return path == null ? null : underlyingStore.GetStream(path);
} }
byte[] IResourceStore<byte[]>.Get(string name) byte[] IResourceStore<byte[]>.Get(string name) => GetAsync(name).Result;
public Task<byte[]> GetAsync(string name)
{ {
string path = getPathForFile(name); string path = getPathForFile(name);
return path == null ? null : underlyingStore.Get(path); return path == null ? Task.FromResult<byte[]>(null) : underlyingStore.GetAsync(path);
} }
#region IDisposable Support #region IDisposable Support

View File

@ -2,6 +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 System; using System;
using System.Threading.Tasks;
using osu.Framework.Allocation; using osu.Framework.Allocation;
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Containers;
@ -24,14 +25,14 @@ namespace osu.Game.Users
} }
[BackgroundDependencyLoader] [BackgroundDependencyLoader]
private void load(TextureStore textures) private async Task load(TextureStore textures)
{ {
if (textures == null) if (textures == null)
throw new ArgumentNullException(nameof(textures)); throw new ArgumentNullException(nameof(textures));
Texture texture = null; Texture texture = null;
if (user != null && user.Id > 1) texture = textures.Get($@"https://a.ppy.sh/{user.Id}"); if (user != null && user.Id > 1) texture = await textures.GetAsync($@"https://a.ppy.sh/{user.Id}");
if (texture == null) texture = textures.Get(@"Online/avatar-guest"); if (texture == null) texture = await textures.GetAsync(@"Online/avatar-guest");
Add(new Sprite Add(new Sprite
{ {

View File

@ -2,6 +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 System; using System;
using System.Threading.Tasks;
using Newtonsoft.Json; using Newtonsoft.Json;
using osu.Framework.Allocation; using osu.Framework.Allocation;
using osu.Framework.Graphics; using osu.Framework.Graphics;
@ -44,7 +45,7 @@ namespace osu.Game.Users
country = value; country = value;
if (LoadState >= LoadState.Ready) if (LoadState >= LoadState.Ready)
sprite.Texture = getFlagTexture(); sprite.Texture = getFlagTexture().Result;
} }
} }
@ -64,15 +65,15 @@ namespace osu.Game.Users
} }
[BackgroundDependencyLoader] [BackgroundDependencyLoader]
private void load(TextureStore ts) private async Task load(TextureStore ts)
{ {
if (ts == null) if (ts == null)
throw new ArgumentNullException(nameof(ts)); throw new ArgumentNullException(nameof(ts));
textures = ts; textures = ts;
sprite.Texture = getFlagTexture(); sprite.Texture = await getFlagTexture();
} }
private Texture getFlagTexture() => textures.Get($@"Flags/{country?.FlagName ?? @"__"}"); private async Task<Texture> getFlagTexture() => await textures.GetAsync($@"Flags/{country?.FlagName ?? @"__"}");
} }
} }

View File

@ -2,6 +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 System; using System;
using System.Threading.Tasks;
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;
@ -18,13 +19,13 @@ namespace osu.Game.Users
} }
[BackgroundDependencyLoader] [BackgroundDependencyLoader]
private void load(TextureStore textures) private async Task load(TextureStore textures)
{ {
if (textures == null) if (textures == null)
throw new ArgumentNullException(nameof(textures)); throw new ArgumentNullException(nameof(textures));
if (!string.IsNullOrEmpty(user.CoverUrl)) if (!string.IsNullOrEmpty(user.CoverUrl))
Texture = textures.Get(user.CoverUrl); Texture = await textures.GetAsync(user.CoverUrl);
} }
} }
} }

View File

@ -15,10 +15,10 @@
</ItemGroup> </ItemGroup>
<ItemGroup Label="Package References"> <ItemGroup Label="Package References">
<PackageReference Include="Humanizer" Version="2.4.2" /> <PackageReference Include="Humanizer" Version="2.4.2" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="2.1.1" /> <PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="2.1.2" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite.Core" Version="2.1.1" /> <PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite.Core" Version="2.1.2" />
<PackageReference Include="Newtonsoft.Json" Version="11.0.2" /> <PackageReference Include="Newtonsoft.Json" Version="11.0.2" />
<PackageReference Include="ppy.osu.Framework" Version="2018.824.0" /> <PackageReference Include="ppy.osu.Framework" Version="2018.830.0" />
<PackageReference Include="SharpCompress" Version="0.22.0" /> <PackageReference Include="SharpCompress" Version="0.22.0" />
<PackageReference Include="NUnit" Version="3.10.1" /> <PackageReference Include="NUnit" Version="3.10.1" />
<PackageReference Include="SharpRaven" Version="2.4.0" /> <PackageReference Include="SharpRaven" Version="2.4.0" />

View File

@ -11,7 +11,7 @@
<ProjectReference Include="..\osu-resources\osu.Game.Resources\osu.Game.Resources.csproj" /> <ProjectReference Include="..\osu-resources\osu.Game.Resources\osu.Game.Resources.csproj" />
</ItemGroup> </ItemGroup>
<ItemGroup Label="Package References"> <ItemGroup Label="Package References">
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="2.1.1" /> <PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="2.1.2" />
<PackageReference Include="DeepEqual" Version="1.6.0" /> <PackageReference Include="DeepEqual" Version="1.6.0" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>