< Summary

Class:DCL.Skybox.SkyboxDomeElements
Assembly:ProceduralSkybox
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Rendering/ProceduralSkybox/ToolProceduralSkybox/Scripts/Skybox3DElements/SkyboxDomeElements.cs
Covered lines:0
Uncovered lines:70
Coverable lines:70
Total lines:176
Line coverage:0% (0 of 70)
Covered branches:0
Total branches:0
Covered methods:0
Total methods:8
Method coverage:0% (0 of 8)

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
SkyboxDomeElements(...)0%2100%
Initialize()0%12300%
ResetObjects()0%6200%
GetDomeReference()0%6200%
InstantiateNewDome()0%6200%
GetOrderedGameobjectList(...)0%12300%
ApplyDomeConfigurations(...)0%20400%
ResolveCameraDependency(...)0%6200%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Rendering/ProceduralSkybox/ToolProceduralSkybox/Scripts/Skybox3DElements/SkyboxDomeElements.cs

#LineLine coverage
 1using System.Collections;
 2using System.Collections.Generic;
 3using DCL.Helpers;
 4using UnityEngine;
 5
 6namespace DCL.Skybox
 7{
 8    public class DomeReferences
 9    {
 10        public GameObject domeGO;
 11        public Material domeMat;
 12        public bool domeInUse;
 13    }
 14
 15    public class SkyboxDomeElements
 16    {
 17        private const string DOME_RESOURCES_PATH = "SkyboxPrefabs/Dome";
 18
 19        private readonly GameObject domeElements;
 20        private GameObject domePrefab;
 21        private FollowBehaviour followBehavior;
 22        private MaterialReferenceContainer materialReferenceContainer;
 23
 024        Queue<DomeReferences> domeObjects = new Queue<DomeReferences>();
 025        Queue<DomeReferences> activeDomeObjects = new Queue<DomeReferences>();
 26
 027        public SkyboxDomeElements(GameObject domeElements, MaterialReferenceContainer materialReferenceContainer)
 28        {
 029            this.materialReferenceContainer = materialReferenceContainer;
 030            this.domeElements = domeElements;
 031            Initialize();
 032        }
 33
 34        private void Initialize()
 35        {
 036            if (domeElements == null)
 37            {
 038                Debug.LogError("Dome Elements Container is null");
 039                return;
 40            }
 41
 042            followBehavior = domeElements.GetOrCreateComponent<FollowBehaviour>();
 043            followBehavior.followPos = true;
 44
 045            for (int i = 0; i < domeElements.transform.childCount; i++)
 46            {
 047                DomeReferences dome = new DomeReferences();
 048                dome.domeGO = domeElements.transform.GetChild(i).gameObject;
 049                dome.domeGO.GetComponent<Renderer>().material = Object.Instantiate(materialReferenceContainer.domeMat);
 050                dome.domeMat = dome.domeGO.GetComponent<Renderer>().sharedMaterial;
 051                dome.domeGO.SetActive(false);
 052                domeObjects.Enqueue(dome);
 53            }
 054        }
 55
 56        public void ResetObjects()
 57        {
 058            while (activeDomeObjects.Count > 0)
 59            {
 060                DomeReferences dome = activeDomeObjects.Dequeue();
 061                dome.domeGO.SetActive(false);
 062                domeObjects.Enqueue(dome);
 63            }
 064        }
 65
 66        private DomeReferences GetDomeReference()
 67        {
 068            DomeReferences dome = null;
 069            if (domeObjects.Count <= 0)
 70            {
 071                dome = InstantiateNewDome();
 72            }
 73            else
 74            {
 075                dome = domeObjects.Dequeue();
 76            }
 77
 078            dome.domeGO.SetActive(true);
 79
 80            // Add to active objects
 081            activeDomeObjects.Enqueue(dome);
 082            return dome;
 83        }
 84
 85        private DomeReferences InstantiateNewDome()
 86        {
 087            if (domePrefab == null)
 88            {
 089                domePrefab = Resources.Load<GameObject>(DOME_RESOURCES_PATH);
 90            }
 91
 092            GameObject obj = GameObject.Instantiate<GameObject>(domePrefab);
 093            obj.layer = LayerMask.NameToLayer("Skybox");
 094            obj.name = "Dome";
 095            obj.transform.parent = domeElements.transform;
 096            obj.transform.localPosition = new Vector3(0, -0.7f, 0);
 097            obj.GetComponent<Renderer>().material = Object.Instantiate<Material>(materialReferenceContainer.domeMat);
 98
 099            DomeReferences dome = new DomeReferences();
 0100            dome.domeGO = obj;
 0101            dome.domeMat = obj.GetComponent<Renderer>().sharedMaterial;
 102
 0103            return dome;
 104        }
 105
 106        private List<DomeReferences> GetOrderedGameobjectList(List<Config3DDome> configList)
 107        {
 0108            ResetObjects();
 0109            List<DomeReferences> orderedList = new List<DomeReferences>();
 110            // make a list of domes for each active dome config
 111
 0112            for (int i = 0; i < configList.Count; i++)
 113            {
 0114                if (!configList[i].enabled)
 115                {
 116                    continue;
 117                }
 118
 0119                DomeReferences dome = GetDomeReference();
 120
 0121                orderedList.Insert(0, dome);
 122            }
 123
 0124            return orderedList;
 125        }
 126
 127        public void ApplyDomeConfigurations(SkyboxConfiguration config, float dayTime, float normalizedDayTime, Light di
 128        {
 0129            List<DomeReferences> domeReferences = GetOrderedGameobjectList(config.additional3Dconfig);
 130
 131            float percentage = normalizedDayTime * 100;
 0132            int domeCount = 0;
 133
 0134            for (int i = 0; i < config.additional3Dconfig.Count; i++)
 135            {
 0136                if (!config.additional3Dconfig[i].enabled)
 137                {
 138                    // Change all texture layer rendering to NotRendering
 139                    continue;
 140                }
 141
 142                // If dome is not active due to time, Increment dome number, close dome GO and continue
 0143                if (!config.additional3Dconfig[i].IsConfigActive(dayTime, cycleTime))
 144                {
 0145                    domeReferences[domeCount].domeGO.SetActive(false);
 0146                    domeCount++;
 0147                    continue;
 148                }
 149
 0150                domeReferences[domeCount].domeGO.SetActive(true);
 151
 152                // resize
 0153                domeReferences[domeCount].domeGO.transform.localScale = config.additional3Dconfig[i].domeRadius * Vector
 154
 0155                domeReferences[domeCount].domeGO.name = config.additional3Dconfig[i].layers.nameInEditor;
 156
 157                //Apply config
 158                //General Values
 0159                domeReferences[domeCount].domeMat.SetColor(SkyboxShaderUtils.LightTint, config.directionalLightLayer.tin
 0160                domeReferences[domeCount].domeMat.SetVector(SkyboxShaderUtils.LightDirection, directionalLightGO.transfo
 161
 162
 0163                TextureLayerFunctionality.ApplyTextureLayer(domeReferences[domeCount].domeMat, dayTime, normalizedDayTim
 0164                domeCount++;
 165            }
 0166        }
 167
 168        public void ResolveCameraDependency(Transform currentTransform)
 169        {
 0170            if (followBehavior != null)
 171            {
 0172                followBehavior.target = currentTransform.gameObject;
 173            }
 0174        }
 175    }
 176}