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