public static void SetLetterColor(EntityManager entityManager, Entity letter, UnityEngine.Color newColor) { Unity.Rendering.RenderMesh render = entityManager.GetSharedComponentData <Unity.Rendering.RenderMesh>(letter); if (render.material != null) { render.material.SetColor("_BaseColor", newColor); } entityManager.SetSharedComponentData(letter, render); }
private static void RefreshPanelSize(EntityManager entityManager, Entity panelUI, float fontSize, int textLength) { float2 panelSize = new float2(textLength * fontSize, fontSize); //UnityEngine.Debug.LogError("Resized dialogue panel to: " + panelSize); Unity.Rendering.RenderMesh renderMesh = entityManager.GetSharedComponentData <Unity.Rendering.RenderMesh>(panelUI); renderMesh.mesh = MeshUtilities.CreateQuadMesh(panelSize); entityManager.SetSharedComponentData(panelUI, renderMesh); var panel = entityManager.GetComponentData <PanelUI>(panelUI); panel.size = panelSize; panel.outlineDirty = 1; entityManager.SetComponentData(panelUI, panel); }
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)); } } }