private float getValueFromMouseEvent(dfMouseEventArgs args)
    {
        var corners = track.GetCorners();
        var start   = corners[0];
        var end     = corners[orientation == dfControlOrientation.Horizontal ? 1 : 2];

        var plane = new Plane(transform.TransformDirection(Vector3.back), start);

        var ray      = args.Ray;
        var distance = 0f;

        if (!plane.Raycast(ray, out distance))
        {
            return(this.rawValue);
        }

        var hit = ray.origin + ray.direction * distance;

        if (args.Source == this.thumb)
        {
            hit += this.thumbMouseOffset;
        }

        var closest  = closestPoint(start, end, hit, true);
        var lerp     = (closest - start).magnitude / (end - start).magnitude;
        var rawValue = minValue + (maxValue - minValue) * lerp;

        return(rawValue);
    }
Exemple #2
0
    private Vector2 raycast(Ray ray)
    {
        var corners = control.GetCorners();
        var plane   = new Plane(corners[0], corners[1], corners[3]);

        var distance = 0f;

        plane.Raycast(ray, out distance);

        var hitPoint = ray.GetPoint(distance);
        var relative = (hitPoint - corners[0]).Scale(1, -1, 0) / control.GetManager().PixelsToUnits();

        return(relative);
    }