protected override void ApplyNumbers()
        {
            if (Digits == null)
            {
                return;
            }
            if (!Digits.CheckNumbersFull())
            {
                return;
            }

            //to avoid float accuracy issue, convert value to decimal
            if (Value > (double)decimal.MaxValue)
            {
                Debug.LogWarning("Value is bigger than decimal.MaxValue. SpriteDigits cannot display it.");
                Value = (double)decimal.MaxValue;
            }
            decimal num          = (decimal)Value;
            bool    displayMinus = false;

            if (num < 0)
            {
                num          = -num;
                displayMinus = true;
            }

            int digitsBeforePoint = CalcDigitsBeforeDecimalPoint(num);

            //prepare renderers dynamically
            PrepareNumberRenderers(DisplayDecimalPlaces + digitsBeforePoint);

            //check sprite height
            float spriteHeight = Digits.NumberSprites[0].bounds.size.y;
            float size         = Mathf.Min(Size, MyRectTransform.rect.height);
            float letterScale  = size / spriteHeight;

            //set sprite and check sprites' total width
            float originalWidth  = SetNumberSpriteToRenderers(num, ref digitsBeforePoint, displayMinus);
            float widthWithSpace = originalWidth * letterScale + (digitsBeforePoint + DisplayDecimalPlaces) * Spacing;

            if (displayMinus)
            {
                widthWithSpace += Spacing;
            }

            //determine scale
            float spacingScale = 1f;

            if (MyRectTransform.rect.width < widthWithSpace)
            {
                spacingScale   = MyRectTransform.rect.width / widthWithSpace;
                letterScale    = letterScale * spacingScale;
                widthWithSpace = MyRectTransform.rect.width;
            }

            //set position
            SetupSpritePositions(letterScale, spacingScale, widthWithSpace, digitsBeforePoint, displayMinus);
        }
Esempio n. 2
0
        protected override void ApplyNumbers()
        {
            if (Digits == null)
            {
                return;
            }
            if (!Digits.CheckNumbers())
            {
                return;
            }

            long num          = Value;
            bool displayMinus = false;

            if (num < 0)
            {
                //ignores minus value if minus sprite not found
                if (Digits.MinusDisplaySprite == null)
                {
                    num = 0;
                }
                else
                {
                    num          = -num;
                    displayMinus = true;
                }
            }

            int digitNum = GetDigitNumber(num);

            //counter-stop
            if (MaxDigitNum != -1 && MaxDigitNum < digitNum)
            {
                num      = Power(10, MaxDigitNum) - 1;
                digitNum = MaxDigitNum;
            }

            int displayDigitNum = digitNum;

            if (MaxDigitNum == -1)
            {
                //unlimited digits
                PrepareNumberRenderers(digitNum);
            }
            else if (PaddingMode == PaddingMode.ZeroFill)
            {
                //zero fill
                displayDigitNum = MaxDigitNum;
            }

            //check sprite height
            float spriteHeight = Digits.NumberSprites[0].bounds.size.y;
            float size         = Mathf.Min(Size, MyRectTransform.rect.height);
            float letterScale  = size / spriteHeight;

            //set sprite and check sprites' total width
            float originalWidth  = SetNumberSpriteToRenderers(num, displayDigitNum, displayMinus);
            float widthWithSpace = originalWidth * letterScale + (displayDigitNum - 1) * Spacing;

            if (displayMinus)
            {
                widthWithSpace += Spacing;
            }

            //determine scale
            float spacingScale = 1f;

            if (MyRectTransform.rect.width < widthWithSpace)
            {
                spacingScale   = MyRectTransform.rect.width / widthWithSpace;
                letterScale    = letterScale * spacingScale;
                widthWithSpace = MyRectTransform.rect.width;
            }

            //set position
            SetupSpritePositions(letterScale, spacingScale, widthWithSpace, displayDigitNum, displayMinus);
        }