mirror of
https://github.com/ppy/osu.git
synced 2025-01-13 13:32:54 +08:00
Make Textures
and Samples
read-only
This commit is contained in:
parent
6542f974f2
commit
05c7e09d79
@ -1,12 +1,21 @@
|
||||
// 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 System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using NUnit.Framework;
|
||||
using osu.Framework.Graphics.OpenGL.Textures;
|
||||
using osu.Framework.Audio;
|
||||
using osu.Framework.Graphics.Textures;
|
||||
using osu.Framework.IO.Stores;
|
||||
using osu.Game.Database;
|
||||
using osu.Game.IO;
|
||||
using osu.Game.Skinning;
|
||||
using SixLabors.ImageSharp;
|
||||
using SixLabors.ImageSharp.PixelFormats;
|
||||
|
||||
namespace osu.Game.Tests.NonVisual.Skinning
|
||||
{
|
||||
@ -71,7 +80,7 @@ namespace osu.Game.Tests.NonVisual.Skinning
|
||||
var texture = legacySkin.GetTexture(requestedComponent);
|
||||
|
||||
Assert.IsNotNull(texture);
|
||||
Assert.AreEqual(textureStore.Textures[expectedTexture], texture);
|
||||
Assert.AreEqual(textureStore.Textures[expectedTexture].Width, texture.Width);
|
||||
Assert.AreEqual(expectedScale, texture.ScaleAdjust);
|
||||
}
|
||||
|
||||
@ -88,23 +97,50 @@ namespace osu.Game.Tests.NonVisual.Skinning
|
||||
|
||||
private class TestLegacySkin : LegacySkin
|
||||
{
|
||||
public TestLegacySkin(TextureStore textureStore)
|
||||
: base(new SkinInfo(), null, null, string.Empty)
|
||||
public TestLegacySkin(IResourceStore<TextureUpload> textureStore)
|
||||
: base(new SkinInfo(), new TestResourceProvider(textureStore), null, string.Empty)
|
||||
{
|
||||
Textures = textureStore;
|
||||
}
|
||||
|
||||
private class TestResourceProvider : IStorageResourceProvider
|
||||
{
|
||||
private readonly IResourceStore<TextureUpload> textureStore;
|
||||
|
||||
public TestResourceProvider(IResourceStore<TextureUpload> textureStore)
|
||||
{
|
||||
this.textureStore = textureStore;
|
||||
}
|
||||
|
||||
public AudioManager AudioManager => null;
|
||||
public IResourceStore<byte[]> Files => null;
|
||||
public IResourceStore<byte[]> Resources => null;
|
||||
public RealmAccess RealmAccess => null;
|
||||
public IResourceStore<TextureUpload> CreateTextureLoaderStore(IResourceStore<byte[]> underlyingStore) => textureStore;
|
||||
}
|
||||
}
|
||||
|
||||
private class TestTextureStore : TextureStore
|
||||
private class TestTextureStore : IResourceStore<TextureUpload>
|
||||
{
|
||||
public readonly Dictionary<string, Texture> Textures;
|
||||
public readonly Dictionary<string, TextureUpload> Textures;
|
||||
|
||||
public TestTextureStore(params string[] fileNames)
|
||||
{
|
||||
Textures = fileNames.ToDictionary(fileName => fileName, fileName => new Texture(1, 1));
|
||||
// use an incrementing width to allow assertion matching on correct textures as they turn from uploads into actual textures.
|
||||
int width = 1;
|
||||
Textures = fileNames.ToDictionary(fileName => fileName, fileName => new TextureUpload(new Image<Rgba32>(width, width++)));
|
||||
}
|
||||
|
||||
public override Texture Get(string name, WrapMode wrapModeS, WrapMode wrapModeT) => Textures.GetValueOrDefault(name);
|
||||
public TextureUpload Get(string name) => Textures.GetValueOrDefault(name);
|
||||
|
||||
public Task<TextureUpload> GetAsync(string name, CancellationToken cancellationToken = new CancellationToken()) => Task.FromResult(Get(name));
|
||||
|
||||
public Stream GetStream(string name) => throw new NotImplementedException();
|
||||
|
||||
public IEnumerable<string> GetAvailableResources() => throw new NotImplementedException();
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -28,13 +28,13 @@ namespace osu.Game.Skinning
|
||||
/// A texture store which can be used to perform user file loops for this skin.
|
||||
/// </summary>
|
||||
[CanBeNull]
|
||||
protected TextureStore Textures { get; set; }
|
||||
protected TextureStore Textures { get; }
|
||||
|
||||
/// <summary>
|
||||
/// A sample store which can be used to perform user file loops for this skin.
|
||||
/// </summary>
|
||||
[CanBeNull]
|
||||
protected ISampleStore Samples { get; set; }
|
||||
protected ISampleStore Samples { get; }
|
||||
|
||||
public readonly Live<SkinInfo> SkinInfo;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user