Merge pull request #21541 from bdach/difficulty-bindable-regression

Fix extended values in difficulty adjust being truncated to 10 on beatmap change
This commit is contained in:
Dean Herbert 2022-12-07 15:05:07 +09:00 committed by GitHub
commit 70e0a04af8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 23 additions and 1 deletions

View File

@ -126,6 +126,21 @@ namespace osu.Game.Tests.Visual.UserInterface
checkBindableAtValue("Circle Size", 9); checkBindableAtValue("Circle Size", 9);
} }
[Test]
public void TestExtendedLimitsRetainedAfterBoundCopyCreation()
{
setExtendedLimits(true);
setSliderValue("Circle Size", 11);
checkSliderAtValue("Circle Size", 11);
checkBindableAtValue("Circle Size", 11);
AddStep("create bound copy", () => _ = modDifficultyAdjust.CircleSize.GetBoundCopy());
checkSliderAtValue("Circle Size", 11);
checkBindableAtValue("Circle Size", 11);
}
[Test] [Test]
public void TestResetToDefault() public void TestResetToDefault()
{ {

View File

@ -118,11 +118,18 @@ namespace osu.Game.Rulesets.Mods
if (!(them is DifficultyBindable otherDifficultyBindable)) if (!(them is DifficultyBindable otherDifficultyBindable))
throw new InvalidOperationException($"Cannot bind to a non-{nameof(DifficultyBindable)}."); throw new InvalidOperationException($"Cannot bind to a non-{nameof(DifficultyBindable)}.");
// ensure that MaxValue and ExtendedMaxValue are copied across first before continuing.
// not doing so may cause the value of CurrentNumber to be truncated to 10.
otherDifficultyBindable.CopyTo(this);
// set up mutual binding for ExtendedLimits to correctly set the upper bound of CurrentNumber.
ExtendedLimits.BindTarget = otherDifficultyBindable.ExtendedLimits; ExtendedLimits.BindTarget = otherDifficultyBindable.ExtendedLimits;
// the actual values need to be copied after the max value constraints. // set up mutual binding for CurrentNumber. this must happen after all of the above.
CurrentNumber.BindTarget = otherDifficultyBindable.CurrentNumber; CurrentNumber.BindTarget = otherDifficultyBindable.CurrentNumber;
// finish up the binding by setting up weak references via the base call.
// unfortunately this will call `.CopyTo()` again, but fixing that is problematic and messy.
base.BindTo(them); base.BindTo(them);
} }