public void CalculateAndExecuteBehaviors()
        {
            Move mover;

            if (movers.Count >= MinGroupSize)
            {
                averageCollisionSize = 0;
                groupPosition        = Vector2d.zero;
                for (int i = 0; i < movers.Count; i++)
                {
                    mover                 = movers [i];
                    groupPosition        += mover.Position;
                    averageCollisionSize += mover.CollisionSize;
                }

                groupPosition        /= movers.Count;
                averageCollisionSize /= movers.Count;

                long biggestSqrDistance = 0;
                for (int i = 0; i < movers.Count; i++)
                {
                    long currentSqrDistance = movers [i].Position.SqrDistance(groupPosition.x, groupPosition.y);
                    if (currentSqrDistance > biggestSqrDistance)
                    {
                        long currentDistance = FixedMath.Sqrt(currentSqrDistance);

                        /*
                         * DistDif = currentDistance - Radius;
                         * if (DistDif > MaximumDistDif * MoversCount / 128) {
                         *  ExecuteGroupIndividualMove ();
                         *  return;
                         * }*/
                        biggestSqrDistance = currentSqrDistance;
                        radius             = currentDistance;
                    }
                }
                if (radius == 0)
                {
                    ExecuteGroupIndividualMove();
                    return;
                }
                long expectedSize = averageCollisionSize.Mul(averageCollisionSize).Mul(FixedMath.One * 2).Mul(movers.Count);
                long groupSize    = radius.Mul(radius);

                if (groupSize > expectedSize || groupPosition.FastDistance(Destination.x, Destination.y) < (radius * radius))
                {
                    ExecuteGroupIndividualMove();
                    return;
                }
                ExecuteGroupMove();
            }
            else
            {
                ExecuteIndividualMove();
            }
        }