< Summary

Class:ECSSystems.BillboardSystem.ECSBillboardSystem
Assembly:ECS7Plugin.Systems.Billboard
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/DCLPlugins/ECS7/Systems/BillboardSystem/ECSBillboardSystem.cs
Covered lines:27
Uncovered lines:2
Coverable lines:29
Total lines:78
Line coverage:93.1% (27 of 29)
Covered branches:0
Total branches:0
Covered methods:2
Total methods:2
Method coverage:100% (2 of 2)

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
ECSBillboardSystem(...)0%110100%
Update()0%9.099089.66%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/DCLPlugins/ECS7/Systems/BillboardSystem/ECSBillboardSystem.cs

#LineLine coverage
 1using DCL;
 2using DCL.ECSComponents;
 3using DCL.ECSRuntime;
 4using DCL.Models;
 5using UnityEngine;
 6
 7namespace ECSSystems.BillboardSystem
 8{
 9    public class ECSBillboardSystem
 10    {
 11        private readonly ECSComponent<PBBillboard> billboardComponent;
 12        private readonly DataStore_Camera camera;
 13
 314        public ECSBillboardSystem(ECSComponent<PBBillboard> billboards, DataStore_Camera camera)
 15        {
 316            this.billboardComponent = billboards;
 317            this.camera = camera;
 318        }
 19
 20        public void Update()
 21        {
 22            const uint BILLBOARD_NONE = (uint)BillboardMode.BmNone;
 23            const uint BILLBOARD_X = (uint)BillboardMode.BmX;
 24            const uint BILLBOARD_Y = (uint)BillboardMode.BmY;
 25            const uint BILLBOARD_Z = (uint)BillboardMode.BmZ;
 26            const uint BILLBOARD_XY = BILLBOARD_X | BILLBOARD_Y;
 27
 128            var billboards = billboardComponent.Get();
 129            int billboardsCount = billboards.Count;
 30
 131            if (billboardsCount == 0)
 032                return;
 33
 134            Transform cameraT = camera.transform.Get();
 135            Vector3 cameraPos = cameraT.position;
 136            Quaternion cameraRotationAxisZ = Quaternion.Euler(0, 0, cameraT.rotation.eulerAngles.z);
 37
 438            for (var i = 0; i < billboardsCount; i++)
 39            {
 140                uint billboardMode = (uint)billboards[i].value.model.GetBillboardMode();
 41
 142                if (billboardMode == BILLBOARD_NONE)
 43                {
 44                    continue;
 45                }
 46
 147                IDCLEntity entity = billboards[i].value.entity;
 148                Transform billboardT = entity.gameObject.transform;
 49
 150                Vector3 billboardForward = billboardT.forward;
 151                Vector3 billboardPos = billboardT.position;
 52
 153                Vector3 forward = billboardForward;
 54
 55                // either or both X and Y are set
 156                if ((billboardMode & BILLBOARD_XY) != 0)
 57                {
 158                    forward = billboardPos - cameraPos;
 59
 160                    if ((billboardMode & BILLBOARD_Y) == 0) forward.x = 0;
 261                    if ((billboardMode & BILLBOARD_X) == 0) forward.y = 0;
 62
 163                    forward.Normalize();
 64                }
 65
 166                Quaternion rotation = forward != Vector3.zero ? Quaternion.LookRotation(forward) : Quaternion.identity;
 67
 68                // apply Z axis rotation
 169                if ((billboardMode & BILLBOARD_Z) != 0)
 70                {
 071                    rotation *= cameraRotationAxisZ;
 72                }
 73
 174                billboardT.rotation = rotation;
 75            }
 176        }
 77    }
 78}