Example #1
0
    // Update is called once per frame
    public override void SimulateController()
    {
        ITPCCommandInput input = TPCCommand.Create();

        float h = CrossPlatformInputManager.GetAxis("Horizontal");
        float v = CrossPlatformInputManager.GetAxis("Vertical");

        if (m_Cam == null && GameObject.Find("Cameras"))
        {
            Transform cam = GameObject.Find("Cameras").transform.GetChild(0).GetChild(0).GetChild(0);
            m_Cam = cam;
        }

        Vector3 move = Vector3.zero;

        if (m_Cam != null)
        {
            // calculate camera relative direction to move:
            m_CamForward = Vector3.Scale(m_Cam.forward, new Vector3(1, 0, 1)).normalized;
            //input.camPosition = v * m_CamForward + h * m_Cam.right;

            move = v * m_CamForward + h * m_Cam.right;
            if (move.magnitude > 1f)
            {
                move.Normalize();
            }
            move = transform.InverseTransformDirection(move);

            move = Vector3.ProjectOnPlane(move, m_GroundNormal);

            m_ForwardAmount = move.z;
            m_TurnAmount    = Mathf.Atan2(move.x, move.z);
            // m_Crouching = Input.GetKey(KeyCode.C);

            input.forward = m_ForwardAmount;
            input.turn    = m_TurnAmount;
            // m_Animator.SetFloat("Forward", m_ForwardAmount, 0.1f, Time.deltaTime);
            // m_Animator.SetFloat("Turn", m_TurnAmount, 0.1f, Time.deltaTime);
        }



        //_cc.Move(v * m_CamForward / 20 + h * m_Cam.right * Time.deltaTime * 2); //time.detlatime for both

        input.move   = 3 * (v * m_CamForward * Time.deltaTime + h * m_Cam.right * Time.deltaTime);
        input.crouch = Input.GetKey(KeyCode.C);
        input.jump   = Input.GetKey(KeyCode.Space);
        entity.QueueInput(input);
    }
    public override void ExecuteCommand(Bolt.Command c, bool resetState)
    {
        TPCCommand cmd = (TPCCommand)c;

        if (resetState)
        {
            _motor.SetState(cmd.Result.position, cmd.Result.velocity, cmd.Result.isGrounded, cmd.Result.jumpFrames);

            //transform.localPosition = cmd.Result.position;
            //_cc.Move(cmd.Result.velocity);
            //_velocity = cmd.Input.move;
            //_motor.SetState(cmd.Result.position, cmd.Result.velocity, cmd.Result.isGrounded, cmd.Result.jumpFrames);
        }
        else
        {
            var result = _motor.Move(cmd.Input.crouch, cmd.Input.forward, cmd.Input.jump, cmd.Input.move, cmd.Input.turn);

            cmd.Result.position   = result.position;
            cmd.Result.velocity   = result.velocity;
            cmd.Result.jumpFrames = result.jumpFrames;
            cmd.Result.isGrounded = result.isGrounded;

            m_Animator.SetFloat("Forward", cmd.Input.forward, 0f, Time.deltaTime);
            m_Animator.SetFloat("Turn", cmd.Input.turn, 0f, Time.deltaTime);
            m_Animator.SetBool("Crouch", cmd.Input.crouch);
            m_Animator.SetBool("OnGround", cmd.Result.isGrounded);

            if (entity.IsOwner)
            {
                state.forward  = m_Animator.GetFloat("Forward");
                state.turn     = m_Animator.GetFloat("Turn");
                state.crouch   = m_Animator.GetBool("Crouch");
                state.grounded = m_Animator.GetBool("OnGround");
            }

            /*
             *
             * Vector3 move = cmd.Input.move;
             * if (move.magnitude > 1f)
             * move.Normalize();
             * move = transform.InverseTransformDirection(move);
             *
             * move = Vector3.ProjectOnPlane(move, m_GroundNormal);
             *
             * m_TurnAmount = Mathf.Atan2(move.x, move.z);
             * m_ForwardAmount = move.z;
             *
             * m_IsGrounded = _cc.Move(cmd.Input.move * BoltNetwork.frameDeltaTime) == CollisionFlags.Below;
             * m_IsGrounded = m_IsGrounded || _cc.isGrounded;
             * m_IsGrounded = m_IsGrounded || Physics.CheckSphere(sphere, _cc.radius, layerMask);
             * Debug.Log(m_IsGrounded);
             *
             * Vector3 _vel = cmd.Input.move;
             * if (m_IsGrounded == false)
             * _vel.y -= 0.1f;
             * else if(cmd.Input.jump == true)
             * _vel.y += 100f;
             *
             * _cc.Move(_vel);
             *
             * //_velocity = cmd.Input.move;
             * //_cc.Move(cmd.Input.move);
             *
             * float turnSpeed = Mathf.Lerp(180, 360, m_ForwardAmount);
             * transform.Rotate(0, m_TurnAmount * turnSpeed * Time.deltaTime, 0);
             *
             * m_Animator.SetFloat("Forward", cmd.Input.Forward, 0.1f, Time.deltaTime);
             * m_Animator.SetFloat("Turn", cmd.Input.Turn, 0.1f, Time.deltaTime);
             * m_Animator.SetBool("Crouch", cmd.Input.crouch);
             *
             * if (entity.isOwner)
             * {
             * state.Forward = m_Animator.GetFloat("Forward");
             * state.Turn = m_Animator.GetFloat("Turn");
             * state.Crouch = m_Animator.GetBool("Crouch");
             * }
             *
             * cmd.Result.position = transform.localPosition;
             * cmd.Result.velocity = (_cc.velocity);
             *
             */
        }
    }