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); }
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); }