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; } } }