mirror of
https://github.com/ppy/osu.git
synced 2024-11-11 10:33:30 +08:00
Merge pull request #20907 from cdwcgt/editor-background
Add ability to toggle background dim in editor
This commit is contained in:
commit
30700ee68b
@ -7,10 +7,12 @@ using System;
|
||||
using System.Linq;
|
||||
using NUnit.Framework;
|
||||
using osu.Framework.Allocation;
|
||||
using osu.Framework.Bindables;
|
||||
using osu.Framework.Extensions;
|
||||
using osu.Framework.Screens;
|
||||
using osu.Framework.Testing;
|
||||
using osu.Game.Beatmaps;
|
||||
using osu.Game.Configuration;
|
||||
using osu.Game.Rulesets;
|
||||
using osu.Game.Rulesets.Mods;
|
||||
using osu.Game.Rulesets.Osu;
|
||||
@ -21,7 +23,6 @@ using osu.Game.Screens.Edit.GameplayTest;
|
||||
using osu.Game.Screens.Play;
|
||||
using osu.Game.Storyboards;
|
||||
using osu.Game.Tests.Beatmaps.IO;
|
||||
using osuTK.Graphics;
|
||||
using osuTK.Input;
|
||||
|
||||
namespace osu.Game.Tests.Visual.Editing
|
||||
@ -40,6 +41,14 @@ namespace osu.Game.Tests.Visual.Editing
|
||||
|
||||
private BeatmapSetInfo importedBeatmapSet;
|
||||
|
||||
private Bindable<float> editorDim;
|
||||
|
||||
[BackgroundDependencyLoader]
|
||||
private void load(OsuConfigManager config)
|
||||
{
|
||||
editorDim = config.GetBindable<float>(OsuSetting.EditorDim);
|
||||
}
|
||||
|
||||
public override void SetUpSteps()
|
||||
{
|
||||
AddStep("import test beatmap", () => importedBeatmapSet = BeatmapImportHelper.LoadOszIntoOsu(game).GetResultSafely());
|
||||
@ -77,7 +86,7 @@ namespace osu.Game.Tests.Visual.Editing
|
||||
// this test cares about checking the background belonging to the editor specifically, so check that using reference equality
|
||||
// (as `.Equals()` cannot discern between the two, as they technically share the same database GUID).
|
||||
var background = this.ChildrenOfType<BackgroundScreenBeatmap>().Single(b => ReferenceEquals(b.Beatmap.BeatmapInfo, EditorBeatmap.BeatmapInfo));
|
||||
return background.Colour == Color4.DarkGray && background.BlurAmount.Value == 0;
|
||||
return background.DimWhenUserSettingsIgnored.Value == editorDim.Value && background.BlurAmount.Value == 0;
|
||||
});
|
||||
AddAssert("no mods selected", () => SelectedMods.Value.Count == 0);
|
||||
}
|
||||
@ -110,7 +119,7 @@ namespace osu.Game.Tests.Visual.Editing
|
||||
// this test cares about checking the background belonging to the editor specifically, so check that using reference equality
|
||||
// (as `.Equals()` cannot discern between the two, as they technically share the same database GUID).
|
||||
var background = this.ChildrenOfType<BackgroundScreenBeatmap>().Single(b => ReferenceEquals(b.Beatmap.BeatmapInfo, EditorBeatmap.BeatmapInfo));
|
||||
return background.Colour == Color4.DarkGray && background.BlurAmount.Value == 0;
|
||||
return background.DimWhenUserSettingsIgnored.Value == editorDim.Value && background.BlurAmount.Value == 0;
|
||||
});
|
||||
|
||||
AddStep("start track", () => EditorClock.Start());
|
||||
|
@ -171,7 +171,8 @@ namespace osu.Game.Configuration
|
||||
|
||||
SetDefault(OsuSetting.DiscordRichPresence, DiscordRichPresenceMode.Full);
|
||||
|
||||
SetDefault(OsuSetting.EditorWaveformOpacity, 0.25f);
|
||||
SetDefault(OsuSetting.EditorDim, 0.25f, 0f, 0.75f, 0.25f);
|
||||
SetDefault(OsuSetting.EditorWaveformOpacity, 0.25f, 0f, 1f, 0.25f);
|
||||
|
||||
SetDefault(OsuSetting.LastProcessedMetadataId, -1);
|
||||
}
|
||||
@ -288,6 +289,7 @@ namespace osu.Game.Configuration
|
||||
GameplayCursorDuringTouch,
|
||||
DimLevel,
|
||||
BlurLevel,
|
||||
EditorDim,
|
||||
LightenDuringBreaks,
|
||||
ShowStoryboard,
|
||||
KeyOverlay,
|
||||
|
@ -1,8 +1,6 @@
|
||||
// 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.
|
||||
|
||||
#nullable disable
|
||||
|
||||
using System;
|
||||
using osu.Framework.Allocation;
|
||||
using osu.Framework.Bindables;
|
||||
@ -46,15 +44,20 @@ namespace osu.Game.Graphics.Containers
|
||||
/// </summary>
|
||||
public bool ContentDisplayed { get; private set; }
|
||||
|
||||
protected Bindable<double> UserDimLevel { get; private set; }
|
||||
protected Bindable<double> UserDimLevel { get; private set; } = null!;
|
||||
|
||||
protected Bindable<bool> LightenDuringBreaks { get; private set; }
|
||||
/// <summary>
|
||||
/// The amount of dim to be used when <see cref="IgnoreUserSettings"/> is <c>true</c>.
|
||||
/// </summary>
|
||||
public Bindable<float> DimWhenUserSettingsIgnored { get; set; } = new Bindable<float>();
|
||||
|
||||
protected Bindable<bool> ShowStoryboard { get; private set; }
|
||||
protected Bindable<bool> LightenDuringBreaks { get; private set; } = null!;
|
||||
|
||||
protected Bindable<bool> ShowStoryboard { get; private set; } = null!;
|
||||
|
||||
private float breakLightening => LightenDuringBreaks.Value && IsBreakTime.Value ? BREAK_LIGHTEN_AMOUNT : 0;
|
||||
|
||||
protected float DimLevel => Math.Max(!IgnoreUserSettings.Value ? (float)UserDimLevel.Value - breakLightening : 0, 0);
|
||||
protected float DimLevel => Math.Max(!IgnoreUserSettings.Value ? (float)UserDimLevel.Value - breakLightening : DimWhenUserSettingsIgnored.Value, 0);
|
||||
|
||||
protected override Container<Drawable> Content => dimContent;
|
||||
|
||||
@ -76,6 +79,7 @@ namespace osu.Game.Graphics.Containers
|
||||
ShowStoryboard = config.GetBindable<bool>(OsuSetting.ShowStoryboard);
|
||||
|
||||
UserDimLevel.ValueChanged += _ => UpdateVisuals();
|
||||
DimWhenUserSettingsIgnored.ValueChanged += _ => UpdateVisuals();
|
||||
LightenDuringBreaks.ValueChanged += _ => UpdateVisuals();
|
||||
IsBreakTime.ValueChanged += _ => UpdateVisuals();
|
||||
ShowStoryboard.ValueChanged += _ => UpdateVisuals();
|
||||
|
@ -43,6 +43,11 @@ namespace osu.Game.Screens.Backgrounds
|
||||
/// </summary>
|
||||
public readonly Bindable<float> BlurAmount = new BindableFloat();
|
||||
|
||||
/// <summary>
|
||||
/// The amount of dim to be used when <see cref="IgnoreUserSettings"/> is <c>true</c>.
|
||||
/// </summary>
|
||||
public readonly Bindable<float> DimWhenUserSettingsIgnored = new Bindable<float>();
|
||||
|
||||
internal readonly IBindable<bool> IsBreakTime = new Bindable<bool>();
|
||||
|
||||
private readonly DimmableBackground dimmable;
|
||||
@ -58,6 +63,7 @@ namespace osu.Game.Screens.Backgrounds
|
||||
dimmable.IgnoreUserSettings.BindTo(IgnoreUserSettings);
|
||||
dimmable.IsBreakTime.BindTo(IsBreakTime);
|
||||
dimmable.BlurAmount.BindTo(BlurAmount);
|
||||
dimmable.DimWhenUserSettingsIgnored.BindTo(DimWhenUserSettingsIgnored);
|
||||
|
||||
StoryboardReplacesBackground.BindTo(dimmable.StoryboardReplacesBackground);
|
||||
}
|
||||
|
45
osu.Game/Screens/Edit/BackgroundDimMenuItem.cs
Normal file
45
osu.Game/Screens/Edit/BackgroundDimMenuItem.cs
Normal file
@ -0,0 +1,45 @@
|
||||
// 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.Bindables;
|
||||
using osu.Framework.Graphics.UserInterface;
|
||||
using osu.Game.Graphics.UserInterface;
|
||||
|
||||
namespace osu.Game.Screens.Edit
|
||||
{
|
||||
internal class BackgroundDimMenuItem : MenuItem
|
||||
{
|
||||
private readonly Bindable<float> backgroudDim;
|
||||
|
||||
private readonly Dictionary<float, TernaryStateRadioMenuItem> menuItemLookup = new Dictionary<float, TernaryStateRadioMenuItem>();
|
||||
|
||||
public BackgroundDimMenuItem(Bindable<float> backgroudDim)
|
||||
: base("Background dim")
|
||||
{
|
||||
Items = new[]
|
||||
{
|
||||
createMenuItem(0f),
|
||||
createMenuItem(0.25f),
|
||||
createMenuItem(0.5f),
|
||||
createMenuItem(0.75f),
|
||||
};
|
||||
|
||||
this.backgroudDim = backgroudDim;
|
||||
backgroudDim.BindValueChanged(dim =>
|
||||
{
|
||||
foreach (var kvp in menuItemLookup)
|
||||
kvp.Value.State.Value = kvp.Key == dim.NewValue ? TernaryState.True : TernaryState.False;
|
||||
}, true);
|
||||
}
|
||||
|
||||
private TernaryStateRadioMenuItem createMenuItem(float dim)
|
||||
{
|
||||
var item = new TernaryStateRadioMenuItem($"{dim * 100}%", MenuItemType.Standard, _ => updateOpacity(dim));
|
||||
menuItemLookup[dim] = item;
|
||||
return item;
|
||||
}
|
||||
|
||||
private void updateOpacity(float dim) => backgroudDim.Value = dim;
|
||||
}
|
||||
}
|
@ -1,8 +1,6 @@
|
||||
// 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.
|
||||
|
||||
#nullable disable
|
||||
|
||||
using System;
|
||||
using osu.Framework.Graphics.Sprites;
|
||||
using osu.Game.Beatmaps;
|
||||
|
@ -1,8 +1,6 @@
|
||||
// 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.
|
||||
|
||||
#nullable disable
|
||||
|
||||
using osu.Framework.Allocation;
|
||||
using osu.Framework.Graphics;
|
||||
using osu.Framework.Graphics.UserInterface;
|
||||
|
@ -1,8 +1,6 @@
|
||||
// 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.
|
||||
|
||||
#nullable disable
|
||||
|
||||
using System;
|
||||
using osu.Game.Graphics.UserInterface;
|
||||
|
||||
|
@ -1,8 +1,6 @@
|
||||
// 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.
|
||||
|
||||
#nullable disable
|
||||
|
||||
namespace osu.Game.Screens.Edit.Components.Menus
|
||||
{
|
||||
public class EditorMenuItemSpacer : EditorMenuItem
|
||||
|
@ -51,7 +51,6 @@ using osu.Game.Screens.Edit.Timing;
|
||||
using osu.Game.Screens.Edit.Verify;
|
||||
using osu.Game.Screens.Play;
|
||||
using osu.Game.Users;
|
||||
using osuTK.Graphics;
|
||||
using osuTK.Input;
|
||||
using CommonStrings = osu.Game.Resources.Localisation.Web.CommonStrings;
|
||||
|
||||
@ -176,6 +175,8 @@ namespace osu.Game.Screens.Edit
|
||||
[Resolved(canBeNull: true)]
|
||||
private OnScreenDisplay onScreenDisplay { get; set; }
|
||||
|
||||
private Bindable<float> editorBackgroundDim;
|
||||
|
||||
public Editor(EditorLoader loader = null)
|
||||
{
|
||||
this.loader = loader;
|
||||
@ -260,6 +261,8 @@ namespace osu.Game.Screens.Edit
|
||||
OsuMenuItem undoMenuItem;
|
||||
OsuMenuItem redoMenuItem;
|
||||
|
||||
editorBackgroundDim = config.GetBindable<float>(OsuSetting.EditorDim);
|
||||
|
||||
AddInternal(new OsuContextMenuContainer
|
||||
{
|
||||
RelativeSizeAxes = Axes.Both,
|
||||
@ -312,6 +315,7 @@ namespace osu.Game.Screens.Edit
|
||||
Items = new MenuItem[]
|
||||
{
|
||||
new WaveformOpacityMenuItem(config.GetBindable<float>(OsuSetting.EditorWaveformOpacity)),
|
||||
new BackgroundDimMenuItem(editorBackgroundDim),
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -331,6 +335,8 @@ namespace osu.Game.Screens.Edit
|
||||
|
||||
changeHandler?.CanUndo.BindValueChanged(v => undoMenuItem.Action.Disabled = !v.NewValue, true);
|
||||
changeHandler?.CanRedo.BindValueChanged(v => redoMenuItem.Action.Disabled = !v.NewValue, true);
|
||||
|
||||
editorBackgroundDim.BindValueChanged(_ => dimBackground());
|
||||
}
|
||||
|
||||
[Resolved]
|
||||
@ -630,10 +636,8 @@ namespace osu.Game.Screens.Edit
|
||||
{
|
||||
ApplyToBackground(b =>
|
||||
{
|
||||
// todo: temporary. we want to be applying dim using the UserDimContainer eventually.
|
||||
b.FadeColour(Color4.DarkGray, 500);
|
||||
|
||||
b.IgnoreUserSettings.Value = true;
|
||||
b.DimWhenUserSettingsIgnored.Value = editorBackgroundDim.Value;
|
||||
b.BlurAmount.Value = 0;
|
||||
});
|
||||
}
|
||||
@ -661,7 +665,11 @@ namespace osu.Game.Screens.Edit
|
||||
}
|
||||
}
|
||||
|
||||
ApplyToBackground(b => b.FadeColour(Color4.White, 500));
|
||||
ApplyToBackground(b =>
|
||||
{
|
||||
b.DimWhenUserSettingsIgnored.Value = 0;
|
||||
});
|
||||
|
||||
resetTrack();
|
||||
|
||||
refetchBeatmap();
|
||||
|
Loading…
Reference in New Issue
Block a user