< Summary

Class:DCL.ECSComponents.UiTextHandler
Assembly:DCL.ECSComponents.UIText
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/DCLPlugins/ECS7/ECSComponents/UIText/UiTextHandler.cs
Covered lines:35
Uncovered lines:11
Coverable lines:46
Total lines:107
Line coverage:76% (35 of 46)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
UiTextHandler(...)0%110100%
OnComponentCreated(...)0%440100%
OnComponentRemoved(...)0%220100%
OnComponentModelUpdated(...)0%220100%
ToUnityTextAlign(...)0%99.2111010%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/DCLPlugins/ECS7/ECSComponents/UIText/UiTextHandler.cs

#LineLine coverage
 1using DCL.Controllers;
 2using DCL.ECS7.InternalComponents;
 3using DCL.ECSRuntime;
 4using DCL.Models;
 5using UnityEngine;
 6using UnityEngine.UIElements;
 7
 8namespace DCL.ECSComponents
 9{
 10    public class UiTextHandler : IECSComponentHandler<PBUiText>
 11    {
 12        private readonly IInternalECSComponent<InternalUiContainer> internalUiContainer;
 13        private readonly AssetPromiseKeeper_Font fontPromiseKeeper;
 14        private readonly int componentId;
 15
 16        internal Label uiElement;
 17        private AssetPromise_Font fontPromise;
 318        private int lastFontId = -1;
 19
 320        public UiTextHandler(IInternalECSComponent<InternalUiContainer> internalUiContainer,
 21            AssetPromiseKeeper_Font fontPromiseKeeper, int componentId)
 22        {
 323            this.internalUiContainer = internalUiContainer;
 324            this.fontPromiseKeeper = fontPromiseKeeper;
 325            this.componentId = componentId;
 326        }
 27
 28        public void OnComponentCreated(IParcelScene scene, IDCLEntity entity)
 29        {
 330            uiElement = new Label() { text = string.Empty };
 31
 332            var containerModel = internalUiContainer.GetFor(scene, entity)?.model ?? new InternalUiContainer();
 333            containerModel.rootElement.Add(uiElement);
 334            containerModel.components.Add(componentId);
 35
 336            internalUiContainer.PutFor(scene, entity, containerModel);
 337        }
 38
 39        public void OnComponentRemoved(IParcelScene scene, IDCLEntity entity)
 40        {
 141            var containerData = internalUiContainer.GetFor(scene, entity);
 142            if (containerData != null)
 43            {
 144                var containerModel = containerData.model;
 145                containerModel.rootElement.Remove(uiElement);
 146                containerModel.components.Remove(componentId);
 147                internalUiContainer.PutFor(scene, entity, containerModel);
 48            }
 149            uiElement = null;
 150            fontPromiseKeeper.Forget(fontPromise);
 151        }
 52
 53        public void OnComponentModelUpdated(IParcelScene scene, IDCLEntity entity, PBUiText model)
 54        {
 155            uiElement.text = model.Value;
 156            uiElement.style.color = model.GetColor().ToUnityColor();
 157            uiElement.style.fontSize = model.GetFontSize();
 158            uiElement.style.unityTextAlign = ToUnityTextAlign(model.GetTextAlign());
 59
 160            int fontId = (int)model.GetFont();
 161            if (lastFontId != fontId)
 62            {
 163                lastFontId = fontId;
 164                var prevPromise = fontPromise;
 65
 166                fontPromise = new AssetPromise_Font(model.GetFont().ToFontName());
 167                fontPromise.OnSuccessEvent += font =>
 68                {
 069                    uiElement.style.unityFont = font.font.sourceFontFile;
 070                };
 171                fontPromiseKeeper.Keep(fontPromise);
 172                fontPromiseKeeper.Forget(prevPromise);
 73            }
 174        }
 75
 76        private static TextAnchor ToUnityTextAlign(TextAlignMode align)
 77        {
 78            switch (align)
 79            {
 80                case TextAlignMode.TamTopCenter:
 081                    return TextAnchor.UpperCenter;
 82                case TextAlignMode.TamTopLeft:
 083                    return TextAnchor.UpperLeft;
 84                case TextAlignMode.TamTopRight:
 085                    return TextAnchor.UpperRight;
 86
 87                case TextAlignMode.TamBottomCenter:
 088                    return TextAnchor.LowerCenter;
 89                case TextAlignMode.TamBottomLeft:
 090                    return TextAnchor.LowerLeft;
 91                case TextAlignMode.TamBottomRight:
 092                    return TextAnchor.LowerRight;
 93
 94                case TextAlignMode.TamMiddleCenter:
 095                    return TextAnchor.MiddleCenter;
 96                case TextAlignMode.TamMiddleLeft:
 097                    return TextAnchor.MiddleLeft;
 98                case TextAlignMode.TamMiddleRight:
 199                    return TextAnchor.MiddleRight;
 100
 101                default:
 0102                    return TextAnchor.MiddleCenter;
 103            }
 104        }
 105
 106    }
 107}