tk2dTextMesh.FillTextData C# (CSharp) Method

FillTextData() private method

private FillTextData ( ) : int
return int
    int FillTextData()
    {
        Vector2 gradientOffset = new Vector2((float)_textureGradient / font.gradientCount, 0);

        Vector2 dims = GetMeshDimensionsForString(_formattedText);
        float offsetY = GetYAnchorForHeight(dims.y);

        bool _useInlineStyling = useInlineStyling;
        float cursorX = 0.0f;
        float cursorY = 0.0f;
        int target = 0;
        int alignStartTarget = 0;
        for (int i = 0; i < _formattedText.Length && target < _maxChars; ++i)
        {
            int idx = _formattedText[i];
            tk2dFontChar chr;

            if (_fontInst.useDictionary)
            {
                if (!_fontInst.charDict.ContainsKey(idx)) idx = 0;
                chr = _fontInst.charDict[idx];
            }
            else
            {
                if (idx >= _fontInst.chars.Length) idx = 0; // should be space
                chr = _fontInst.chars[idx];
            }

            if (idx == '\n')
            {
                float lineWidth = cursorX;
                int alignEndTarget = target; // this is one after the last filled character
                if (alignStartTarget != target)
                {
                    float xOffset = GetXAnchorForWidth(lineWidth);
                    PostAlignTextData(alignStartTarget, alignEndTarget, xOffset);
                }

                alignStartTarget = target;
                cursorX = 0.0f;
                cursorY -= (_fontInst.lineHeight + lineSpacing) * _scale.y;
                continue;
            }
            else if (_useInlineStyling)
            {
                if (idx == '^')
                {
                    if (i+1 < _formattedText.Length)
                    {
                        i++;
                        if (_formattedText[i] != '^')
                        {
                            int data = _formattedText[i] - '0';
                            gradientOffset = new Vector2((float)data / font.gradientCount, 0);
                            continue;
                        }
                    }
                }
            }

            vertices[target * 4 + 0] = new Vector3(cursorX + chr.p0.x * _scale.x, offsetY + cursorY + chr.p0.y * _scale.y, 0);
            vertices[target * 4 + 1] = new Vector3(cursorX + chr.p1.x * _scale.x, offsetY + cursorY + chr.p0.y * _scale.y, 0);
            vertices[target * 4 + 2] = new Vector3(cursorX + chr.p0.x * _scale.x, offsetY + cursorY + chr.p1.y * _scale.y, 0);
            vertices[target * 4 + 3] = new Vector3(cursorX + chr.p1.x * _scale.x, offsetY + cursorY + chr.p1.y * _scale.y, 0);

            if (chr.flipped)
            {
                uvs[target * 4 + 0] = new Vector2(chr.uv1.x, chr.uv1.y);
                uvs[target * 4 + 1] = new Vector2(chr.uv1.x, chr.uv0.y);
                uvs[target * 4 + 2] = new Vector2(chr.uv0.x, chr.uv1.y);
                uvs[target * 4 + 3] = new Vector2(chr.uv0.x, chr.uv0.y);
            }
            else
            {
                uvs[target * 4 + 0] = new Vector2(chr.uv0.x, chr.uv0.y);
                uvs[target * 4 + 1] = new Vector2(chr.uv1.x, chr.uv0.y);
                uvs[target * 4 + 2] = new Vector2(chr.uv0.x, chr.uv1.y);
                uvs[target * 4 + 3] = new Vector2(chr.uv1.x, chr.uv1.y);
            }

            if (_fontInst.textureGradients)
            {
                uv2[target * 4 + 0] = gradientOffset + chr.gradientUv[0];
                uv2[target * 4 + 1] = gradientOffset + chr.gradientUv[1];
                uv2[target * 4 + 2] = gradientOffset + chr.gradientUv[2];
                uv2[target * 4 + 3] = gradientOffset + chr.gradientUv[3];
            }

            cursorX += (chr.advance + spacing) * _scale.x;

            if (_kerning && i < _formattedText.Length - 1)
            {
                foreach (var k in _fontInst.kerning)
                {
                    if (k.c0 == _formattedText[i] && k.c1 == _formattedText[i+1])
                    {
                        cursorX += k.amount * _scale.x;
                        break;
                    }
                }
            }

            ++target;
        }

        if (alignStartTarget != target)
        {
            float lineWidth = cursorX;
            int alignEndTarget = target;
            float xOffset = GetXAnchorForWidth(lineWidth);
            PostAlignTextData(alignStartTarget, alignEndTarget, xOffset);
        }

        return target;
    }