Exemplo n.º 1
0
    /// <summary>
    /// Execute Command
    ///     Called on Owner for authorize and Controller for predictable
    /// </summary>
    /// <param name="command"></param>
    /// <param name="resetState"></param>
    public override void ExecuteCommand(Command command, bool resetState)
    {
        CharacterCmd cmd = command as CharacterCmd;

        if (resetState)
        {
            m_Character.SetState(cmd.Result.Position, cmd.Result.Rotation, cmd.Result.Velocity, cmd.Result.IsGround, cmd.Result.JumpFrame);

            AnimatePlayer(cmd, m_Character.CurrentState);
        }
        else
        {
            TutorialCharacterController.State outputState = m_Character.Move(cmd.Input.Move, cmd.Input.Jump);

            //Update cmd Result
            cmd.Result.Position  = outputState.position;
            cmd.Result.Velocity  = outputState.velocity;
            cmd.Result.Rotation  = outputState.rotation;
            cmd.Result.IsGround  = outputState.isGrounded;
            cmd.Result.JumpFrame = outputState.jumpFrames;

            if (cmd.IsFirstExecution)
            {
                AnimatePlayer(cmd, outputState);
            }
        }
    }
Exemplo n.º 2
0
    //Animating player
    private void AnimatePlayer(CharacterCmd cmd, TutorialCharacterController.State outputState)
    {
        // FWD <> BWD movement
        Vector3 relativeMove = transform.InverseTransformDirection(cmd.Input.Move);

        m_Animator.SetFloat("Forward", relativeMove.z, 0.1f, Time.deltaTime);

        float m_TurnAmount = Mathf.Atan2(relativeMove.x, relativeMove.z);

        m_Animator.SetFloat("Turn", m_TurnAmount, 0.1f, Time.deltaTime);

        if (outputState.isGrounded)
        {
            m_Animator.SetBool("OnGround", true);
            m_Animator.SetFloat("Jump", 0);
        }
        else
        {
            m_Animator.SetBool("OnGround", false);
            m_Animator.SetFloat("Jump", outputState._jumpProgress);
        }
    }