void FetchTarget(Transform newTarget) { currentTarget = newTarget; currentMode = CraneMode.Extending; segment.ExtendTo(1); delay = 0; }
// Use this for initialization void Start() { GameObject g = clawGoal; craneTarget = g.transform; ik = GetComponent <TelescopeIK>(); ik.target = craneTarget; segment = GetComponent <TelescopeSegment>(); craneTarget.position = calibrationPos.position; currentTarget = calibrationPos; currentMode = CraneMode.Holding; segment.ExtendImmediate(0); segment.LastShell.AlwaysExtend = true; segment.LastShell.SetTransform(); Vector3 clawPos = segment.LastShell.EndPointWS; Vector3 clawForward = segment.LastShell.EndTangentWS; claw.transform.position = clawPos + clawForward * 0.1f; claw.transform.forward = -clawForward; claw.transform.parent = segment.LastShell.transform; }
// Update is called once per frame void Update() { craneTarget.position = Vector3.Lerp(calibrationPos.position, currentTarget.position + targetOffset, interp); switch (currentMode) { case CraneMode.Extending: if (delay < 1) { delay += Time.deltaTime; } else { interp = Mathf.Clamp01(interp + Time.deltaTime); } if (interp >= 1) { currentMode = CraneMode.Holding; } break; case CraneMode.Retracting: interp = Mathf.Clamp01(interp - Time.deltaTime); if (interp <= 0) { currentMode = CraneMode.Holding; } break; case CraneMode.Holding: default: break; } Vector3 clawUp = claw.transform.up; Vector3 clawForward = claw.transform.forward; Vector3 worldUpImage = Vector3.up - Vector3.Dot(Vector3.up, clawForward) * clawForward; float angle = TelescopeUtils.AngleBetween(clawUp, worldUpImage.normalized, claw.transform.forward); claw.transform.rotation = Quaternion.AngleAxis(Mathf.Min(angle, 90f * Time.deltaTime), claw.transform.forward) * claw.transform.rotation; if (Input.GetKeyDown("=") && targetIndex < targets.Count && currentMode == CraneMode.Holding) { Debug.Log("extending"); FetchTarget(targets[targetIndex]); currentTargetObject = targetObjects[targetIndex]; targetIndex++; } if (Input.GetKeyDown("-") && currentMode == CraneMode.Holding) { Debug.Log("retracting"); RetrieveTarget(); } if (Input.GetKeyDown("0") && currentMode == CraneMode.Holding) { Debug.Log("Moving to bin"); DepositTarget(); } if (Input.GetKeyDown("1")) { bool nowOpen = claw.ToggleClose(); if (!nowOpen) { currentTargetObject.parent = claw.transform; } else { currentTargetObject.parent = null; currentTargetObject.GetComponent <Rigidbody>().isKinematic = false; } } }
void RetrieveTarget() { currentMode = CraneMode.Retracting; segment.ExtendTo(0); }
void DepositTarget() { currentTarget = bin; currentMode = CraneMode.Extending; segment.ExtendTo(1); }