mirror of
https://github.com/ppy/osu.git
synced 2025-01-12 17:43:05 +08:00
Disambiguate object flipping and reflection methods
This commit is contained in:
parent
1776485b93
commit
684b16cef5
@ -20,7 +20,7 @@ namespace osu.Game.Rulesets.Osu.Mods
|
|||||||
{
|
{
|
||||||
var osuObject = (OsuHitObject)hitObject;
|
var osuObject = (OsuHitObject)hitObject;
|
||||||
|
|
||||||
OsuHitObjectGenerationUtils.ReflectVertically(osuObject);
|
OsuHitObjectGenerationUtils.ReflectVerticallyAlongPlayfield(osuObject);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -27,16 +27,16 @@ namespace osu.Game.Rulesets.Osu.Mods
|
|||||||
switch (Reflection.Value)
|
switch (Reflection.Value)
|
||||||
{
|
{
|
||||||
case MirrorType.Horizontal:
|
case MirrorType.Horizontal:
|
||||||
OsuHitObjectGenerationUtils.ReflectHorizontally(osuObject);
|
OsuHitObjectGenerationUtils.ReflectHorizontallyAlongPlayfield(osuObject);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MirrorType.Vertical:
|
case MirrorType.Vertical:
|
||||||
OsuHitObjectGenerationUtils.ReflectVertically(osuObject);
|
OsuHitObjectGenerationUtils.ReflectVerticallyAlongPlayfield(osuObject);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MirrorType.Both:
|
case MirrorType.Both:
|
||||||
OsuHitObjectGenerationUtils.ReflectHorizontally(osuObject);
|
OsuHitObjectGenerationUtils.ReflectHorizontallyAlongPlayfield(osuObject);
|
||||||
OsuHitObjectGenerationUtils.ReflectVertically(osuObject);
|
OsuHitObjectGenerationUtils.ReflectVerticallyAlongPlayfield(osuObject);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -67,7 +67,7 @@ namespace osu.Game.Rulesets.Osu.Mods
|
|||||||
|
|
||||||
if (positionInfos[i].HitObject is Slider slider && random.NextDouble() < 0.5)
|
if (positionInfos[i].HitObject is Slider slider && random.NextDouble() < 0.5)
|
||||||
{
|
{
|
||||||
OsuHitObjectGenerationUtils.FlipSliderHorizontally(slider);
|
OsuHitObjectGenerationUtils.FlipSliderInPlaceHorizontally(slider);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (i == 0)
|
if (i == 0)
|
||||||
|
@ -112,21 +112,24 @@ namespace osu.Game.Rulesets.Osu.Utils
|
|||||||
/// Reflects the position of the <see cref="OsuHitObject"/> in the playfield horizontally.
|
/// Reflects the position of the <see cref="OsuHitObject"/> in the playfield horizontally.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="osuObject">The object to reflect.</param>
|
/// <param name="osuObject">The object to reflect.</param>
|
||||||
public static void ReflectHorizontally(OsuHitObject osuObject)
|
public static void ReflectHorizontallyAlongPlayfield(OsuHitObject osuObject)
|
||||||
{
|
{
|
||||||
osuObject.Position = new Vector2(OsuPlayfield.BASE_SIZE.X - osuObject.X, osuObject.Position.Y);
|
osuObject.Position = new Vector2(OsuPlayfield.BASE_SIZE.X - osuObject.X, osuObject.Position.Y);
|
||||||
|
|
||||||
if (osuObject is not Slider slider)
|
if (osuObject is not Slider slider)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
FlipSliderHorizontally(slider);
|
void flipNestedObject(OsuHitObject nested) => nested.Position = new Vector2(OsuPlayfield.BASE_SIZE.X - nested.Position.X, nested.Position.Y);
|
||||||
|
static void flipControlPoint(PathControlPoint point) => point.Position = new Vector2(-point.Position.X, point.Position.Y);
|
||||||
|
|
||||||
|
modifySlider(slider, flipNestedObject, flipControlPoint);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Reflects the position of the <see cref="OsuHitObject"/> in the playfield vertically.
|
/// Reflects the position of the <see cref="OsuHitObject"/> in the playfield vertically.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="osuObject">The object to reflect.</param>
|
/// <param name="osuObject">The object to reflect.</param>
|
||||||
public static void ReflectVertically(OsuHitObject osuObject)
|
public static void ReflectVerticallyAlongPlayfield(OsuHitObject osuObject)
|
||||||
{
|
{
|
||||||
osuObject.Position = new Vector2(osuObject.Position.X, OsuPlayfield.BASE_SIZE.Y - osuObject.Y);
|
osuObject.Position = new Vector2(osuObject.Position.X, OsuPlayfield.BASE_SIZE.Y - osuObject.Y);
|
||||||
|
|
||||||
@ -139,6 +142,18 @@ namespace osu.Game.Rulesets.Osu.Utils
|
|||||||
modifySlider(slider, flipNestedObject, flipControlPoint);
|
modifySlider(slider, flipNestedObject, flipControlPoint);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Flips the position of the <see cref="Slider"/> around its start position horizontally.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="slider">The slider to be flipped.</param>
|
||||||
|
public static void FlipSliderInPlaceHorizontally(Slider slider)
|
||||||
|
{
|
||||||
|
void flipNestedObject(OsuHitObject nested) => nested.Position = new Vector2(slider.X - (nested.X - slider.X), nested.Y);
|
||||||
|
static void flipControlPoint(PathControlPoint point) => point.Position = new Vector2(-point.Position.X, point.Position.Y);
|
||||||
|
|
||||||
|
modifySlider(slider, flipNestedObject, flipControlPoint);
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Rotate a slider about its start position by the specified angle.
|
/// Rotate a slider about its start position by the specified angle.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -152,17 +167,6 @@ namespace osu.Game.Rulesets.Osu.Utils
|
|||||||
modifySlider(slider, rotateNestedObject, rotateControlPoint);
|
modifySlider(slider, rotateNestedObject, rotateControlPoint);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Flips the slider about its start position horizontally.
|
|
||||||
/// </summary>
|
|
||||||
public static void FlipSliderHorizontally(Slider slider)
|
|
||||||
{
|
|
||||||
void flipNestedObject(OsuHitObject nested) => nested.Position = new Vector2(slider.X - (nested.X - slider.X), nested.Y);
|
|
||||||
static void flipControlPoint(PathControlPoint point) => point.Position = new Vector2(-point.Position.X, point.Position.Y);
|
|
||||||
|
|
||||||
modifySlider(slider, flipNestedObject, flipControlPoint);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void modifySlider(Slider slider, Action<OsuHitObject> modifyNestedObject, Action<PathControlPoint> modifyControlPoint)
|
private static void modifySlider(Slider slider, Action<OsuHitObject> modifyNestedObject, Action<PathControlPoint> modifyControlPoint)
|
||||||
{
|
{
|
||||||
// No need to update the head and tail circles, since slider handles that when the new slider path is set
|
// No need to update the head and tail circles, since slider handles that when the new slider path is set
|
||||||
|
Loading…
Reference in New Issue
Block a user