diff --git a/osu.Game.Rulesets.Catch/Edit/CatchEditorPlayfield.cs b/osu.Game.Rulesets.Catch/Edit/CatchEditorPlayfield.cs
index 78f5c3e9ed..3967c54f4b 100644
--- a/osu.Game.Rulesets.Catch/Edit/CatchEditorPlayfield.cs
+++ b/osu.Game.Rulesets.Catch/Edit/CatchEditorPlayfield.cs
@@ -22,10 +22,5 @@ namespace osu.Game.Rulesets.Catch.Edit
// TODO: disable hit lighting as well
}
-
- public void ApplyCircleSizeToCatcher(IBeatmapDifficultyInfo difficulty)
- {
- Catcher.SetScaleAndCatchWidth(difficulty);
- }
}
}
diff --git a/osu.Game.Rulesets.Catch/Edit/DrawableCatchEditorRuleset.cs b/osu.Game.Rulesets.Catch/Edit/DrawableCatchEditorRuleset.cs
index cd6d490a7f..86cdc2df5c 100644
--- a/osu.Game.Rulesets.Catch/Edit/DrawableCatchEditorRuleset.cs
+++ b/osu.Game.Rulesets.Catch/Edit/DrawableCatchEditorRuleset.cs
@@ -49,7 +49,14 @@ namespace osu.Game.Rulesets.Catch.Edit
editorBeatmap.BeatmapReprocessed -= onBeatmapReprocessed;
}
- private void onBeatmapReprocessed() => (Playfield as CatchEditorPlayfield)?.ApplyCircleSizeToCatcher(editorBeatmap.Difficulty);
+ private void onBeatmapReprocessed()
+ {
+ if (Playfield is CatchEditorPlayfield catchPlayfield)
+ {
+ catchPlayfield.Catcher.ApplyDifficulty(editorBeatmap.Difficulty);
+ catchPlayfield.CatcherArea.CatcherTrails.UpdateCatcherTrailsScale(catchPlayfield.Catcher.BodyScale);
+ }
+ }
protected override Playfield CreatePlayfield() => new CatchEditorPlayfield(Beatmap.Difficulty);
diff --git a/osu.Game.Rulesets.Catch/UI/Catcher.cs b/osu.Game.Rulesets.Catch/UI/Catcher.cs
index 3a0863473a..ebf3e47fd7 100644
--- a/osu.Game.Rulesets.Catch/UI/Catcher.cs
+++ b/osu.Game.Rulesets.Catch/UI/Catcher.cs
@@ -116,7 +116,7 @@ namespace osu.Game.Rulesets.Catch.UI
///
/// Width of the area that can be used to attempt catches during gameplay.
///
- public float CatchWidth;
+ public float CatchWidth { get; private set; }
private readonly SkinnableCatcher body;
@@ -142,7 +142,7 @@ namespace osu.Game.Rulesets.Catch.UI
Size = new Vector2(BASE_SIZE);
- SetScaleAndCatchWidth(difficulty);
+ ApplyDifficulty(difficulty);
InternalChildren = new Drawable[]
{
@@ -312,7 +312,7 @@ namespace osu.Game.Rulesets.Catch.UI
///
/// Set the scale and catch width.
///
- public void SetScaleAndCatchWidth(IBeatmapDifficultyInfo? difficulty)
+ public void ApplyDifficulty(IBeatmapDifficultyInfo? difficulty)
{
if (difficulty != null)
Scale = calculateScale(difficulty);
diff --git a/osu.Game.Rulesets.Catch/UI/CatcherArea.cs b/osu.Game.Rulesets.Catch/UI/CatcherArea.cs
index 338e1364a9..7f0a79ef49 100644
--- a/osu.Game.Rulesets.Catch/UI/CatcherArea.cs
+++ b/osu.Game.Rulesets.Catch/UI/CatcherArea.cs
@@ -32,7 +32,7 @@ namespace osu.Game.Rulesets.Catch.UI
private readonly CatchComboDisplay comboDisplay;
- private readonly CatcherTrailDisplay catcherTrails;
+ public readonly CatcherTrailDisplay CatcherTrails;
private Catcher catcher = null!;
@@ -55,7 +55,7 @@ namespace osu.Game.Rulesets.Catch.UI
Children = new Drawable[]
{
catcherContainer = new Container { RelativeSizeAxes = Axes.Both },
- catcherTrails = new CatcherTrailDisplay(),
+ CatcherTrails = new CatcherTrailDisplay(),
comboDisplay = new CatchComboDisplay
{
RelativeSizeAxes = Axes.None,
@@ -112,7 +112,7 @@ namespace osu.Game.Rulesets.Catch.UI
{
const double trail_generation_interval = 16;
- if (Time.Current - catcherTrails.LastDashTrailTime >= trail_generation_interval)
+ if (Time.Current - CatcherTrails.LastDashTrailTime >= trail_generation_interval)
displayCatcherTrail(Catcher.HyperDashing ? CatcherTrailAnimation.HyperDashing : CatcherTrailAnimation.Dashing);
}
@@ -170,6 +170,6 @@ namespace osu.Game.Rulesets.Catch.UI
}
}
- private void displayCatcherTrail(CatcherTrailAnimation animation) => catcherTrails.Add(new CatcherTrailEntry(Time.Current, Catcher.CurrentState, Catcher.X, Catcher.BodyScale, animation));
+ private void displayCatcherTrail(CatcherTrailAnimation animation) => CatcherTrails.Add(new CatcherTrailEntry(Time.Current, Catcher.CurrentState, Catcher.X, Catcher.BodyScale, animation));
}
}
diff --git a/osu.Game.Rulesets.Catch/UI/CatcherTrailDisplay.cs b/osu.Game.Rulesets.Catch/UI/CatcherTrailDisplay.cs
index e3e01c1b39..6a9162da91 100644
--- a/osu.Game.Rulesets.Catch/UI/CatcherTrailDisplay.cs
+++ b/osu.Game.Rulesets.Catch/UI/CatcherTrailDisplay.cs
@@ -10,6 +10,7 @@ using osu.Framework.Graphics.Pooling;
using osu.Game.Rulesets.Catch.Skinning;
using osu.Game.Rulesets.Objects.Pooling;
using osu.Game.Skinning;
+using osuTK;
using osuTK.Graphics;
namespace osu.Game.Rulesets.Catch.UI
@@ -55,6 +56,25 @@ namespace osu.Game.Rulesets.Catch.UI
};
}
+ ///
+ /// Update the scale of all trails.
+ ///
+ /// The new body scale of the Catcher
+ public void UpdateCatcherTrailsScale(Vector2 scale)
+ {
+ applyScaleChange(scale, dashTrails);
+ applyScaleChange(scale, hyperDashTrails);
+ applyScaleChange(scale, hyperDashAfterImages);
+ }
+
+ private void applyScaleChange(Vector2 scale, Container trails)
+ {
+ foreach (var trail in trails)
+ {
+ trail.Scale = scale;
+ }
+ }
+
protected override void LoadComplete()
{
base.LoadComplete();