mirror of
https://github.com/osukey/osukey.git
synced 2025-04-29 02:37:25 +09:00
Move OmitFirstBarLine
to TimingControlPoint
This commit is contained in:
parent
1250c1f0c1
commit
044b0604b2
@ -73,11 +73,10 @@ namespace osu.Game.Rulesets.Taiko.Tests
|
|||||||
beatmap.ControlPointInfo.Add(start_time, new TimingControlPoint
|
beatmap.ControlPointInfo.Add(start_time, new TimingControlPoint
|
||||||
{
|
{
|
||||||
BeatLength = beat_length,
|
BeatLength = beat_length,
|
||||||
TimeSignature = new TimeSignature(time_signature_numerator)
|
TimeSignature = new TimeSignature(time_signature_numerator),
|
||||||
|
OmitFirstBarLine = true
|
||||||
});
|
});
|
||||||
|
|
||||||
beatmap.ControlPointInfo.Add(start_time, new EffectControlPoint { OmitFirstBarLine = true });
|
|
||||||
|
|
||||||
var barlines = new BarLineGenerator<BarLine>(beatmap).BarLines;
|
var barlines = new BarLineGenerator<BarLine>(beatmap).BarLines;
|
||||||
|
|
||||||
AddAssert("first barline ommited", () => barlines.All(b => b.StartTime != start_time));
|
AddAssert("first barline ommited", () => barlines.All(b => b.StartTime != start_time));
|
||||||
|
@ -72,7 +72,6 @@ namespace osu.Game.Rulesets.Taiko.Beatmaps
|
|||||||
converted.ControlPointInfo.Add(hitObject.StartTime, new EffectControlPoint
|
converted.ControlPointInfo.Add(hitObject.StartTime, new EffectControlPoint
|
||||||
{
|
{
|
||||||
KiaiMode = currentEffectPoint.KiaiMode,
|
KiaiMode = currentEffectPoint.KiaiMode,
|
||||||
OmitFirstBarLine = currentEffectPoint.OmitFirstBarLine,
|
|
||||||
ScrollSpeed = lastScrollSpeed = nextScrollSpeed,
|
ScrollSpeed = lastScrollSpeed = nextScrollSpeed,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -13,15 +13,9 @@ namespace osu.Game.Beatmaps.ControlPoints
|
|||||||
public static readonly EffectControlPoint DEFAULT = new EffectControlPoint
|
public static readonly EffectControlPoint DEFAULT = new EffectControlPoint
|
||||||
{
|
{
|
||||||
KiaiModeBindable = { Disabled = true },
|
KiaiModeBindable = { Disabled = true },
|
||||||
OmitFirstBarLineBindable = { Disabled = true },
|
|
||||||
ScrollSpeedBindable = { Disabled = true }
|
ScrollSpeedBindable = { Disabled = true }
|
||||||
};
|
};
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Whether the first bar line of this control point is ignored.
|
|
||||||
/// </summary>
|
|
||||||
public readonly BindableBool OmitFirstBarLineBindable = new BindableBool();
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The relative scroll speed at this control point.
|
/// The relative scroll speed at this control point.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -43,15 +37,6 @@ namespace osu.Game.Beatmaps.ControlPoints
|
|||||||
|
|
||||||
public override Color4 GetRepresentingColour(OsuColour colours) => colours.Purple;
|
public override Color4 GetRepresentingColour(OsuColour colours) => colours.Purple;
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Whether the first bar line of this control point is ignored.
|
|
||||||
/// </summary>
|
|
||||||
public bool OmitFirstBarLine
|
|
||||||
{
|
|
||||||
get => OmitFirstBarLineBindable.Value;
|
|
||||||
set => OmitFirstBarLineBindable.Value = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Whether this control point enables Kiai mode.
|
/// Whether this control point enables Kiai mode.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -67,16 +52,13 @@ namespace osu.Game.Beatmaps.ControlPoints
|
|||||||
}
|
}
|
||||||
|
|
||||||
public override bool IsRedundant(ControlPoint? existing)
|
public override bool IsRedundant(ControlPoint? existing)
|
||||||
=> !OmitFirstBarLine
|
=> existing is EffectControlPoint existingEffect
|
||||||
&& existing is EffectControlPoint existingEffect
|
|
||||||
&& KiaiMode == existingEffect.KiaiMode
|
&& KiaiMode == existingEffect.KiaiMode
|
||||||
&& OmitFirstBarLine == existingEffect.OmitFirstBarLine
|
|
||||||
&& ScrollSpeed == existingEffect.ScrollSpeed;
|
&& ScrollSpeed == existingEffect.ScrollSpeed;
|
||||||
|
|
||||||
public override void CopyFrom(ControlPoint other)
|
public override void CopyFrom(ControlPoint other)
|
||||||
{
|
{
|
||||||
KiaiMode = ((EffectControlPoint)other).KiaiMode;
|
KiaiMode = ((EffectControlPoint)other).KiaiMode;
|
||||||
OmitFirstBarLine = ((EffectControlPoint)other).OmitFirstBarLine;
|
|
||||||
ScrollSpeed = ((EffectControlPoint)other).ScrollSpeed;
|
ScrollSpeed = ((EffectControlPoint)other).ScrollSpeed;
|
||||||
|
|
||||||
base.CopyFrom(other);
|
base.CopyFrom(other);
|
||||||
@ -88,10 +70,9 @@ namespace osu.Game.Beatmaps.ControlPoints
|
|||||||
|
|
||||||
public bool Equals(EffectControlPoint? other)
|
public bool Equals(EffectControlPoint? other)
|
||||||
=> base.Equals(other)
|
=> base.Equals(other)
|
||||||
&& OmitFirstBarLine == other.OmitFirstBarLine
|
|
||||||
&& ScrollSpeed == other.ScrollSpeed
|
&& ScrollSpeed == other.ScrollSpeed
|
||||||
&& KiaiMode == other.KiaiMode;
|
&& KiaiMode == other.KiaiMode;
|
||||||
|
|
||||||
public override int GetHashCode() => HashCode.Combine(base.GetHashCode(), OmitFirstBarLine, ScrollSpeed, KiaiMode);
|
public override int GetHashCode() => HashCode.Combine(base.GetHashCode(), ScrollSpeed, KiaiMode);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,6 +16,11 @@ namespace osu.Game.Beatmaps.ControlPoints
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public readonly Bindable<TimeSignature> TimeSignatureBindable = new Bindable<TimeSignature>(TimeSignature.SimpleQuadruple);
|
public readonly Bindable<TimeSignature> TimeSignatureBindable = new Bindable<TimeSignature>(TimeSignature.SimpleQuadruple);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Whether the first bar line of this control point is ignored.
|
||||||
|
/// </summary>
|
||||||
|
public readonly BindableBool OmitFirstBarLineBindable = new BindableBool();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Default length of a beat in milliseconds. Used whenever there is no beatmap or track playing.
|
/// Default length of a beat in milliseconds. Used whenever there is no beatmap or track playing.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -30,6 +35,7 @@ namespace osu.Game.Beatmaps.ControlPoints
|
|||||||
Value = default_beat_length,
|
Value = default_beat_length,
|
||||||
Disabled = true
|
Disabled = true
|
||||||
},
|
},
|
||||||
|
OmitFirstBarLineBindable = { Disabled = true },
|
||||||
TimeSignatureBindable = { Disabled = true }
|
TimeSignatureBindable = { Disabled = true }
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -42,6 +48,15 @@ namespace osu.Game.Beatmaps.ControlPoints
|
|||||||
set => TimeSignatureBindable.Value = value;
|
set => TimeSignatureBindable.Value = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Whether the first bar line of this control point is ignored.
|
||||||
|
/// </summary>
|
||||||
|
public bool OmitFirstBarLine
|
||||||
|
{
|
||||||
|
get => OmitFirstBarLineBindable.Value;
|
||||||
|
set => OmitFirstBarLineBindable.Value = value;
|
||||||
|
}
|
||||||
|
|
||||||
public const double DEFAULT_BEAT_LENGTH = 1000;
|
public const double DEFAULT_BEAT_LENGTH = 1000;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -73,6 +88,7 @@ namespace osu.Game.Beatmaps.ControlPoints
|
|||||||
public override void CopyFrom(ControlPoint other)
|
public override void CopyFrom(ControlPoint other)
|
||||||
{
|
{
|
||||||
TimeSignature = ((TimingControlPoint)other).TimeSignature;
|
TimeSignature = ((TimingControlPoint)other).TimeSignature;
|
||||||
|
OmitFirstBarLine = ((TimingControlPoint)other).OmitFirstBarLine;
|
||||||
BeatLength = ((TimingControlPoint)other).BeatLength;
|
BeatLength = ((TimingControlPoint)other).BeatLength;
|
||||||
|
|
||||||
base.CopyFrom(other);
|
base.CopyFrom(other);
|
||||||
@ -85,8 +101,9 @@ namespace osu.Game.Beatmaps.ControlPoints
|
|||||||
public bool Equals(TimingControlPoint? other)
|
public bool Equals(TimingControlPoint? other)
|
||||||
=> base.Equals(other)
|
=> base.Equals(other)
|
||||||
&& TimeSignature.Equals(other.TimeSignature)
|
&& TimeSignature.Equals(other.TimeSignature)
|
||||||
|
&& OmitFirstBarLine == other.OmitFirstBarLine
|
||||||
&& BeatLength.Equals(other.BeatLength);
|
&& BeatLength.Equals(other.BeatLength);
|
||||||
|
|
||||||
public override int GetHashCode() => HashCode.Combine(base.GetHashCode(), TimeSignature, BeatLength);
|
public override int GetHashCode() => HashCode.Combine(base.GetHashCode(), TimeSignature, BeatLength, OmitFirstBarLine);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -431,6 +431,7 @@ namespace osu.Game.Beatmaps.Formats
|
|||||||
|
|
||||||
controlPoint.BeatLength = beatLength;
|
controlPoint.BeatLength = beatLength;
|
||||||
controlPoint.TimeSignature = timeSignature;
|
controlPoint.TimeSignature = timeSignature;
|
||||||
|
controlPoint.OmitFirstBarLine = omitFirstBarSignature;
|
||||||
|
|
||||||
addControlPoint(time, controlPoint, true);
|
addControlPoint(time, controlPoint, true);
|
||||||
}
|
}
|
||||||
@ -447,7 +448,6 @@ namespace osu.Game.Beatmaps.Formats
|
|||||||
var effectPoint = new EffectControlPoint
|
var effectPoint = new EffectControlPoint
|
||||||
{
|
{
|
||||||
KiaiMode = kiaiMode,
|
KiaiMode = kiaiMode,
|
||||||
OmitFirstBarLine = omitFirstBarSignature,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// osu!taiko and osu!mania use effect points rather than difficulty points for scroll speed adjustments.
|
// osu!taiko and osu!mania use effect points rather than difficulty points for scroll speed adjustments.
|
||||||
|
@ -222,6 +222,7 @@ namespace osu.Game.Beatmaps.Formats
|
|||||||
{
|
{
|
||||||
var samplePoint = legacyControlPoints.SamplePointAt(time);
|
var samplePoint = legacyControlPoints.SamplePointAt(time);
|
||||||
var effectPoint = legacyControlPoints.EffectPointAt(time);
|
var effectPoint = legacyControlPoints.EffectPointAt(time);
|
||||||
|
var timingPoint = legacyControlPoints.TimingPointAt(time);
|
||||||
|
|
||||||
// Apply the control point to a hit sample to uncover legacy properties (e.g. suffix)
|
// Apply the control point to a hit sample to uncover legacy properties (e.g. suffix)
|
||||||
HitSampleInfo tempHitSample = samplePoint.ApplyTo(new ConvertHitObjectParser.LegacyHitSampleInfo(string.Empty));
|
HitSampleInfo tempHitSample = samplePoint.ApplyTo(new ConvertHitObjectParser.LegacyHitSampleInfo(string.Empty));
|
||||||
@ -230,10 +231,10 @@ namespace osu.Game.Beatmaps.Formats
|
|||||||
LegacyEffectFlags effectFlags = LegacyEffectFlags.None;
|
LegacyEffectFlags effectFlags = LegacyEffectFlags.None;
|
||||||
if (effectPoint.KiaiMode)
|
if (effectPoint.KiaiMode)
|
||||||
effectFlags |= LegacyEffectFlags.Kiai;
|
effectFlags |= LegacyEffectFlags.Kiai;
|
||||||
if (effectPoint.OmitFirstBarLine)
|
if (timingPoint.OmitFirstBarLine)
|
||||||
effectFlags |= LegacyEffectFlags.OmitFirstBarLine;
|
effectFlags |= LegacyEffectFlags.OmitFirstBarLine;
|
||||||
|
|
||||||
writer.Write(FormattableString.Invariant($"{legacyControlPoints.TimingPointAt(time).TimeSignature.Numerator},"));
|
writer.Write(FormattableString.Invariant($"{timingPoint.TimeSignature.Numerator},"));
|
||||||
writer.Write(FormattableString.Invariant($"{(int)toLegacySampleBank(tempHitSample.Bank)},"));
|
writer.Write(FormattableString.Invariant($"{(int)toLegacySampleBank(tempHitSample.Bank)},"));
|
||||||
writer.Write(FormattableString.Invariant($"{toLegacyCustomSampleBank(tempHitSample)},"));
|
writer.Write(FormattableString.Invariant($"{toLegacyCustomSampleBank(tempHitSample)},"));
|
||||||
writer.Write(FormattableString.Invariant($"{tempHitSample.Volume},"));
|
writer.Write(FormattableString.Invariant($"{tempHitSample.Volume},"));
|
||||||
|
@ -114,7 +114,7 @@ namespace osu.Game.Graphics.Containers
|
|||||||
while (beatLength < MinimumBeatLength)
|
while (beatLength < MinimumBeatLength)
|
||||||
beatLength *= 2;
|
beatLength *= 2;
|
||||||
|
|
||||||
int beatIndex = (int)((currentTrackTime - timingPoint.Time) / beatLength) - (effectPoint.OmitFirstBarLine ? 1 : 0);
|
int beatIndex = (int)((currentTrackTime - timingPoint.Time) / beatLength) - (timingPoint.OmitFirstBarLine ? 1 : 0);
|
||||||
|
|
||||||
// The beats before the start of the first control point are off by 1, this should do the trick
|
// The beats before the start of the first control point are off by 1, this should do the trick
|
||||||
if (currentTrackTime < timingPoint.Time)
|
if (currentTrackTime < timingPoint.Time)
|
||||||
|
@ -38,7 +38,6 @@ namespace osu.Game.Rulesets.Objects
|
|||||||
for (int i = 0; i < timingPoints.Count; i++)
|
for (int i = 0; i < timingPoints.Count; i++)
|
||||||
{
|
{
|
||||||
TimingControlPoint currentTimingPoint = timingPoints[i];
|
TimingControlPoint currentTimingPoint = timingPoints[i];
|
||||||
EffectControlPoint currentEffectPoint = beatmap.ControlPointInfo.EffectPointAt(currentTimingPoint.Time);
|
|
||||||
int currentBeat = 0;
|
int currentBeat = 0;
|
||||||
|
|
||||||
// Don't generate barlines before the hit object or t=0 (whichever is earliest). Some beatmaps use very unrealistic values here (although none are ranked).
|
// Don't generate barlines before the hit object or t=0 (whichever is earliest). Some beatmaps use very unrealistic values here (although none are ranked).
|
||||||
@ -66,7 +65,7 @@ namespace osu.Game.Rulesets.Objects
|
|||||||
startTime = currentTimingPoint.Time + barCount * barLength;
|
startTime = currentTimingPoint.Time + barCount * barLength;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (currentEffectPoint.OmitFirstBarLine)
|
if (currentTimingPoint.OmitFirstBarLine)
|
||||||
{
|
{
|
||||||
startTime += barLength;
|
startTime += barLength;
|
||||||
}
|
}
|
||||||
|
@ -14,7 +14,6 @@ namespace osu.Game.Screens.Edit.Timing
|
|||||||
internal partial class EffectSection : Section<EffectControlPoint>
|
internal partial class EffectSection : Section<EffectControlPoint>
|
||||||
{
|
{
|
||||||
private LabelledSwitchButton kiai = null!;
|
private LabelledSwitchButton kiai = null!;
|
||||||
private LabelledSwitchButton omitBarLine = null!;
|
|
||||||
|
|
||||||
private SliderWithTextBoxInput<double> scrollSpeedSlider = null!;
|
private SliderWithTextBoxInput<double> scrollSpeedSlider = null!;
|
||||||
|
|
||||||
@ -24,7 +23,6 @@ namespace osu.Game.Screens.Edit.Timing
|
|||||||
Flow.AddRange(new Drawable[]
|
Flow.AddRange(new Drawable[]
|
||||||
{
|
{
|
||||||
kiai = new LabelledSwitchButton { Label = "Kiai Time" },
|
kiai = new LabelledSwitchButton { Label = "Kiai Time" },
|
||||||
omitBarLine = new LabelledSwitchButton { Label = "Skip Bar Line" },
|
|
||||||
scrollSpeedSlider = new SliderWithTextBoxInput<double>("Scroll Speed")
|
scrollSpeedSlider = new SliderWithTextBoxInput<double>("Scroll Speed")
|
||||||
{
|
{
|
||||||
Current = new EffectControlPoint().ScrollSpeedBindable,
|
Current = new EffectControlPoint().ScrollSpeedBindable,
|
||||||
@ -38,7 +36,6 @@ namespace osu.Game.Screens.Edit.Timing
|
|||||||
base.LoadComplete();
|
base.LoadComplete();
|
||||||
|
|
||||||
kiai.Current.BindValueChanged(_ => saveChanges());
|
kiai.Current.BindValueChanged(_ => saveChanges());
|
||||||
omitBarLine.Current.BindValueChanged(_ => saveChanges());
|
|
||||||
scrollSpeedSlider.Current.BindValueChanged(_ => saveChanges());
|
scrollSpeedSlider.Current.BindValueChanged(_ => saveChanges());
|
||||||
|
|
||||||
var drawableRuleset = Beatmap.BeatmapInfo.Ruleset.CreateInstance().CreateDrawableRulesetWith(Beatmap.PlayableBeatmap);
|
var drawableRuleset = Beatmap.BeatmapInfo.Ruleset.CreateInstance().CreateDrawableRulesetWith(Beatmap.PlayableBeatmap);
|
||||||
@ -60,7 +57,6 @@ namespace osu.Game.Screens.Edit.Timing
|
|||||||
isRebinding = true;
|
isRebinding = true;
|
||||||
|
|
||||||
kiai.Current = point.NewValue.KiaiModeBindable;
|
kiai.Current = point.NewValue.KiaiModeBindable;
|
||||||
omitBarLine.Current = point.NewValue.OmitFirstBarLineBindable;
|
|
||||||
scrollSpeedSlider.Current = point.NewValue.ScrollSpeedBindable;
|
scrollSpeedSlider.Current = point.NewValue.ScrollSpeedBindable;
|
||||||
|
|
||||||
isRebinding = false;
|
isRebinding = false;
|
||||||
@ -74,7 +70,6 @@ namespace osu.Game.Screens.Edit.Timing
|
|||||||
return new EffectControlPoint
|
return new EffectControlPoint
|
||||||
{
|
{
|
||||||
KiaiMode = reference.KiaiMode,
|
KiaiMode = reference.KiaiMode,
|
||||||
OmitFirstBarLine = reference.OmitFirstBarLine,
|
|
||||||
ScrollSpeed = reference.ScrollSpeed,
|
ScrollSpeed = reference.ScrollSpeed,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -11,18 +11,15 @@ namespace osu.Game.Screens.Edit.Timing.RowAttributes
|
|||||||
public partial class EffectRowAttribute : RowAttribute
|
public partial class EffectRowAttribute : RowAttribute
|
||||||
{
|
{
|
||||||
private readonly Bindable<bool> kiaiMode;
|
private readonly Bindable<bool> kiaiMode;
|
||||||
private readonly Bindable<bool> omitBarLine;
|
|
||||||
private readonly BindableNumber<double> scrollSpeed;
|
private readonly BindableNumber<double> scrollSpeed;
|
||||||
|
|
||||||
private AttributeText kiaiModeBubble = null!;
|
private AttributeText kiaiModeBubble = null!;
|
||||||
private AttributeText omitBarLineBubble = null!;
|
|
||||||
private AttributeText text = null!;
|
private AttributeText text = null!;
|
||||||
|
|
||||||
public EffectRowAttribute(EffectControlPoint effect)
|
public EffectRowAttribute(EffectControlPoint effect)
|
||||||
: base(effect, "effect")
|
: base(effect, "effect")
|
||||||
{
|
{
|
||||||
kiaiMode = effect.KiaiModeBindable.GetBoundCopy();
|
kiaiMode = effect.KiaiModeBindable.GetBoundCopy();
|
||||||
omitBarLine = effect.OmitFirstBarLineBindable.GetBoundCopy();
|
|
||||||
scrollSpeed = effect.ScrollSpeedBindable.GetBoundCopy();
|
scrollSpeed = effect.ScrollSpeedBindable.GetBoundCopy();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -37,11 +34,9 @@ namespace osu.Game.Screens.Edit.Timing.RowAttributes
|
|||||||
},
|
},
|
||||||
text = new AttributeText(Point) { Width = 45 },
|
text = new AttributeText(Point) { Width = 45 },
|
||||||
kiaiModeBubble = new AttributeText(Point) { Text = "kiai" },
|
kiaiModeBubble = new AttributeText(Point) { Text = "kiai" },
|
||||||
omitBarLineBubble = new AttributeText(Point) { Text = "no barline" },
|
|
||||||
});
|
});
|
||||||
|
|
||||||
kiaiMode.BindValueChanged(enabled => kiaiModeBubble.FadeTo(enabled.NewValue ? 1 : 0), true);
|
kiaiMode.BindValueChanged(enabled => kiaiModeBubble.FadeTo(enabled.NewValue ? 1 : 0), true);
|
||||||
omitBarLine.BindValueChanged(enabled => omitBarLineBubble.FadeTo(enabled.NewValue ? 1 : 0), true);
|
|
||||||
scrollSpeed.BindValueChanged(_ => updateText(), true);
|
scrollSpeed.BindValueChanged(_ => updateText(), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
using osu.Framework.Allocation;
|
using osu.Framework.Allocation;
|
||||||
using osu.Framework.Bindables;
|
using osu.Framework.Bindables;
|
||||||
using osu.Framework.Extensions;
|
using osu.Framework.Extensions;
|
||||||
|
using osu.Framework.Graphics;
|
||||||
using osu.Game.Beatmaps.ControlPoints;
|
using osu.Game.Beatmaps.ControlPoints;
|
||||||
using osu.Game.Beatmaps.Timing;
|
using osu.Game.Beatmaps.Timing;
|
||||||
using osu.Game.Graphics.Sprites;
|
using osu.Game.Graphics.Sprites;
|
||||||
@ -14,24 +15,32 @@ namespace osu.Game.Screens.Edit.Timing.RowAttributes
|
|||||||
public partial class TimingRowAttribute : RowAttribute
|
public partial class TimingRowAttribute : RowAttribute
|
||||||
{
|
{
|
||||||
private readonly BindableNumber<double> beatLength;
|
private readonly BindableNumber<double> beatLength;
|
||||||
|
private readonly Bindable<bool> omitBarLine;
|
||||||
private readonly Bindable<TimeSignature> timeSignature;
|
private readonly Bindable<TimeSignature> timeSignature;
|
||||||
|
private AttributeText omitBarLineBubble = null!;
|
||||||
private OsuSpriteText text = null!;
|
private OsuSpriteText text = null!;
|
||||||
|
|
||||||
public TimingRowAttribute(TimingControlPoint timing)
|
public TimingRowAttribute(TimingControlPoint timing)
|
||||||
: base(timing, "timing")
|
: base(timing, "timing")
|
||||||
{
|
{
|
||||||
timeSignature = timing.TimeSignatureBindable.GetBoundCopy();
|
timeSignature = timing.TimeSignatureBindable.GetBoundCopy();
|
||||||
|
omitBarLine = timing.OmitFirstBarLineBindable.GetBoundCopy();
|
||||||
beatLength = timing.BeatLengthBindable.GetBoundCopy();
|
beatLength = timing.BeatLengthBindable.GetBoundCopy();
|
||||||
}
|
}
|
||||||
|
|
||||||
[BackgroundDependencyLoader]
|
[BackgroundDependencyLoader]
|
||||||
private void load(OverlayColourProvider colourProvider)
|
private void load(OverlayColourProvider colourProvider)
|
||||||
{
|
{
|
||||||
Content.Add(text = new AttributeText(Point));
|
Content.AddRange(new[]
|
||||||
|
{
|
||||||
|
text = new AttributeText(Point),
|
||||||
|
omitBarLineBubble = new AttributeText(Point) { Text = "no barline" },
|
||||||
|
});
|
||||||
|
|
||||||
Background.Colour = colourProvider.Background4;
|
Background.Colour = colourProvider.Background4;
|
||||||
|
|
||||||
timeSignature.BindValueChanged(_ => updateText());
|
timeSignature.BindValueChanged(_ => updateText());
|
||||||
|
omitBarLine.BindValueChanged(enabled => omitBarLineBubble.FadeTo(enabled.NewValue ? 1 : 0), true);
|
||||||
beatLength.BindValueChanged(_ => updateText(), true);
|
beatLength.BindValueChanged(_ => updateText(), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -12,6 +12,7 @@ namespace osu.Game.Screens.Edit.Timing
|
|||||||
internal partial class TimingSection : Section<TimingControlPoint>
|
internal partial class TimingSection : Section<TimingControlPoint>
|
||||||
{
|
{
|
||||||
private LabelledTimeSignature timeSignature = null!;
|
private LabelledTimeSignature timeSignature = null!;
|
||||||
|
private LabelledSwitchButton omitBarLine = null!;
|
||||||
private BPMTextBox bpmTextEntry = null!;
|
private BPMTextBox bpmTextEntry = null!;
|
||||||
|
|
||||||
[BackgroundDependencyLoader]
|
[BackgroundDependencyLoader]
|
||||||
@ -24,7 +25,8 @@ namespace osu.Game.Screens.Edit.Timing
|
|||||||
timeSignature = new LabelledTimeSignature
|
timeSignature = new LabelledTimeSignature
|
||||||
{
|
{
|
||||||
Label = "Time Signature"
|
Label = "Time Signature"
|
||||||
}
|
},
|
||||||
|
omitBarLine = new LabelledSwitchButton { Label = "Skip Bar Line" },
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -33,6 +35,7 @@ namespace osu.Game.Screens.Edit.Timing
|
|||||||
base.LoadComplete();
|
base.LoadComplete();
|
||||||
|
|
||||||
bpmTextEntry.Current.BindValueChanged(_ => saveChanges());
|
bpmTextEntry.Current.BindValueChanged(_ => saveChanges());
|
||||||
|
omitBarLine.Current.BindValueChanged(_ => saveChanges());
|
||||||
timeSignature.Current.BindValueChanged(_ => saveChanges());
|
timeSignature.Current.BindValueChanged(_ => saveChanges());
|
||||||
|
|
||||||
void saveChanges()
|
void saveChanges()
|
||||||
@ -51,6 +54,7 @@ namespace osu.Game.Screens.Edit.Timing
|
|||||||
|
|
||||||
bpmTextEntry.Bindable = point.NewValue.BeatLengthBindable;
|
bpmTextEntry.Bindable = point.NewValue.BeatLengthBindable;
|
||||||
timeSignature.Current = point.NewValue.TimeSignatureBindable;
|
timeSignature.Current = point.NewValue.TimeSignatureBindable;
|
||||||
|
omitBarLine.Current = point.NewValue.OmitFirstBarLineBindable;
|
||||||
|
|
||||||
isRebinding = false;
|
isRebinding = false;
|
||||||
}
|
}
|
||||||
@ -63,7 +67,8 @@ namespace osu.Game.Screens.Edit.Timing
|
|||||||
return new TimingControlPoint
|
return new TimingControlPoint
|
||||||
{
|
{
|
||||||
BeatLength = reference.BeatLength,
|
BeatLength = reference.BeatLength,
|
||||||
TimeSignature = reference.TimeSignature
|
TimeSignature = reference.TimeSignature,
|
||||||
|
OmitFirstBarLine = reference.OmitFirstBarLine,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user