private static void FormFromCircumference(TaleWorlds.MountAndBlade.CircularFormation circularFormation, float circumference,
                                                  int countWithOverride, int maximumDepth, float distance, float interval, float unitDiameter)
        {
            float num1     = (float)(6.28318548202515 * (distance + (double)unitDiameter) / (interval + (double)unitDiameter));
            int   num2     = MBMath.Round(maximumDepth * (maximumDepth - 1) / 2 * num1);
            float minValue =
                Math.Max(0, Math.Min(MBMath.Round((countWithOverride + num2) / maximumDepth), countWithOverride)) *
                (interval + unitDiameter);
            float maxValue = Math.Max(0, countWithOverride - 1) * (interval + unitDiameter);

            circumference           = MBMath.ClampFloat(circumference, minValue, maxValue);
            circularFormation.Width = circumference + unitDiameter;
        }
        protected override IEnumerable <Vec2i> GetRestrainedUnitPositions()
        {
            CircularFormation circularFormation = this;

            for (int fileIndex = 0; fileIndex < circularFormation.FileCount; ++fileIndex)
            {
                // ISSUE: explicit non-virtual call
                for (int rankIndex = 0; rankIndex < __nonvirtual(circularFormation.RankCount); ++rankIndex)
                {
                    if (circularFormation.IsUnitPositionRestrained(fileIndex, rankIndex))
                    {
                        yield return(new Vec2i(fileIndex, rankIndex));
                    }
                }
            }
        }