< 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

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{
 4938    private readonly List<IBillboard> billboards = new List<IBillboard>();
 9    private Coroutine updateCoroutine;
 10
 5389511    private Vector3Variable CameraPosition => CommonScriptableObjects.cameraPosition;
 12    private Vector3 lastCamPosition;
 13    private bool camUpdated;
 14
 15
 16    public static BillboardsController Create()
 17    {
 49318        BillboardsController controller = new BillboardsController();
 19
 49320        return controller;
 21    }
 22
 23    public void Initialize()
 24    {
 49325        updateCoroutine = CoroutineStarter.Start(UpdateCoroutine());
 49326    }
 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    {
 49344        CoroutineStarter.Stop(updateCoroutine);
 49345        billboards.Clear();
 49346    }
 47
 48
 49    private void ChangeOrientation(IBillboard billboard)
 50    {
 1951        if (billboard.EntityTransform == null)
 452            return;
 53
 1554        Vector3 lookAtVector = billboard.GetLookAtVector(CameraPosition);
 1555        if (lookAtVector != Vector3.zero)
 1556            billboard.EntityTransform.forward = lookAtVector;
 1557    }
 58
 59
 60    private IEnumerator UpdateCoroutine()
 61    {
 2644762        while (true)
 63        {
 2694064            camUpdated = lastCamPosition != CameraPosition;
 2694065            lastCamPosition = CameraPosition;
 5397266            for (int i = billboards.Count - 1; i >= 0; i--)
 67            {
 4668                IBillboard billboard = billboards[i];
 4669                if (billboard == null)
 70                {
 071                    billboards.RemoveAt(i);
 072                    continue;
 73                }
 4674                if (billboard.Tr == null || billboard.EntityTransform == null)
 75                    continue;
 1976                if (!camUpdated && billboard.Tr.position == billboard.LastPosition)
 77                    continue;
 78
 1579                billboard.LastPosition = billboard.Tr.position;
 1580                ChangeOrientation(billboard);
 81            }
 82
 2694083            yield return null;
 84        }
 85    }
 86}