public void ManageFrisbee(ClimbCharacter.Action action) { if (action == ClimbCharacter.Action.throwFrisbee) { StartCoroutine(ThrowFrisbee()); float chargingTime = Time.time - chargingFrisbeeStartTime; force = Mathf.Lerp(forceRange[0], forceRange[1], chargingTime / maxChargeTime); gravity = Mathf.Lerp(gravityRange[0], gravityRange[1], chargingTime / maxChargeTime); } else if (action == ClimbCharacter.Action.chargeFrisbee && !isCharging) { chargingFrisbeeStartTime = Time.time; charge(); } else if (action == ClimbCharacter.Action.throwFrisbeeForward && !isCharging) { throwDirection = transform.forward; force = Mathf.Lerp(forceRange[0], forceRange[1], maxChargeTime / 4); gravity = Mathf.Lerp(gravityRange[0], gravityRange[1], maxChargeTime / 4); charge(); Invoke("throwFrisbee", frisbeeDelay * 2); } }
// Fixed update is called in sync with physics private void FixedUpdate() { if (isDead) { return; } Vector3 m_Move = calculateMove(); ClimbCharacter.Action action = getAction(); if (isChargingFrisbee && !Input.GetMouseButton(0)) { isChargingFrisbee = false; action = ClimbCharacter.Action.throwFrisbee; } frisbeeThrower.ManageFrisbee(action); // pass all parameters to the character control script m_Character.Move(m_Move, action); m_Jump = false; }