< Summary

Class:DCL.Skybox.SatelliteLayerBehaviour
Assembly:ProceduralSkybox
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Rendering/ProceduralSkybox/ToolProceduralSkybox/Scripts/Functionality/SatelliteLayerBehaviour.cs
Covered lines:2
Uncovered lines:123
Coverable lines:125
Total lines:302
Line coverage:1.6% (2 of 125)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
SatelliteLayerBehaviour()0%110100%
UpdateRotation()0%72800%
AssignValues(...)0%6200%
CheckAndAssignMats()0%20400%
ChangeRenderType(...)0%6200%
UpdateSatellitePos(...)0%6200%
UpdateSatelliteSize()0%6200%
UpdateOrbit()0%6200%
GetSatellitePosition(...)0%2100%
CheckIfSatelliteInTimeBounds(...)0%30500%
ApplyFade(...)0%42600%
CheckFadingIn(...)0%12300%
CheckFadingOut(...)0%20400%
OnDrawGizmos()0%12300%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Rendering/ProceduralSkybox/ToolProceduralSkybox/Scripts/Functionality/SatelliteLayerBehaviour.cs

#LineLine coverage
 1using System;
 2using System.Collections;
 3using System.Collections.Generic;
 4using UnityEditor;
 5using UnityEngine;
 6
 7namespace DCL.Skybox
 8{
 9
 10    public class SatelliteLayerBehaviour : MonoBehaviour
 11    {
 12        Config3DSatellite layerProperties;
 13        public GameObject satelliteOrbit;
 14        public GameObject dummyObj;
 15        public GameObject satellite;
 16
 217        public float thickness = 1;
 18
 19        private float currentAngle;
 220        private float cycleTime = 24;
 21        private List<Material> materials;
 22        private Transform camTransform;
 23
 24        private void UpdateRotation()
 25        {
 026            if (satellite == null)
 27            {
 028                return;
 29            }
 30
 031            if (camTransform == null)
 32            {
 033                if (Camera.main != null)
 34                {
 035                    camTransform = Camera.main.transform;
 36                }
 37            }
 38
 039            switch (layerProperties.satelliteRotation)
 40            {
 41                case RotationType.Fixed:
 042                    satellite.transform.localRotation = Quaternion.Euler(layerProperties.fixedRotation);
 043                    break;
 44                case RotationType.Rotate:
 045                    satellite.transform.Rotate(layerProperties.rotateAroundAxis, layerProperties.rotateSpeed * Time.delt
 046                    break;
 47                case RotationType.LookAtOrbit:
 048                    if (camTransform != null)
 49                    {
 050                        satellite.transform.LookAt(camTransform);
 51                    }
 52                    break;
 53                default:
 54                    break;
 55            }
 056        }
 57
 58        internal void AssignValues(Config3DSatellite properties, float timeOfTheDay, float cycleTime, bool isEditor = fa
 59        {
 60            // Check and assign Materials
 061            CheckAndAssignMats();
 62
 063            layerProperties = properties;
 064            layerProperties.radius = Mathf.Clamp(layerProperties.radius, 0, Mathf.Infinity);
 65
 066            this.cycleTime = cycleTime;
 67
 068            if (!CheckIfSatelliteInTimeBounds(timeOfTheDay))
 69            {
 070                satellite.gameObject.SetActive(false);
 071                ChangeRenderType(LayerRenderType.NotRendering);
 072                return;
 73            }
 74
 075            satellite.gameObject.SetActive(true);
 076            ChangeRenderType(LayerRenderType.Rendering);
 77
 78            // Apply fade
 079            ApplyFade(timeOfTheDay);
 80
 81            // Update orbit rotation
 082            UpdateOrbit();
 83            // Change satellite size
 084            UpdateSatelliteSize();
 85
 86            // Update SatellitePosition
 087            UpdateSatellitePos(timeOfTheDay);
 88
 089            UpdateRotation();
 090        }
 91
 92        private void CheckAndAssignMats()
 93        {
 094            if (materials == null)
 95            {
 096                materials = new List<Material>();
 097                Renderer[] renderers = GetComponentsInChildren<Renderer>();
 098                for (int i = 0; i < renderers.Length; i++)
 99                {
 0100                    for (int j = 0; j < renderers[i].sharedMaterials.Length; j++)
 101                    {
 0102                        materials.Add(renderers[i].sharedMaterials[j]);
 103                    }
 104                }
 105            }
 0106        }
 107
 108        public void ChangeRenderType(LayerRenderType type)
 109        {
 0110            if (layerProperties == null)
 111            {
 0112                return;
 113            }
 114
 0115            layerProperties.renderType = type;
 0116        }
 117
 118        private void UpdateSatellitePos(float timeOfTheDay)
 119        {
 0120            float timeOfDayEdited = timeOfTheDay;
 121
 0122            if (timeOfTheDay < layerProperties.timeSpanStart)
 123            {
 0124                timeOfDayEdited += cycleTime;
 125            }
 126
 0127            float diff = timeOfDayEdited - layerProperties.timeSpanStart;
 0128            currentAngle = layerProperties.initialAngle + (diff * layerProperties.movementSpeed);
 129
 0130            dummyObj.transform.localPosition = GetSatellitePosition(layerProperties.radius, currentAngle);
 0131            satellite.transform.position = dummyObj.transform.position;
 0132        }
 133
 134        private void UpdateSatelliteSize()
 135        {
 0136            if (satellite == null)
 137            {
 0138                return;
 139            }
 140            // change satellite size
 0141            satellite.transform.localScale = Vector3.one * layerProperties.satelliteSize;
 0142        }
 143
 144        /// <summary>
 145        /// Update Rotation and position
 146        /// </summary>
 147        private void UpdateOrbit()
 148        {
 0149            if (satelliteOrbit == null)
 150            {
 0151                Debug.LogError("Satellite Orbit not assigned");
 0152                return;
 153            }
 154
 155            // Orbit vertical placement
 0156            Vector3 pos = satelliteOrbit.transform.localPosition;
 0157            pos.y = layerProperties.orbitYOffset;
 0158            satelliteOrbit.transform.localPosition = pos;
 159
 160            //  Rotate orbit plane along horizon line
 0161            Vector3 rot = satelliteOrbit.transform.localRotation.eulerAngles;
 0162            rot.z = 0;
 0163            rot.y = layerProperties.horizonPlaneRotation;
 164            //  Rotate orbit plane along inclination line
 0165            rot.x = layerProperties.inclination;
 0166            satelliteOrbit.transform.localRotation = Quaternion.Euler(rot);
 0167        }
 168
 169        private Vector3 GetSatellitePosition(float radius, float angle)
 170        {
 0171            angle = angle % 360;
 0172            float angleEdited = (90 - angle) * Mathf.Deg2Rad;
 0173            float x = radius * Mathf.Cos(angleEdited);
 0174            float y = radius * Mathf.Sin(angleEdited);
 0175            return new Vector3(x, y, 0);
 176        }
 177
 178        private bool CheckIfSatelliteInTimeBounds(float timeOfTheDay)
 179        {
 180            // Calculate edited time for the case of out time less than in time (over the day scenario)
 0181            float outTimeEdited = layerProperties.timeSpanEnd;
 0182            float timeOfTheDayEdited = timeOfTheDay;
 183
 0184            if (layerProperties.timeSpanEnd < layerProperties.timeSpanStart)
 185            {
 0186                outTimeEdited += cycleTime;
 187            }
 188
 0189            if (timeOfTheDay < layerProperties.timeSpanStart)
 190            {
 0191                timeOfTheDayEdited += cycleTime;
 192            }
 193
 0194            if (timeOfTheDayEdited >= layerProperties.timeSpanStart && timeOfTheDayEdited <= outTimeEdited)
 195            {
 0196                return true;
 197            }
 198            else
 199            {
 0200                return false;
 201            }
 202        }
 203
 204        private void ApplyFade(float timeOfTheDay)
 205        {
 0206            float fadeAmount = 1;
 207
 0208            if (CheckFadingIn(timeOfTheDay, out fadeAmount))
 209            {
 0210                for (int i = 0; i < materials.Count; i++)
 211                {
 0212                    materials[i].SetFloat(SkyboxShaderUtils.Opacity, fadeAmount);
 213                }
 214            }
 0215            else if (CheckFadingOut(timeOfTheDay, out fadeAmount))
 216            {
 0217                for (int i = 0; i < materials.Count; i++)
 218                {
 0219                    materials[i].SetFloat(SkyboxShaderUtils.Opacity, fadeAmount);
 220                }
 221            }
 222            else
 223            {
 0224                for (int i = 0; i < materials.Count; i++)
 225                {
 0226                    materials[i].SetFloat(SkyboxShaderUtils.Opacity, fadeAmount);
 227                }
 228
 229            }
 0230        }
 231
 232        private bool CheckFadingIn(float dayTime, out float fadeAmt)
 233        {
 0234            fadeAmt = 1;
 0235            bool fadeChanged = false;
 0236            float fadeInCompletionTime = layerProperties.timeSpanStart + layerProperties.fadeInTime;
 0237            float dayTimeEdited = dayTime;
 0238            if (dayTime < layerProperties.timeSpanStart)
 239            {
 0240                dayTimeEdited = cycleTime + dayTime;
 241            }
 242
 0243            if (dayTimeEdited < fadeInCompletionTime)
 244            {
 0245                float percentage = Mathf.InverseLerp(layerProperties.timeSpanStart, fadeInCompletionTime, dayTimeEdited)
 0246                fadeAmt = percentage;
 0247                fadeChanged = true;
 248            }
 249
 0250            return fadeChanged;
 251        }
 252
 253        private bool CheckFadingOut(float dayTime, out float fadeAmt)
 254        {
 0255            fadeAmt = 1;
 0256            bool fadeChanged = false;
 0257            float endTimeEdited = layerProperties.timeSpanEnd;
 0258            float dayTimeEdited = dayTime;
 259
 0260            if (layerProperties.timeSpanEnd < layerProperties.timeSpanStart)
 261            {
 0262                endTimeEdited = cycleTime + layerProperties.timeSpanEnd;
 263            }
 264
 0265            if (dayTime < layerProperties.timeSpanStart)
 266            {
 0267                dayTimeEdited = cycleTime + dayTime;
 268            }
 269
 270
 0271            float fadeOutStartTime = endTimeEdited - layerProperties.fadeOutTime;
 272
 0273            if (dayTimeEdited > fadeOutStartTime)
 274            {
 0275                float percentage = Mathf.InverseLerp(endTimeEdited, fadeOutStartTime, dayTimeEdited);
 0276                fadeAmt = percentage;
 0277                fadeChanged = true;
 278            }
 279
 0280            return fadeChanged;
 281        }
 282
 283#if UNITY_EDITOR
 284        private void OnDrawGizmos()
 285        {
 0286            var tr = transform;
 0287            var position = tr.position;
 0288            Handles.color = Color.gray;
 0289            Handles.DrawWireDisc(position, Vector3.up, 1000, thickness);
 290
 0291            if (satelliteOrbit == null || layerProperties == null)
 292            {
 0293                return;
 294            }
 0295            position = satelliteOrbit.transform.position;
 296            // Draw wire disc of green color for orbit orthogonal to y = 1
 0297            Handles.color = Color.green;
 0298            Handles.DrawWireDisc(position, satelliteOrbit.transform.forward, layerProperties.radius, thickness);
 0299        }
 300#endif
 301    }
 302}