< Summary

Class:BillboardsController
Assembly:DCL.Components.Billboard
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Components/Billboard/BillboardsController.cs
Covered lines:29
Uncovered lines:6
Coverable lines:35
Total lines:86
Line coverage:82.8% (29 of 35)
Covered branches:0
Total branches:0
Covered methods:8
Total methods:9
Method coverage:88.8% (8 of 9)

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
BillboardsController()0%110100%
Create()0%110100%
Initialize()0%110100%
BillboardAdded(...)0%110100%
BillboardRemoved(...)0%6200%
Dispose()0%110100%
ChangeOrientation(...)0%330100%
UpdateCoroutine()0%9.199086.67%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Components/Billboard/BillboardsController.cs

#LineLine coverage
 1using DCL;
 2using System.Collections;
 3using System.Collections.Generic;
 4using UnityEngine;
 5
 6public class BillboardsController : IBillboardsController
 7{
 4258    private readonly List<IBillboard> billboards = new List<IBillboard>();
 9    private Coroutine updateCoroutine;
 10
 2463511    private Vector3Variable CameraPosition => CommonScriptableObjects.cameraPosition;
 12    private Vector3 lastCamPosition;
 13    private bool camUpdated;
 14
 15
 16    public static BillboardsController Create()
 17    {
 42518        BillboardsController controller = new BillboardsController();
 19
 42520        return controller;
 21    }
 22
 23    public void Initialize()
 24    {
 42525        updateCoroutine = CoroutineStarter.Start(UpdateCoroutine());
 42526    }
 27
 28    public void BillboardAdded(IBillboard billboard)
 29    {
 430        billboards.Add(billboard);
 431        ChangeOrientation(billboard);
 432    }
 33
 34    public void BillboardRemoved(IBillboard billboard)
 35    {
 036        if (!billboards.Contains(billboard))
 037            return;
 38
 039        billboards.Remove(billboard);
 040    }
 41
 42    public void Dispose()
 43    {
 42544        CoroutineStarter.Stop(updateCoroutine);
 42545        billboards.Clear();
 42546    }
 47
 48
 49    private void ChangeOrientation(IBillboard billboard)
 50    {
 1751        if (billboard.EntityTransform == null)
 452            return;
 53
 1354        Vector3 lookAtVector = billboard.GetLookAtVector(CameraPosition);
 1355        if (lookAtVector != Vector3.zero)
 1356            billboard.EntityTransform.forward = lookAtVector;
 1357    }
 58
 59
 60    private IEnumerator UpdateCoroutine()
 61    {
 1188662        while (true)
 63        {
 1231164            camUpdated = lastCamPosition != CameraPosition;
 1231165            lastCamPosition = CameraPosition;
 2471066            for (int i = billboards.Count - 1; i >= 0; i--)
 67            {
 4468                IBillboard billboard = billboards[i];
 4469                if (billboard == null)
 70                {
 071                    billboards.RemoveAt(i);
 072                    continue;
 73                }
 4474                if (billboard.Tr == null || billboard.EntityTransform == null)
 75                    continue;
 1976                if (!camUpdated && billboard.Tr.position == billboard.LastPosition)
 77                    continue;
 78
 1379                billboard.LastPosition = billboard.Tr.position;
 1380                ChangeOrientation(billboard);
 81            }
 82
 1231183            yield return null;
 84        }
 85    }
 86}