mirror of
https://github.com/osukey/osukey.git
synced 2025-06-05 12:57:39 +09:00
Fix type-to-sample mapping being applied too late
This commit is contained in:
parent
c00e6e29a6
commit
40c8378d81
@ -55,16 +55,8 @@ namespace osu.Game.Rulesets.Taiko.Objects.Drawables
|
|||||||
type.BindValueChanged(_ =>
|
type.BindValueChanged(_ =>
|
||||||
{
|
{
|
||||||
updateActionsFromType();
|
updateActionsFromType();
|
||||||
|
|
||||||
// will overwrite samples, should only be called on subsequent changes
|
|
||||||
// after the initial application.
|
|
||||||
updateSamplesFromTypeChange();
|
|
||||||
|
|
||||||
RecreatePieces();
|
RecreatePieces();
|
||||||
});
|
}, true);
|
||||||
|
|
||||||
// action update also has to happen immediately on application.
|
|
||||||
updateActionsFromType();
|
|
||||||
|
|
||||||
base.OnApply();
|
base.OnApply();
|
||||||
}
|
}
|
||||||
@ -92,24 +84,6 @@ namespace osu.Game.Rulesets.Taiko.Objects.Drawables
|
|||||||
type.Value = getRimSamples().Any() ? HitType.Rim : HitType.Centre;
|
type.Value = getRimSamples().Any() ? HitType.Rim : HitType.Centre;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateSamplesFromTypeChange()
|
|
||||||
{
|
|
||||||
var rimSamples = getRimSamples();
|
|
||||||
|
|
||||||
bool isRimType = HitObject.Type == HitType.Rim;
|
|
||||||
|
|
||||||
if (isRimType != rimSamples.Any())
|
|
||||||
{
|
|
||||||
if (isRimType)
|
|
||||||
HitObject.Samples.Add(new HitSampleInfo(HitSampleInfo.HIT_CLAP));
|
|
||||||
else
|
|
||||||
{
|
|
||||||
foreach (var sample in rimSamples)
|
|
||||||
HitObject.Samples.Remove(sample);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void updateActionsFromType()
|
private void updateActionsFromType()
|
||||||
{
|
{
|
||||||
HitActions =
|
HitActions =
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
|
// 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.
|
// See the LICENCE file in the repository root for full licence text.
|
||||||
|
|
||||||
|
using System.Linq;
|
||||||
using osu.Framework.Bindables;
|
using osu.Framework.Bindables;
|
||||||
|
using osu.Game.Audio;
|
||||||
|
|
||||||
namespace osu.Game.Rulesets.Taiko.Objects
|
namespace osu.Game.Rulesets.Taiko.Objects
|
||||||
{
|
{
|
||||||
@ -15,9 +17,36 @@ namespace osu.Game.Rulesets.Taiko.Objects
|
|||||||
public HitType Type
|
public HitType Type
|
||||||
{
|
{
|
||||||
get => TypeBindable.Value;
|
get => TypeBindable.Value;
|
||||||
set => TypeBindable.Value = value;
|
set
|
||||||
|
{
|
||||||
|
TypeBindable.Value = value;
|
||||||
|
updateSamplesFromType();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void updateSamplesFromType()
|
||||||
|
{
|
||||||
|
var rimSamples = getRimSamples();
|
||||||
|
|
||||||
|
bool isRimType = Type == HitType.Rim;
|
||||||
|
|
||||||
|
if (isRimType != rimSamples.Any())
|
||||||
|
{
|
||||||
|
if (isRimType)
|
||||||
|
Samples.Add(new HitSampleInfo(HitSampleInfo.HIT_CLAP));
|
||||||
|
else
|
||||||
|
{
|
||||||
|
foreach (var sample in rimSamples)
|
||||||
|
Samples.Remove(sample);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Returns an array of any samples which would cause this object to be a "rim" type hit.
|
||||||
|
/// </summary>
|
||||||
|
private HitSampleInfo[] getRimSamples() => Samples.Where(s => s.Name == HitSampleInfo.HIT_CLAP || s.Name == HitSampleInfo.HIT_WHISTLE).ToArray();
|
||||||
|
|
||||||
protected override StrongNestedHitObject CreateStrongNestedHit(double startTime) => new StrongNestedHit { StartTime = startTime };
|
protected override StrongNestedHitObject CreateStrongNestedHit(double startTime) => new StrongNestedHit { StartTime = startTime };
|
||||||
|
|
||||||
public class StrongNestedHit : StrongNestedHitObject
|
public class StrongNestedHit : StrongNestedHitObject
|
||||||
|
Loading…
x
Reference in New Issue
Block a user