mirror of
https://github.com/ppy/osu.git
synced 2025-01-28 20:32:55 +08:00
Merge pull request #1993 from smoogipoo/better-slider-objects
Make slider tails count towards the slider's judgement
This commit is contained in:
commit
080ed66f99
13
osu.Game.Rulesets.Osu/Judgements/OsuSliderTailJudgement.cs
Normal file
13
osu.Game.Rulesets.Osu/Judgements/OsuSliderTailJudgement.cs
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
// Copyright (c) 2007-2018 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
|
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
|
||||||
|
|
||||||
|
using osu.Game.Rulesets.Scoring;
|
||||||
|
|
||||||
|
namespace osu.Game.Rulesets.Osu.Judgements
|
||||||
|
{
|
||||||
|
public class OsuSliderTailJudgement : OsuJudgement
|
||||||
|
{
|
||||||
|
public override bool AffectsCombo => false;
|
||||||
|
protected override int NumericResultFor(HitResult result) => 0;
|
||||||
|
}
|
||||||
|
}
|
@ -18,14 +18,9 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables
|
|||||||
public class DrawableSlider : DrawableOsuHitObject, IDrawableHitObjectWithProxiedApproach
|
public class DrawableSlider : DrawableOsuHitObject, IDrawableHitObjectWithProxiedApproach
|
||||||
{
|
{
|
||||||
private readonly Slider slider;
|
private readonly Slider slider;
|
||||||
|
|
||||||
public readonly DrawableHitCircle InitialCircle;
|
|
||||||
|
|
||||||
private readonly List<Drawable> components = new List<Drawable>();
|
private readonly List<Drawable> components = new List<Drawable>();
|
||||||
|
|
||||||
private readonly Container<DrawableSliderTick> ticks;
|
public readonly DrawableHitCircle HeadCircle;
|
||||||
private readonly Container<DrawableRepeatPoint> repeatPoints;
|
|
||||||
|
|
||||||
public readonly SliderBody Body;
|
public readonly SliderBody Body;
|
||||||
public readonly SliderBall Ball;
|
public readonly SliderBall Ball;
|
||||||
|
|
||||||
@ -34,6 +29,10 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables
|
|||||||
{
|
{
|
||||||
slider = s;
|
slider = s;
|
||||||
|
|
||||||
|
DrawableSliderTail tail;
|
||||||
|
Container<DrawableSliderTick> ticks;
|
||||||
|
Container<DrawableRepeatPoint> repeatPoints;
|
||||||
|
|
||||||
Children = new Drawable[]
|
Children = new Drawable[]
|
||||||
{
|
{
|
||||||
Body = new SliderBody(s)
|
Body = new SliderBody(s)
|
||||||
@ -51,27 +50,17 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables
|
|||||||
AlwaysPresent = true,
|
AlwaysPresent = true,
|
||||||
Alpha = 0
|
Alpha = 0
|
||||||
},
|
},
|
||||||
InitialCircle = new DrawableHitCircle(new HitCircle
|
HeadCircle = new DrawableHitCircle(s.HeadCircle),
|
||||||
{
|
tail = new DrawableSliderTail(s.TailCircle)
|
||||||
StartTime = s.StartTime,
|
|
||||||
Position = s.StackedPosition,
|
|
||||||
IndexInCurrentCombo = s.IndexInCurrentCombo,
|
|
||||||
Scale = s.Scale,
|
|
||||||
ComboColour = s.ComboColour,
|
|
||||||
Samples = s.Samples,
|
|
||||||
SampleControlPoint = s.SampleControlPoint,
|
|
||||||
TimePreempt = s.TimePreempt,
|
|
||||||
TimeFadein = s.TimeFadein,
|
|
||||||
HitWindow300 = s.HitWindow300,
|
|
||||||
HitWindow100 = s.HitWindow100,
|
|
||||||
HitWindow50 = s.HitWindow50
|
|
||||||
})
|
|
||||||
};
|
};
|
||||||
|
|
||||||
components.Add(Body);
|
components.Add(Body);
|
||||||
components.Add(Ball);
|
components.Add(Ball);
|
||||||
|
|
||||||
AddNested(InitialCircle);
|
AddNested(HeadCircle);
|
||||||
|
|
||||||
|
AddNested(tail);
|
||||||
|
components.Add(tail);
|
||||||
|
|
||||||
foreach (var tick in s.NestedHitObjects.OfType<SliderTick>())
|
foreach (var tick in s.NestedHitObjects.OfType<SliderTick>())
|
||||||
{
|
{
|
||||||
@ -87,6 +76,7 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables
|
|||||||
};
|
};
|
||||||
|
|
||||||
ticks.Add(drawableTick);
|
ticks.Add(drawableTick);
|
||||||
|
components.Add(drawableTick);
|
||||||
AddNested(drawableTick);
|
AddNested(drawableTick);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -121,27 +111,25 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables
|
|||||||
currentSpan = span;
|
currentSpan = span;
|
||||||
|
|
||||||
//todo: we probably want to reconsider this before adding scoring, but it looks and feels nice.
|
//todo: we probably want to reconsider this before adding scoring, but it looks and feels nice.
|
||||||
if (!InitialCircle.Judgements.Any(j => j.IsHit))
|
if (!HeadCircle.IsHit)
|
||||||
InitialCircle.Position = slider.Curve.PositionAt(progress);
|
HeadCircle.Position = slider.Curve.PositionAt(progress);
|
||||||
|
|
||||||
foreach (var c in components.OfType<ISliderProgress>()) c.UpdateProgress(progress, span);
|
foreach (var c in components.OfType<ISliderProgress>()) c.UpdateProgress(progress, span);
|
||||||
foreach (var c in components.OfType<ITrackSnaking>()) c.UpdateSnakingPosition(slider.Curve.PositionAt(Body.SnakedStart ?? 0), slider.Curve.PositionAt(Body.SnakedEnd ?? 0));
|
foreach (var c in components.OfType<ITrackSnaking>()) c.UpdateSnakingPosition(slider.Curve.PositionAt(Body.SnakedStart ?? 0), slider.Curve.PositionAt(Body.SnakedEnd ?? 0));
|
||||||
foreach (var t in ticks.Children) t.Tracking = Ball.Tracking;
|
foreach (var t in components.OfType<IRequireTracking>()) t.Tracking = Ball.Tracking;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void CheckForJudgements(bool userTriggered, double timeOffset)
|
protected override void CheckForJudgements(bool userTriggered, double timeOffset)
|
||||||
{
|
{
|
||||||
if (!userTriggered && Time.Current >= slider.EndTime)
|
if (!userTriggered && Time.Current >= slider.EndTime)
|
||||||
{
|
{
|
||||||
var judgementsCount = ticks.Children.Count + repeatPoints.Children.Count + 1;
|
var judgementsCount = NestedHitObjects.Count;
|
||||||
var judgementsHit = ticks.Children.Count(t => t.Judgements.Any(j => j.IsHit)) + repeatPoints.Children.Count(t => t.Judgements.Any(j => j.IsHit));
|
var judgementsHit = NestedHitObjects.Count(h => h.IsHit);
|
||||||
if (InitialCircle.Judgements.Any(j => j.IsHit))
|
|
||||||
judgementsHit++;
|
|
||||||
|
|
||||||
var hitFraction = (double)judgementsHit / judgementsCount;
|
var hitFraction = (double)judgementsHit / judgementsCount;
|
||||||
if (hitFraction == 1 && InitialCircle.Judgements.Any(j => j.Result == HitResult.Great))
|
if (hitFraction == 1 && HeadCircle.Judgements.Any(j => j.Result == HitResult.Great))
|
||||||
AddJudgement(new OsuJudgement { Result = HitResult.Great });
|
AddJudgement(new OsuJudgement { Result = HitResult.Great });
|
||||||
else if (hitFraction >= 0.5 && InitialCircle.Judgements.Any(j => j.Result >= HitResult.Good))
|
else if (hitFraction >= 0.5 && HeadCircle.Judgements.Any(j => j.Result >= HitResult.Good))
|
||||||
AddJudgement(new OsuJudgement { Result = HitResult.Good });
|
AddJudgement(new OsuJudgement { Result = HitResult.Good });
|
||||||
else if (hitFraction > 0)
|
else if (hitFraction > 0)
|
||||||
AddJudgement(new OsuJudgement { Result = HitResult.Meh });
|
AddJudgement(new OsuJudgement { Result = HitResult.Meh });
|
||||||
@ -173,7 +161,7 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public Drawable ProxiedLayer => InitialCircle.ApproachCircle;
|
public Drawable ProxiedLayer => HeadCircle.ApproachCircle;
|
||||||
|
|
||||||
public override Vector2 SelectionPoint => ToScreenSpace(Body.Position);
|
public override Vector2 SelectionPoint => ToScreenSpace(Body.Position);
|
||||||
public override Quad SelectionQuad => Body.PathDrawQuad;
|
public override Quad SelectionQuad => Body.PathDrawQuad;
|
||||||
|
@ -0,0 +1,32 @@
|
|||||||
|
// Copyright (c) 2007-2018 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
|
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
|
||||||
|
|
||||||
|
using osu.Framework.Graphics;
|
||||||
|
using osu.Game.Rulesets.Osu.Judgements;
|
||||||
|
using osu.Game.Rulesets.Scoring;
|
||||||
|
|
||||||
|
namespace osu.Game.Rulesets.Osu.Objects.Drawables
|
||||||
|
{
|
||||||
|
public class DrawableSliderTail : DrawableOsuHitObject, IRequireTracking
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// The judgement text is provided by the <see cref="DrawableSlider"/>.
|
||||||
|
/// </summary>
|
||||||
|
public override bool DisplayJudgement => false;
|
||||||
|
|
||||||
|
public bool Tracking { get; set; }
|
||||||
|
|
||||||
|
public DrawableSliderTail(HitCircle hitCircle)
|
||||||
|
: base(hitCircle)
|
||||||
|
{
|
||||||
|
AlwaysPresent = true;
|
||||||
|
RelativeSizeAxes = Axes.Both;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void CheckForJudgements(bool userTriggered, double timeOffset)
|
||||||
|
{
|
||||||
|
if (!userTriggered && timeOffset >= 0)
|
||||||
|
AddJudgement(new OsuSliderTailJudgement { Result = Tracking ? HitResult.Great : HitResult.Miss });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -12,14 +12,14 @@ using osu.Game.Rulesets.Scoring;
|
|||||||
|
|
||||||
namespace osu.Game.Rulesets.Osu.Objects.Drawables
|
namespace osu.Game.Rulesets.Osu.Objects.Drawables
|
||||||
{
|
{
|
||||||
public class DrawableSliderTick : DrawableOsuHitObject
|
public class DrawableSliderTick : DrawableOsuHitObject, IRequireTracking
|
||||||
{
|
{
|
||||||
private readonly SliderTick sliderTick;
|
private readonly SliderTick sliderTick;
|
||||||
|
|
||||||
public double FadeInTime;
|
public double FadeInTime;
|
||||||
public double FadeOutTime;
|
public double FadeOutTime;
|
||||||
|
|
||||||
public bool Tracking;
|
public bool Tracking { get; set; }
|
||||||
|
|
||||||
public override bool DisplayJudgement => false;
|
public override bool DisplayJudgement => false;
|
||||||
|
|
||||||
|
13
osu.Game.Rulesets.Osu/Objects/Drawables/IRequireTracking.cs
Normal file
13
osu.Game.Rulesets.Osu/Objects/Drawables/IRequireTracking.cs
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
// Copyright (c) 2007-2018 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
|
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
|
||||||
|
|
||||||
|
namespace osu.Game.Rulesets.Osu.Objects.Drawables
|
||||||
|
{
|
||||||
|
public interface IRequireTracking
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Whether the <see cref="DrawableSlider"/> is currently being tracked by the user.
|
||||||
|
/// </summary>
|
||||||
|
bool Tracking { get; set; }
|
||||||
|
}
|
||||||
|
}
|
@ -80,6 +80,9 @@ namespace osu.Game.Rulesets.Osu.Objects
|
|||||||
public double Velocity;
|
public double Velocity;
|
||||||
public double TickDistance;
|
public double TickDistance;
|
||||||
|
|
||||||
|
public HitCircle HeadCircle;
|
||||||
|
public HitCircle TailCircle;
|
||||||
|
|
||||||
protected override void ApplyDefaultsToSelf(ControlPointInfo controlPointInfo, BeatmapDifficulty difficulty)
|
protected override void ApplyDefaultsToSelf(ControlPointInfo controlPointInfo, BeatmapDifficulty difficulty)
|
||||||
{
|
{
|
||||||
base.ApplyDefaultsToSelf(controlPointInfo, difficulty);
|
base.ApplyDefaultsToSelf(controlPointInfo, difficulty);
|
||||||
@ -97,10 +100,37 @@ namespace osu.Game.Rulesets.Osu.Objects
|
|||||||
{
|
{
|
||||||
base.CreateNestedHitObjects();
|
base.CreateNestedHitObjects();
|
||||||
|
|
||||||
|
createSliderEnds();
|
||||||
createTicks();
|
createTicks();
|
||||||
createRepeatPoints();
|
createRepeatPoints();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void createSliderEnds()
|
||||||
|
{
|
||||||
|
HeadCircle = new HitCircle
|
||||||
|
{
|
||||||
|
StartTime = StartTime,
|
||||||
|
Position = StackedPosition,
|
||||||
|
IndexInCurrentCombo = IndexInCurrentCombo,
|
||||||
|
ComboColour = ComboColour,
|
||||||
|
Samples = Samples,
|
||||||
|
SampleControlPoint = SampleControlPoint
|
||||||
|
};
|
||||||
|
|
||||||
|
TailCircle = new HitCircle
|
||||||
|
{
|
||||||
|
StartTime = EndTime,
|
||||||
|
Position = StackedEndPosition,
|
||||||
|
IndexInCurrentCombo = IndexInCurrentCombo,
|
||||||
|
ComboColour = ComboColour,
|
||||||
|
Samples = Samples,
|
||||||
|
SampleControlPoint = SampleControlPoint
|
||||||
|
};
|
||||||
|
|
||||||
|
AddNested(HeadCircle);
|
||||||
|
AddNested(TailCircle);
|
||||||
|
}
|
||||||
|
|
||||||
private void createTicks()
|
private void createTicks()
|
||||||
{
|
{
|
||||||
if (TickDistance == 0) return;
|
if (TickDistance == 0) return;
|
||||||
|
@ -16,6 +16,9 @@ using OpenTK;
|
|||||||
using OpenTK.Graphics;
|
using OpenTK.Graphics;
|
||||||
using osu.Game.Rulesets.Mods;
|
using osu.Game.Rulesets.Mods;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using osu.Game.Graphics.Sprites;
|
||||||
|
using osu.Game.Rulesets.Judgements;
|
||||||
|
using osu.Game.Rulesets.Objects.Drawables;
|
||||||
using osu.Game.Rulesets.Osu.Objects.Drawables.Pieces;
|
using osu.Game.Rulesets.Osu.Objects.Drawables.Pieces;
|
||||||
|
|
||||||
namespace osu.Game.Rulesets.Osu.Tests
|
namespace osu.Game.Rulesets.Osu.Tests
|
||||||
@ -142,7 +145,34 @@ namespace osu.Game.Rulesets.Osu.Tests
|
|||||||
foreach (var mod in Mods.OfType<IApplicableToDrawableHitObjects>())
|
foreach (var mod in Mods.OfType<IApplicableToDrawableHitObjects>())
|
||||||
mod.ApplyToDrawableHitObjects(new[] { drawable });
|
mod.ApplyToDrawableHitObjects(new[] { drawable });
|
||||||
|
|
||||||
|
drawable.OnJudgement += onJudgement;
|
||||||
|
|
||||||
Add(drawable);
|
Add(drawable);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private float judgementOffsetDirection = 1;
|
||||||
|
private void onJudgement(DrawableHitObject judgedObject, Judgement judgement)
|
||||||
|
{
|
||||||
|
var osuObject = judgedObject as DrawableOsuHitObject;
|
||||||
|
if (osuObject == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
OsuSpriteText text;
|
||||||
|
Add(text = new OsuSpriteText
|
||||||
|
{
|
||||||
|
Anchor = Anchor.Centre,
|
||||||
|
Origin = Anchor.Centre,
|
||||||
|
Text = judgement.IsHit ? "Hit!" : "Miss!",
|
||||||
|
Colour = judgement.IsHit ? Color4.Green : Color4.Red,
|
||||||
|
TextSize = 30,
|
||||||
|
Position = osuObject.HitObject.StackedEndPosition + judgementOffsetDirection * new Vector2(0, 45)
|
||||||
|
});
|
||||||
|
|
||||||
|
text.Delay(150)
|
||||||
|
.Then().FadeOut(200)
|
||||||
|
.Then().Expire();
|
||||||
|
|
||||||
|
judgementOffsetDirection *= -1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -55,6 +55,7 @@
|
|||||||
<Compile Include="Edit\OsuEditPlayfield.cs" />
|
<Compile Include="Edit\OsuEditPlayfield.cs" />
|
||||||
<Compile Include="Edit\OsuEditRulesetContainer.cs" />
|
<Compile Include="Edit\OsuEditRulesetContainer.cs" />
|
||||||
<Compile Include="Edit\OsuHitObjectComposer.cs" />
|
<Compile Include="Edit\OsuHitObjectComposer.cs" />
|
||||||
|
<Compile Include="Judgements\OsuSliderTailJudgement.cs" />
|
||||||
<Compile Include="Mods\OsuModAutopilot.cs" />
|
<Compile Include="Mods\OsuModAutopilot.cs" />
|
||||||
<Compile Include="Mods\OsuModAutoplay.cs" />
|
<Compile Include="Mods\OsuModAutoplay.cs" />
|
||||||
<Compile Include="Mods\OsuModDaycore.cs" />
|
<Compile Include="Mods\OsuModDaycore.cs" />
|
||||||
@ -75,6 +76,8 @@
|
|||||||
<Compile Include="Objects\Drawables\Connections\FollowPointRenderer.cs" />
|
<Compile Include="Objects\Drawables\Connections\FollowPointRenderer.cs" />
|
||||||
<Compile Include="Judgements\OsuJudgement.cs" />
|
<Compile Include="Judgements\OsuJudgement.cs" />
|
||||||
<Compile Include="Objects\Drawables\DrawableRepeatPoint.cs" />
|
<Compile Include="Objects\Drawables\DrawableRepeatPoint.cs" />
|
||||||
|
<Compile Include="Objects\Drawables\DrawableSliderTail.cs" />
|
||||||
|
<Compile Include="Objects\Drawables\IRequireTracking.cs" />
|
||||||
<Compile Include="Objects\Drawables\ITrackSnaking.cs" />
|
<Compile Include="Objects\Drawables\ITrackSnaking.cs" />
|
||||||
<Compile Include="Objects\Drawables\Pieces\ApproachCircle.cs" />
|
<Compile Include="Objects\Drawables\Pieces\ApproachCircle.cs" />
|
||||||
<Compile Include="Objects\Drawables\Pieces\SpinnerBackground.cs" />
|
<Compile Include="Objects\Drawables\Pieces\SpinnerBackground.cs" />
|
||||||
|
@ -8,6 +8,8 @@ using OpenTK;
|
|||||||
using osu.Framework.Graphics;
|
using osu.Framework.Graphics;
|
||||||
using osu.Framework.Graphics.Containers;
|
using osu.Framework.Graphics.Containers;
|
||||||
using osu.Framework.Timing;
|
using osu.Framework.Timing;
|
||||||
|
using osu.Game.Beatmaps;
|
||||||
|
using osu.Game.Beatmaps.ControlPoints;
|
||||||
using osu.Game.Rulesets.Edit.Layers.Selection;
|
using osu.Game.Rulesets.Edit.Layers.Selection;
|
||||||
using osu.Game.Rulesets.Osu.Edit;
|
using osu.Game.Rulesets.Osu.Edit;
|
||||||
using osu.Game.Rulesets.Osu.Objects;
|
using osu.Game.Rulesets.Osu.Objects;
|
||||||
@ -35,9 +37,9 @@ namespace osu.Game.Tests.Visual
|
|||||||
new SelectionLayer(playfield)
|
new SelectionLayer(playfield)
|
||||||
};
|
};
|
||||||
|
|
||||||
playfield.Add(new DrawableHitCircle(new HitCircle { Position = new Vector2(256, 192), Scale = 0.5f }));
|
var hitCircle1 = new HitCircle { Position = new Vector2(256, 192), Scale = 0.5f };
|
||||||
playfield.Add(new DrawableHitCircle(new HitCircle { Position = new Vector2(344, 148), Scale = 0.5f }));
|
var hitCircle2 = new HitCircle { Position = new Vector2(344, 148), Scale = 0.5f };
|
||||||
playfield.Add(new DrawableSlider(new Slider
|
var slider = new Slider
|
||||||
{
|
{
|
||||||
ControlPoints = new List<Vector2>
|
ControlPoints = new List<Vector2>
|
||||||
{
|
{
|
||||||
@ -48,8 +50,16 @@ namespace osu.Game.Tests.Visual
|
|||||||
Position = new Vector2(128, 256),
|
Position = new Vector2(128, 256),
|
||||||
Velocity = 1,
|
Velocity = 1,
|
||||||
TickDistance = 100,
|
TickDistance = 100,
|
||||||
Scale = 0.5f
|
Scale = 0.5f,
|
||||||
}));
|
};
|
||||||
|
|
||||||
|
hitCircle1.ApplyDefaults(new ControlPointInfo(), new BeatmapDifficulty());
|
||||||
|
hitCircle2.ApplyDefaults(new ControlPointInfo(), new BeatmapDifficulty());
|
||||||
|
slider.ApplyDefaults(new ControlPointInfo(), new BeatmapDifficulty());
|
||||||
|
|
||||||
|
playfield.Add(new DrawableHitCircle(hitCircle1));
|
||||||
|
playfield.Add(new DrawableHitCircle(hitCircle2));
|
||||||
|
playfield.Add(new DrawableSlider(slider));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -240,13 +240,13 @@ namespace osu.Game.Rulesets.UI
|
|||||||
foreach (var mod in Mods.OfType<IApplicableToDifficulty>())
|
foreach (var mod in Mods.OfType<IApplicableToDifficulty>())
|
||||||
mod.ApplyToDifficulty(Beatmap.BeatmapInfo.BaseDifficulty);
|
mod.ApplyToDifficulty(Beatmap.BeatmapInfo.BaseDifficulty);
|
||||||
|
|
||||||
|
// Post-process the beatmap
|
||||||
|
processor.PostProcess(Beatmap);
|
||||||
|
|
||||||
// Apply defaults
|
// Apply defaults
|
||||||
foreach (var h in Beatmap.HitObjects)
|
foreach (var h in Beatmap.HitObjects)
|
||||||
h.ApplyDefaults(Beatmap.ControlPointInfo, Beatmap.BeatmapInfo.BaseDifficulty);
|
h.ApplyDefaults(Beatmap.ControlPointInfo, Beatmap.BeatmapInfo.BaseDifficulty);
|
||||||
|
|
||||||
// Post-process the beatmap
|
|
||||||
processor.PostProcess(Beatmap);
|
|
||||||
|
|
||||||
KeyBindingInputManager = CreateInputManager();
|
KeyBindingInputManager = CreateInputManager();
|
||||||
KeyBindingInputManager.RelativeSizeAxes = Axes.Both;
|
KeyBindingInputManager.RelativeSizeAxes = Axes.Both;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user