Example #1
0
    // ------------------------------------------------------------------
    // Desc:
    // ------------------------------------------------------------------

    protected override Vector3[] GetVertices(Space _space)
    {
        // TODO: only return the rotated bounding box of the sprite font
        int visibleVertexCount    = text_.Length * 4;
        exList <Vector3> vertices = exList <Vector3> .GetTempList();

        vertices.AddRange(visibleVertexCount);

        SpriteFontBuilder.BuildText(this, _space, vertices, 0);
        return(vertices.ToArray());
    }
Example #2
0
    /*// ------------------------------------------------------------------
     * // Desc:
     * // ------------------------------------------------------------------
     *
     * protected override Vector3[] GetVertices (Space _space) {
     *  // TODO: only return the rotated bounding box of the sprite font
     *  int visibleVertexCount = text_.Length * 4;
     *  exList<Vector3> vertices = exList<Vector3>.GetTempList();
     *  vertices.AddRange(visibleVertexCount);
     *  Matrix4x4 mat = _space == Space.World ? cachedWorldMatrix : Matrix4x4.identity;
     *  BuildText(vertices, 0, ref mat);
     *  return vertices.ToArray();
     * }*/

    // ------------------------------------------------------------------
    // Desc:
    // ------------------------------------------------------------------

    protected override void UpdateVertexAndIndexCount()
    {
        SpriteFontBuilder.GetVertexAndIndexCount(text_, out vertexCount_, out indexCount_);
    }
Example #3
0
    // ------------------------------------------------------------------
    // Desc:
    // ------------------------------------------------------------------

    internal override exUpdateFlags UpdateBuffers(exList <Vector3> _vertices, exList <Vector2> _uvs, exList <Color32> _colors32, exList <int> _indices)
    {
        return(SpriteFontBuilder.UpdateBuffers(this, Space.Self, 1.0f, _vertices, _uvs, _colors32, _indices, 0, 0));
    }
Example #4
0
    // ------------------------------------------------------------------
    // Desc:
    // ------------------------------------------------------------------

    internal override exUpdateFlags UpdateBuffers(exList <Vector3> _vertices,
                                                  exList <Vector2> _uvs,
                                                  exList <Color32> _colors32,
                                                  exList <int> _indices)
    {
        if (font_.isValid == false)
        {
            var  retval      = exUpdateFlags.None;
            bool updateIndex = (updateFlags & (exUpdateFlags.Index | exUpdateFlags.Text)) != 0 && _indices != null;
            if (updateIndex)
            {
                // ensure index buffer in vertex range
                int indexBufferEnd = indexBufferIndex + indexCount - 5;
                for (int i = indexBufferIndex, v = vertexBufferIndex; i < indexBufferEnd; i += 6, v += 4)
                {
                    _indices.buffer[i]     = v;
                    _indices.buffer[i + 1] = v + 1;
                    _indices.buffer[i + 2] = v + 2;
                    _indices.buffer[i + 3] = v + 2;
                    _indices.buffer[i + 4] = v + 3;
                    _indices.buffer[i + 5] = v;
                }
                updateFlags &= ~exUpdateFlags.Index;
                retval      |= exUpdateFlags.Index;
            }
            bool updateVertex = (updateFlags & exUpdateFlags.Text) != 0;
            if (updateVertex)
            {
                Vector3 anyPoint = _vertices.buffer.Length > 0 ? _vertices.buffer[0] : new Vector3();
                for (int i = 0; i < vertexCount_; ++i)
                {
                    _vertices.buffer[vertexBufferIndex + i] = anyPoint;
                }
                updateFlags &= ~exUpdateFlags.Text;
                retval      |= exUpdateFlags.Vertex;
            }
            return(retval);
        }

        bool transparentDirty = (updateFlags & exUpdateFlags.Transparent) != 0;

        if (transparentDirty)
        {
            updateFlags &= ~exUpdateFlags.Transparent;
            if (transparent_)
            {
                // make vertex invisible
                Vector3 anyPoint = _vertices.buffer.Length > 0 ? _vertices.buffer[0] : new Vector3();
                for (int i = 0; i < vertexCount_; ++i)
                {
                    _vertices.buffer[vertexBufferIndex + i] = anyPoint;
                }
                updateFlags &= ~exUpdateFlags.Vertex;
                return(updateFlags | exUpdateFlags.Vertex);   // 既然不可见,直接让mesh更新各个buffer即可。这里不重设updateFlags,所以变回可见时会正确初始化。
            }
            else
            {
                // revert vertex
                updateFlags |= exUpdateFlags.Vertex;
            }
        }
        else if (transparent_)
        {
            return(exUpdateFlags.None);
        }

        return(SpriteFontBuilder.UpdateBuffers(this, Space.World, layer_.alpha, _vertices, _uvs,
                                               _colors32, _indices, vertexBufferIndex, indexBufferIndex));
    }