mirror of
https://github.com/ppy/osu.git
synced 2025-02-28 02:03:02 +08:00
fix placement samples
This commit is contained in:
parent
5e86a01e5e
commit
df7a42a00e
osu.Game
@ -37,6 +37,11 @@ namespace osu.Game.Rulesets.Edit
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public bool AutomaticBankAssignment { get; set; }
|
public bool AutomaticBankAssignment { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Whether the sample addition bank should be taken from the previous hit objects.
|
||||||
|
/// </summary>
|
||||||
|
public bool AutomaticAdditionBankAssignment { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The <see cref="HitObject"/> that is being placed.
|
/// The <see cref="HitObject"/> that is being placed.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -157,26 +162,26 @@ namespace osu.Game.Rulesets.Edit
|
|||||||
}
|
}
|
||||||
|
|
||||||
var lastHitObject = getPreviousHitObject();
|
var lastHitObject = getPreviousHitObject();
|
||||||
|
|
||||||
if (AutomaticBankAssignment)
|
|
||||||
{
|
|
||||||
// Create samples based on the sample settings of the previous hit object
|
|
||||||
if (lastHitObject != null)
|
|
||||||
{
|
|
||||||
for (int i = 0; i < HitObject.Samples.Count; i++)
|
|
||||||
HitObject.Samples[i] = lastHitObject.CreateHitSampleInfo(HitObject.Samples[i].Name);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
var lastHitNormal = lastHitObject?.Samples?.FirstOrDefault(o => o.Name == HitSampleInfo.HIT_NORMAL);
|
var lastHitNormal = lastHitObject?.Samples?.FirstOrDefault(o => o.Name == HitSampleInfo.HIT_NORMAL);
|
||||||
|
|
||||||
|
if (AutomaticAdditionBankAssignment)
|
||||||
|
{
|
||||||
|
// Inherit the addition bank from the previous hit object
|
||||||
|
// If there is no previous addition, inherit from the normal sample
|
||||||
|
var lastAddition = lastHitObject?.Samples?.FirstOrDefault(o => o.Name != HitSampleInfo.HIT_NORMAL) ?? lastHitNormal;
|
||||||
|
|
||||||
|
if (lastAddition != null)
|
||||||
|
HitObject.Samples = HitObject.Samples.Select(s => s.Name != HitSampleInfo.HIT_NORMAL ? s.With(newBank: lastAddition.Bank) : s).ToList();
|
||||||
|
}
|
||||||
|
|
||||||
if (lastHitNormal != null)
|
if (lastHitNormal != null)
|
||||||
{
|
{
|
||||||
// Only inherit the volume from the previous hit object
|
if (AutomaticBankAssignment)
|
||||||
for (int i = 0; i < HitObject.Samples.Count; i++)
|
// Inherit the bank from the previous hit object
|
||||||
HitObject.Samples[i] = HitObject.Samples[i].With(newVolume: lastHitNormal.Volume);
|
HitObject.Samples = HitObject.Samples.Select(s => s.Name == HitSampleInfo.HIT_NORMAL ? s.With(newBank: lastHitNormal.Bank) : s).ToList();
|
||||||
}
|
|
||||||
|
// Inherit the volume from the previous hit object
|
||||||
|
HitObject.Samples = HitObject.Samples.Select(s => s.With(newVolume: lastHitNormal.Volume)).ToList();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (HitObject is IHasRepeats hasRepeats)
|
if (HitObject is IHasRepeats hasRepeats)
|
||||||
|
@ -89,6 +89,9 @@ namespace osu.Game.Screens.Edit.Compose.Components
|
|||||||
|
|
||||||
foreach (var kvp in SelectionHandler.SelectionBankStates)
|
foreach (var kvp in SelectionHandler.SelectionBankStates)
|
||||||
kvp.Value.BindValueChanged(_ => updatePlacementSamples());
|
kvp.Value.BindValueChanged(_ => updatePlacementSamples());
|
||||||
|
|
||||||
|
foreach (var kvp in SelectionHandler.SelectionAdditionBankStates)
|
||||||
|
kvp.Value.BindValueChanged(_ => updatePlacementSamples());
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void TransferBlueprintFor(HitObject hitObject, DrawableHitObject drawableObject)
|
protected override void TransferBlueprintFor(HitObject hitObject, DrawableHitObject drawableObject)
|
||||||
@ -177,6 +180,9 @@ namespace osu.Game.Screens.Edit.Compose.Components
|
|||||||
|
|
||||||
foreach (var kvp in SelectionHandler.SelectionBankStates)
|
foreach (var kvp in SelectionHandler.SelectionBankStates)
|
||||||
bankChanged(kvp.Key, kvp.Value.Value);
|
bankChanged(kvp.Key, kvp.Value.Value);
|
||||||
|
|
||||||
|
foreach (var kvp in SelectionHandler.SelectionAdditionBankStates)
|
||||||
|
additionBankChanged(kvp.Key, kvp.Value.Value);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void sampleChanged(string sampleName, TernaryState state)
|
private void sampleChanged(string sampleName, TernaryState state)
|
||||||
@ -208,7 +214,17 @@ namespace osu.Game.Screens.Edit.Compose.Components
|
|||||||
if (bankName == EditorSelectionHandler.HIT_BANK_AUTO)
|
if (bankName == EditorSelectionHandler.HIT_BANK_AUTO)
|
||||||
CurrentPlacement.AutomaticBankAssignment = state == TernaryState.True;
|
CurrentPlacement.AutomaticBankAssignment = state == TernaryState.True;
|
||||||
else if (state == TernaryState.True)
|
else if (state == TernaryState.True)
|
||||||
CurrentPlacement.HitObject.Samples = CurrentPlacement.HitObject.Samples.Select(s => s.With(newBank: bankName)).ToList();
|
CurrentPlacement.HitObject.Samples = CurrentPlacement.HitObject.Samples.Select(s => s.Name == HitSampleInfo.HIT_NORMAL ? s.With(newBank: bankName) : s).ToList();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void additionBankChanged(string bankName, TernaryState state)
|
||||||
|
{
|
||||||
|
if (CurrentPlacement == null) return;
|
||||||
|
|
||||||
|
if (bankName == EditorSelectionHandler.HIT_BANK_AUTO)
|
||||||
|
CurrentPlacement.AutomaticAdditionBankAssignment = state == TernaryState.True;
|
||||||
|
else if (state == TernaryState.True)
|
||||||
|
CurrentPlacement.HitObject.Samples = CurrentPlacement.HitObject.Samples.Select(s => s.Name != HitSampleInfo.HIT_NORMAL ? s.With(newBank: bankName) : s).ToList();
|
||||||
}
|
}
|
||||||
|
|
||||||
public readonly Bindable<TernaryState> NewCombo = new Bindable<TernaryState> { Description = "New Combo" };
|
public readonly Bindable<TernaryState> NewCombo = new Bindable<TernaryState> { Description = "New Combo" };
|
||||||
|
Loading…
Reference in New Issue
Block a user