Exemplo n.º 1
0
        public void UpdateRenderText(Entity renderTextEntity, ref RenderText renderText)//, float3 position, float fontSize, FontDatam font)
        {
            int desiredLength = renderText.fontIndexes.Length;
            int actualLength  = renderText.letters.Length;

            //UnityEngine.Debug.LogError("Spawning Render Text. Desired Length is: " + desiredLength + " and actualLength is: " + actualLength);
            if (desiredLength > actualLength)
            {
                //UnityEngine.Debug.Log("Adding [" + (desiredLength - actualLength) + "] New Characters.");
                BlitableArray <Entity> newLetters = new BlitableArray <Entity>(desiredLength, Unity.Collections.Allocator.Persistent);
                for (int i = 0; i < desiredLength; i++)
                {
                    if (i < renderText.letters.Length)
                    {
                        newLetters[i] = renderText.letters[i];
                    }
                    else
                    {
                        newLetters[i] = SpawnNewFontLetter(ref renderText, renderTextEntity, renderText.fontSize);
                    }
                }
                if (renderText.letters.Length > 0)
                {
                    renderText.letters.Dispose();
                }
                renderText.letters = newLetters;
            }
            // Remove Excess Digits
            if (actualLength > desiredLength)
            {
                BlitableArray <Entity> newLetters = new BlitableArray <Entity>(desiredLength, Unity.Collections.Allocator.Persistent);
                //UnityEngine.Debug.Log("Removing [" + (actualLength - desiredLength) + "] Old Characters.");
                for (int i = 0; i < renderText.letters.Length; i++)
                {
                    if (i < newLetters.Length)
                    {
                        newLetters[i] = renderText.letters[i];
                    }
                    else
                    {
                        World.EntityManager.DestroyEntity(renderText.letters[i]);
                    }
                }
                if (renderText.letters.Length > 0)
                {
                    renderText.letters.Dispose();
                }
                renderText.letters = newLetters;
            }
            // now set them all
            float3 offset = float3.zero;

            // first get total size
            // now we know the offset for centring
            if (renderText.alignment == 0)
            {
                // no alignment
                offset.x = ((-desiredLength - 1f) / 2f) * renderText.fontSize;// should be offset by half total size
            }
            if (renderText.alignment == 1)
            {
                // right aligned
                offset.x = (-desiredLength - 0.5f) * renderText.fontSize + renderText.offsetX;
            }
            if (renderText.offsetX != 0)
            {
                offset.x = renderText.offsetX;
            }
            offset.z = -0.005f;
            for (int i = 0; i < renderText.letters.Length; i++)
            {
                // set position first
                offset.x += renderText.fontSize;  // should be based on particular font
                if (renderText.fontIndexes[i] != 255)
                {
                    Translation translation = World.EntityManager.GetComponentData <Translation>(
                        renderText.letters[i]);
                    translation.Value = offset;
                    World.EntityManager.SetComponentData(renderText.letters[i], translation);

                    // Set Texture
                    // should check if changed or not
                    Unity.Rendering.RenderMesh render =
                        World.EntityManager.GetSharedComponentData <Unity.Rendering.RenderMesh>(renderText.letters[i]);
                    render.material.SetTexture("_BaseMap", uiData.font.textures[(int)renderText.fontIndexes[i]]);
                    World.EntityManager.SetSharedComponentData(renderText.letters[i], render);
                    SetLetterColor(World.EntityManager, renderText.letters[i], renderText.GetColor());
                }
                else
                {
                    SetLetterColor(World.EntityManager, renderText.letters[i],
                                   new UnityEngine.Color(0, 0, 0, 0));
                }
            }
        }