Exemple #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);
            }
        }
    }
Exemple #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);
        }
    }
Exemple #3
0
    /// <summary>
    /// Generate Input Command from Controller
    /// </summary>
    private void GenerateInputCommand()
    {
        // read inputs
        float h      = m_Horizontal;
        float v      = m_Vertical;
        bool  crouch = m_Crouch;

        // calculate move direction to pass to character
        if (m_Cam != null)
        {
            // calculate camera relative direction to move:
            m_CamForward = Vector3.Scale(m_Cam.forward, new Vector3(1, 0, 1)).normalized;
            m_Move       = v * m_CamForward + h * m_Cam.right;
        }
        else
        {
            // we use world-relative directions in the case of no main camera
            m_Move = v * Vector3.forward + h * Vector3.right;
        }
#if !MOBILE_INPUT
        // walk speed multiplier
        if (m_Walk)
        {
            m_Move *= 0.5f;
        }
#endif

        ICharacterCmdInput input = CharacterCmd.Create();

        input.Move   = m_Move;
        input.Jump   = m_Jump;
        input.Crouch = crouch;

        entity.QueueInput(input);

        m_Jump = false;
    }