public void ApplyCommandOnPlayer(PlayerBody body, MovementCommand command, float deltaTime = -1)
    {
        if(deltaTime < 0)
        {
            deltaTime = Time.deltaTime;
        }

        Transform bodyTransform = body.gameObject.transform;
        Rigidbody bodyRigidbody = body.gameObject.rigidbody;
        if(command.LateralAxis != 0)
        {
            float torqueMagnitude = body.RotAcceleration * command.LateralAxis * deltaTime;
            bodyRigidbody.AddTorque(bodyTransform.up.normalized * torqueMagnitude);
        }

        if(command.FrontAxis != 0)
        {
            float forceMagnitude = body.LinearAcceleration * command.FrontAxis * deltaTime;
            /*
            Vector3 comOffset = (-bodyTransform.up + bodyTransform.forward * Mathf.Sign(command.FrontAxis)) / 2;
            bodyRigidbody.AddForceAtPosition(bodyTransform.forward * forceMagnitude, bodyRigidbody.centerOfMass + comOffset, ForceMode.Acceleration);
            */
            bodyRigidbody.AddForce(bodyTransform.forward.normalized*forceMagnitude);
        }

        if(command.TestButton(MovementCommand.ActionFlags.Jump))
        {
            body.Jump();
        }
    }
    public void ApplyCommandOnPlayer(PlayerBody body, MovementCommand command, float deltaTime = -1)
    {
        if(deltaTime < 0)
        {
            deltaTime = Time.deltaTime;
        }

        if(command.HasMovement)
        {
        Debug.Log("Command have ("+command.FrontAxis+","+command.LateralAxis+")");
            Transform cameraReference = body.ActiveCamera.transform;
            Rigidbody rigidbody = body.gameObject.rigidbody;
            Transform playerTransform = body.gameObject.transform;
            //calculate target movement
            Vector3 targetMovement = (command.FrontAxis * cameraReference.forward) + (command.LateralAxis * cameraReference.right);
            targetMovement.y = 0;		//purge vertical component
            targetMovement.Normalize();	//normalize

            Vector2 commandVector = new Vector2(command.FrontAxis, command.LateralAxis);

            //accelerate toward target movement
            rigidbody.AddForce(targetMovement * commandVector.magnitude * body.LinearAcceleration * deltaTime);

            //gradually rotate front toward target

            Vector3 currentFront = playerTransform.forward;
            currentFront.y = 0;
            currentFront.Normalize();	//prevent

            float angle = Vector3.Angle(currentFront, targetMovement);
            if(angle != 0)
            {
                //check if remaining delta is smaller than what's percorrble with current angular velocity
                playerTransform.rotation = Quaternion.LookRotation(Vector3.RotateTowards(playerTransform.forward, targetMovement, body.RotAcceleration * deltaTime, body.LinearAcceleration * deltaTime));
                /*
                float potential = body.RotAcceleration * deltaTime;
                if(angle < potential)
                {
                    playerTransform.rotation = Quaternion.LookRotation(Vector3.RotateTowards(playerTransform.forward, targetMovement, 0, 0));
                }
                else
                {
                    rigidbody.AddTorque(body.transform.up * potential);
                }
                */
            }

        }

        if(command.TestButton(MovementCommand.ActionFlags.Jump))
        {
            body.Jump();
        }
    }
示例#3
0
    void SubscribeInputControls()
    {
        #region Player Controls
        controls.Player.Jump.started += context => playerBody.Jump();

        controls.Player.SwapItem.started   += context => playerBody.SwapItem();
        controls.Player.UseItem.started    += context => playerBody.UseItem();
        controls.Player.RemoveItem.started += context => playerBody.RemoveItem();

        controls.Player.Water.started += context => playerBody.Water();

        controls.Player.Pause.started += context => playerUIManager.Pause();

        //InputUser.onChange += OnInputUserDeviceChange;
        #endregion

        #region UI Controls

        #endregion
    }