void Update () {
float step;
Ray camRay;
float distance;
switch (_state)
{
case State.BeingTaken:
camRay = Camera.main.ScreenPointToRay(Input.mousePosition);
if (_plane.Raycast(camRay, out distance))
{
step = 4 * _runeSpeed * Time.deltaTime;
transform.position = Vector3.Slerp(transform.position, camRay.GetPoint(distance), step);
if (Vector3.SqrMagnitude(transform.position - camRay.GetPoint(distance)) < 0.0001)
{
_state = State.Held;
}
}
break;
case State.Held:
camRay = Camera.main.ScreenPointToRay(Input.mousePosition);
if (_plane.Raycast(camRay, out distance))
{
gameObject.transform.position = camRay.GetPoint(distance);
}
break;
case State.BeingReleased:
step = _runeSpeed * Time.deltaTime;
transform.localPosition = Vector3.Slerp(transform.localPosition, _upPosition, step);
//transform.position = Vector3.MoveTowards(transform.position, _initialPosition, Mathf.Lerp(0, Vector3.Distance(_initialPosition, transform.position), 0.1f));
if (Vector3.SqrMagnitude(transform.localPosition - _upPosition) < 0.00001)
{
_state = State.Static;
}
break;
case State.Static:
break;
default:
break;
}
}
}