protected virtual void SetGrabMechanicParameters() { if (controlGrabAttach != null) { controlGrabAttach.precisionGrab = precisionGrab; controlGrabAttach.releaseDecelerationDamper = releaseFriction; axisLimits = new Limits2D(originalLocalPosition[(int)operateAxis], MaximumLength()[(int)operateAxis]); switch (operateAxis) { case OperatingAxis.xAxis: controlGrabAttach.xAxisLimits = axisLimits; break; case OperatingAxis.yAxis: controlGrabAttach.yAxisLimits = axisLimits; break; case OperatingAxis.zAxis: controlGrabAttach.zAxisLimits = axisLimits; break; } controlGrabAttach.trackingSpeed = trackingSpeed; controlGrabAttach.detachDistance = detachDistance; } }
protected virtual void SetupOrigin() { CheckAxisLimits(); localOrigin = transform.localPosition; xOriginLimits = new Limits2D(localOrigin.x + xAxisLimits.minimum, localOrigin.x + xAxisLimits.maximum); yOriginLimits = new Limits2D(localOrigin.y + yAxisLimits.minimum, localOrigin.y + yAxisLimits.maximum); zOriginLimits = new Limits2D(localOrigin.z + zAxisLimits.minimum, localOrigin.z + zAxisLimits.maximum); previousPosition = localOrigin; }
protected virtual Limits2D FixAxisLimits(Limits2D givenLimits) { givenLimits.minimum = (givenLimits.minimum > 0f ? givenLimits.minimum * -1f : givenLimits.minimum); givenLimits.maximum = (givenLimits.maximum < 0f ? givenLimits.maximum * -1f : givenLimits.maximum); return(givenLimits); }
protected virtual void CheckAxisLimits() { xAxisLimits = FixAxisLimits(xAxisLimits); yAxisLimits = FixAxisLimits(yAxisLimits); zAxisLimits = FixAxisLimits(zAxisLimits); }
protected virtual float ClampAxis(Limits2D limits, float axisValue) { axisValue = (axisValue < limits.minimum + minMaxThreshold ? limits.minimum : axisValue); axisValue = (axisValue > limits.maximum - minMaxThreshold ? limits.maximum : axisValue); return(Mathf.Clamp(axisValue, limits.minimum, limits.maximum)); }
public static float MapValue(float value, Limits2D inRange, Limits2D outRange) { return(outRange.minimum + (outRange.maximum - outRange.minimum) * ((value - inRange.minimum) / (inRange.maximum - inRange.minimum))); }