private void pass(BallController ball, Player player, bool triggerAnimation = true)
        {
            if (player.InPassRange(ball.transform.position) && !player.Passing)
            {
                player.Passing = true;
                var targetPlayer = GetPassTarget(player);
                ball.disableGravity();
                ball.Stop();
                var fowardMargin       = -1f * player.TeamFoward.z;
                var targetBallPosition = new Vector3(targetPlayer.Position.x, 2.5f, fowardMargin);
                var direction          = ball.Position.DirectionTo(targetBallPosition);
                direction.y = 1;
                var passStrength = ball.GetNeededForceFromSimulation(ball.Position, targetBallPosition, direction);

                ball.EnableGravity();
                foreach (var teammate in player.Teammates)
                {
                    var isPassTarget = teammate.Id == targetPlayer.Id;
                    teammate.ChangePassTargeState(isPassTarget);
                }
                ball.MoveInDirection(direction, passStrength, player.TeamId);
                player.RemoveAction(PlayerAction.Pass);
                return;
            }
            if (player.InExtendedPassRange(ball.transform.position) &&
                !player.Passing &&
                !player.IsPassing)
            {
                if (triggerAnimation)
                {
                    player.IsPassing = true;
                }
            }
        }