# restricting MouseOrbit input area

I am building an interactive app for ipad. I have a machine ( excavator ) on the screen that is being operated by touch ( dragging rigidbodies and colliders around ), but I want to use MouseOrbit as well.At the moment, when you drag elements of the excavator around it operates the mouseorbit as well, so it all gets a bit visually confusing. As the excavator is always in the middle of the scene, I want to be able to use mouseorbit everywhere on the screen except for the middle, so there is no overlap. Is there anyway to do this ?I figure there must be some way to script in to mouseorbit a boolean question asking is the mouse within such and such an area but do not know how to do this. I looked at this other comparable example efficient method to detect mouse events anywhere on screen but dont think it is applicable for ipad

If all you're wanting to do is detect whether the mouse position is in an area (e.g. circle or rectangle) in the middle of the screen, that's very easy to do. A point-in-circle test looks like this (untested pseudocode):

``````inside = squaredLength(point - circleCenter) <= square(circleRadius);

``````

And the point-in-rectangle test looks like this (I think Unity may even have a function for this):

``````inside =
point.x >= rect.min.x &&
point.x <= rect.max.x &&
point.y >= rect.min.y &&
point.y <= rect.max.y;

``````

I have put Rect.Contains into MouseOrbit.js in order to create a central exclusion zone, but am unsure how to reverse it. At the moment there is no input from outside the rectangle, but i want there to be no input from inside the rectangle. I have so far...

``````var target : Transform;
var distance = 10.0;
var rect = Rect (200,200, 450, 450);

var xSpeed = 250.0;
var ySpeed = 120.0;

var yMinLimit = -20;
var yMaxLimit = 80;

private var x = 0.0;
private var y = 0.0;

function Start () {
var angles = transform.eulerAngles;
x = angles.y;
y = angles.x;

// Make the rigid body not change rotation
if (rigidbody)
rigidbody.freezeRotation = true;
}
function LateUpdate () {
if (rect.Contains(Input.mousePosition))
if (target && Input.GetMouseButton(0)) {

x += Input.GetAxis("Mouse X") * xSpeed * 0.02;
y -= Input.GetAxis("Mouse Y") * ySpeed * 0.02;

y = ClampAngle(y, yMinLimit, yMaxLimit);

var rotation = Quaternion.Euler(y, x, 0);
var position = rotation * Vector3(0.0, 0.0, -distance) + target.position;

transform.rotation = rotation;
transform.position = position;
}
}

static function ClampAngle (angle : float, min : float, max : float) {
if (angle < -360)
angle += 360;
if (angle > 360)
angle -= 360;
return Mathf.Clamp (angle, min, max);
}

``````