/** * Implements the moving logic */ private void Move(bool enableVertical, bool enableHorizontal) { _vertical = (enableVertical) ? Input.GetVertical() : 0; _horizontal = (enableHorizontal) ? Input.GetHorizontal() : 0; // If we are pulling a box and trying to move in the pulling direction, we instruct the box to pull if (_playerState == PlayerState.pulling && DoesMoveInPullDirection()) { _pushableToPull.Pull(viewDirection.Inverse(), this); } // Otherwise, move normally else { // Scale movement speed by the input axis value and the passed time to get a delta which must be applied to the current position Vector2 deltaPosition = new Vector2( _horizontal, _vertical ) * (speed * Time.deltaTime); if (!Mathf.Approximately(deltaPosition.x, 0.0f) || !Mathf.Approximately(deltaPosition.y, 0.0f)) { _lookDirection.Set(deltaPosition.x, deltaPosition.y); _lookDirection.Normalize(); } Animator.SetFloat(LookXProperty, _lookDirection.x); Animator.SetFloat(LookYProperty, _lookDirection.y); Animator.SetFloat(SpeedProperty, deltaPosition.magnitude); PhysicsEffects.MoveBody( Rigidbody2D.position + deltaPosition ); } }