// Copyright (c) ppy Pty Ltd . 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.Linq; using osu.Framework.Allocation; using osu.Framework.Graphics.Textures; using osu.Framework.Testing; using osu.Game.IO; using osu.Game.Rulesets; using osu.Game.Screens.Play; using osu.Game.Skinning; namespace osu.Game.Tests.Visual.Gameplay { /// /// Upscales all gameplay sprites by a huge amount, to aid in manually checking skin texture size limits /// on individual elements. /// /// /// The HUD is hidden as it does't really affect game balance if HUD elements are larger than they should be. /// public partial class TestScenePlayerMaxDimensions : TestSceneAllRulesetPlayers { protected override IReadOnlyDependencyContainer CreateChildDependencies(IReadOnlyDependencyContainer parent) { var dependencies = new DependencyContainer(base.CreateChildDependencies(parent)); // for now this only applies to legacy skins, as modern skins don't have texture-based gameplay elements yet. dependencies.CacheAs(new UpscaledLegacySkin(dependencies.Get())); return dependencies; } protected override void AddCheckSteps() { } protected override Player CreatePlayer(Ruleset ruleset) { var player = base.CreatePlayer(ruleset); player.OnLoadComplete += _ => { // this test scene focuses on gameplay elements, so let's hide the hud. var hudOverlay = player.ChildrenOfType().Single(); hudOverlay.ShowHud.Value = false; hudOverlay.ShowHud.Disabled = true; }; return player; } private class UpscaledLegacySkin : DefaultLegacySkin, ISkinSource { public UpscaledLegacySkin(IStorageResourceProvider resources) : base(resources) { } public event Action? SourceChanged { add { } remove { } } public override Texture? GetTexture(string componentName, WrapMode wrapModeS, WrapMode wrapModeT) { var texture = base.GetTexture(componentName, wrapModeS, wrapModeT); if (texture != null) texture.ScaleAdjust /= 40f; return texture; } public ISkin FindProvider(Func lookupFunction) => this; public IEnumerable AllSources => new[] { this }; } } }