Пример #1
0
    protected virtual void ProcessInput()
    {
        #region Movement

        if (Input.GetKeyDown(KeyCode.UpArrow))
        {
            OnInputChanged?.Invoke(Vector2.up, true);
        }

        if (Input.GetKeyDown(KeyCode.DownArrow))
        {
            OnInputChanged?.Invoke(Vector2.down, true);
        }

        if (Input.GetKeyDown(KeyCode.RightArrow))
        {
            OnInputChanged?.Invoke(Vector2.right, true);
        }

        if (Input.GetKeyDown(KeyCode.LeftArrow))
        {
            OnInputChanged?.Invoke(Vector2.left, true);
        }

        if (Input.GetKeyUp(KeyCode.UpArrow))
        {
            OnInputChanged?.Invoke(Vector2.up, false);
        }

        if (Input.GetKeyUp(KeyCode.DownArrow))
        {
            OnInputChanged?.Invoke(Vector2.down, false);
        }

        if (Input.GetKeyUp(KeyCode.RightArrow))
        {
            OnInputChanged?.Invoke(Vector2.right, false);
        }

        if (Input.GetKeyUp(KeyCode.LeftArrow))
        {
            OnInputChanged?.Invoke(Vector2.left, false);
        }

        #endregion

        if (Input.GetKeyDown(KeyCode.Space))
        {
            OnActionPressed?.Invoke();
        }
    }
Пример #2
0
    private void Update()
    {
        if (camcon.lockState)
        {
            Vector3 localDevc = transform.InverseTransformVector(pi.Dvec);
            anim.SetFloat("forward", localDevc.z * (pi.Run ? 2.0f : 1.0f));
            anim.SetFloat("right", localDevc.x * (pi.Run ? 2.0f : 1.0f));

            if (trackDirection)
            {
                model.transform.forward = planarVec.normalized;
            }
            else
            {
                model.transform.forward = transform.forward;
            }

            if (!lockPlanar)
            {
                planarVec = pi.Dvec * walkSpeed * (pi.Run ? runMulti : 1.0f);
            }
        }
        else
        {
            anim.SetFloat("right", 0);
            anim.SetFloat("forward", pi.Dmag * Mathf.Lerp(anim.GetFloat("forward"), (pi.Run ? 2.0f : 1.0f), 0.5f));

            if (pi.Dmag > 0.1f && pi.inputEnabled)
            {
                model.transform.forward = Vector3.Slerp(model.transform.forward, pi.Dvec, 0.3f);
            }

            if (!lockPlanar)
            {
                planarVec = pi.Dmag * model.transform.forward * walkSpeed * (pi.Run ? runMulti : 1.0f);
            }
        }

        if (pi.Jump)
        {
            anim.SetTrigger("jump");
            canAttack = false;
        }

        if (pi.Roll || rigid.velocity.magnitude > rollVelocityThreshold)
        {
            anim.SetTrigger("roll");
            canAttack = false;
        }

        if (leftIsShield)
        {
            if (CheckAnimatorStateWithName("ground") || CheckAnimatorStateWithName("blocked"))
            {
                anim.SetBool("defense", pi.Defense);
                anim.SetLayerWeight(anim.GetLayerIndex("Defense"), 1.0f);
            }
            else
            {
                anim.SetBool("defense", false);
                anim.SetLayerWeight(anim.GetLayerIndex("Defense"), 0);
            }
        }
        else
        {
            anim.SetLayerWeight(anim.GetLayerIndex("Defense"), 0);
        }

        if (canAttack && (CheckAnimatorStateWithName("ground") || CheckAnimatorStateWithTag("attackL") || CheckAnimatorStateWithTag("attackR")))
        {
            if (pi.LeftAttack || pi.RightAttack)
            {
                if (pi.LeftAttack && !leftIsShield)
                {
                    anim.SetBool("leftHandAttack", true);
                    anim.SetTrigger("attack");
                }
                else if (pi.RightAttack)
                {
                    anim.SetBool("leftHandAttack", false);
                    anim.SetTrigger("attack");
                }
            }

            if (pi.LeftHeavyAttack || pi.RightHeavyAttack)
            {
                if (pi.RightHeavyAttack)
                {
                    //right heavy attack
                }
                else
                {
                    if (!leftIsShield)
                    {
                        //left heavy attack
                    }
                    else
                    {
                        anim.SetTrigger("counterBack");
                    }
                }
            }
        }

        if (pi.Action)
        {
            OnActionPressed.Invoke();
        }
    }