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);
     }
 }
예제 #2
0
    // 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;
    }