public static Point MovedRelativelyInDirection(this Point point, Direction sourceDirection, Direction direction, int steps = 1) { if (sourceDirection.HasFlag(Direction.Up)) { point = point.MovedInDirection(direction, steps); } if (sourceDirection.HasFlag(Direction.Down)) { point = point.MovedInDirection(direction.Flipped(), steps); } if (sourceDirection.HasFlag(Direction.Left)) { point = point.MovedInDirection(direction.RotatedClockWise(), steps); } if (sourceDirection.HasFlag(Direction.Right)) { point = point.MovedInDirection(direction.RotatedCounterClockWise(), steps); } return point; }