mirror of
https://github.com/ppy/osu.git
synced 2024-11-11 10:07:52 +08:00
add rotation to snapped position
This commit is contained in:
parent
f3b88c318b
commit
f2edd705ea
@ -9,6 +9,7 @@ using osu.Framework.Graphics.Containers;
|
||||
using osu.Framework.Graphics.Shapes;
|
||||
using osu.Framework.Layout;
|
||||
using osu.Framework.Utils;
|
||||
using osu.Game.Utils;
|
||||
using osuTK;
|
||||
|
||||
namespace osu.Game.Screens.Edit.Compose.Components
|
||||
@ -215,11 +216,11 @@ namespace osu.Game.Screens.Edit.Compose.Components
|
||||
|
||||
public Vector2 GetSnappedPosition(Vector2 original)
|
||||
{
|
||||
Vector2 relativeToStart = original - StartPosition;
|
||||
Vector2 relativeToStart = GeometryUtils.RotateVector(original - StartPosition, GridLineRotation);
|
||||
Vector2 offset = Vector2.Divide(relativeToStart, Spacing);
|
||||
Vector2 roundedOffset = new Vector2(MathF.Round(offset.X), MathF.Round(offset.Y));
|
||||
|
||||
return StartPosition + Vector2.Multiply(roundedOffset, Spacing);
|
||||
return StartPosition + GeometryUtils.RotateVector(Vector2.Multiply(roundedOffset, Spacing), -GridLineRotation);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -27,9 +27,8 @@ namespace osu.Game.Utils
|
||||
point.X -= origin.X;
|
||||
point.Y -= origin.Y;
|
||||
|
||||
Vector2 ret;
|
||||
ret.X = point.X * MathF.Cos(MathUtils.DegreesToRadians(angle)) + point.Y * MathF.Sin(MathUtils.DegreesToRadians(angle));
|
||||
ret.Y = point.X * -MathF.Sin(MathUtils.DegreesToRadians(angle)) + point.Y * MathF.Cos(MathUtils.DegreesToRadians(angle));
|
||||
Vector2 ret = RotateVector(point, angle);
|
||||
Matrix2
|
||||
|
||||
ret.X += origin.X;
|
||||
ret.Y += origin.Y;
|
||||
@ -37,6 +36,19 @@ namespace osu.Game.Utils
|
||||
return ret;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Rotate a vector around the origin.
|
||||
/// </summary>
|
||||
/// <param name="vector">The vector.</param>
|
||||
/// <param name="angle">The angle to rotate (in degrees).</param>
|
||||
public static Vector2 RotateVector(Vector2 vector, float angle)
|
||||
{
|
||||
return new Vector2(
|
||||
vector.X * MathF.Cos(MathUtils.DegreesToRadians(angle)) + vector.Y * MathF.Sin(MathUtils.DegreesToRadians(angle)),
|
||||
vector.X * -MathF.Sin(MathUtils.DegreesToRadians(angle)) + vector.Y * MathF.Cos(MathUtils.DegreesToRadians(angle))
|
||||
);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Given a flip direction, a surrounding quad for all selected objects, and a position,
|
||||
/// will return the flipped position in screen space coordinates.
|
||||
|
Loading…
Reference in New Issue
Block a user