< Summary

Class:DCL.Skybox.SkyboxEditorWindow
Assembly:SkyboxEditorAssembly
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Rendering/ProceduralSkybox/ToolProceduralSkybox/Scripts/Editor/Procedural Skybox/SkyboxEditor.cs
Covered lines:0
Uncovered lines:299
Coverable lines:299
Total lines:637
Line coverage:0% (0 of 299)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
SkyboxEditorWindow()0%2100%
Init()0%2100%
OnDisable()0%6200%
Initialize()0%2100%
InitializeWindow()0%2100%
Update()0%20400%
OnGUI()0%6200%
RenderTopPanel()0%30500%
RenderProfileControl()0%1561200%
RenderTimePanel()0%20400%
RenderLeftPanel()0%56700%
AddToRightPanel(...)0%12300%
RenderRightPanel(...)0%12300%
RefreshPinnedPanels()0%72800%
RenderPinnedRightPanel(...)0%1561200%
RenderRightPanelHeading(...)0%20400%
EnsureDependencies()0%1821300%
TakeControlAtRuntime()0%6200%
InitializeMaterial()0%2100%
UpdateMaterial()0%2100%
AddNewConfiguration(...)0%2100%
UpdateConfigurationsList()0%56700%
ResumeTime()0%2100%
PauseTime()0%2100%
ApplyOnMaterial(...)0%20400%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Rendering/ProceduralSkybox/ToolProceduralSkybox/Scripts/Editor/Procedural Skybox/SkyboxEditor.cs

#LineLine coverage
 1using System;
 2using System.Collections;
 3using System.Collections.Generic;
 4using System.Linq;
 5using UnityEditor;
 6using UnityEngine;
 7
 8namespace DCL.Skybox
 9{
 10    public class SkyboxEditorWindow : EditorWindow
 11    {
 12        private EditorToolMeasurements toolSize;
 13
 14        private List<SkyboxConfiguration> configurations;
 15        private List<string> configurationNames;
 16        private int selectedConfigurationIndex;
 17        private SkyboxConfiguration selectedConfiguration;
 18
 19        public bool isPaused;
 20        public float timeOfTheDay;
 021        public float lifecycleDuration = 1;
 22
 23        private Material selectedMat;
 24        private Vector2 leftPanelScrollPos;
 25        private Vector2 rightPanelScrollPos;
 26        private Vector2 topScroll;
 27        private Light directionalLight;
 28        private bool creatingNewConfig;
 29        private string newConfigName;
 30        private bool overridingController;
 31        private List<string> renderingOrderList;
 32
 33        private float leftPanelWidth;
 034        private List<RightPanelPins> rightPanelPins = new List<RightPanelPins>() { new RightPanelPins { part = SkyboxEdi
 35
 36        private CopyFunctionality copyPasteObj;
 37        private SkyboxElements skyboxElements;
 38
 39        [MenuItem("Window/Skybox Editor")]
 40        static void Init()
 41        {
 042            SkyboxEditorWindow window = (SkyboxEditorWindow)EditorWindow.GetWindow(typeof(SkyboxEditorWindow));
 043            window.minSize = new Vector2(500, 500);
 044            window.Initialize();
 045            window.Show();
 046            window.InitializeWindow();
 047        }
 48
 049        private void OnDisable() { skyboxElements?.Dispose(); }
 50
 051        void Initialize() { toolSize = AssetDatabase.LoadAssetAtPath<EditorToolMeasurements>(SkyboxEditorLiterals.Paths.
 52
 053        public void InitializeWindow() { EnsureDependencies(); }
 54
 55        private void Update()
 56        {
 057            if (selectedConfiguration == null || isPaused)
 58            {
 059                return;
 60            }
 61
 062            float timeNormalizationFactor = lifecycleDuration * 60 / SkyboxUtils.CYCLE_TIME;
 063            timeOfTheDay += Time.deltaTime / timeNormalizationFactor;
 064            timeOfTheDay = Mathf.Clamp(timeOfTheDay, 0.01f, SkyboxUtils.CYCLE_TIME);
 65
 066            ApplyOnMaterial(false);
 67
 068            if (timeOfTheDay >= SkyboxUtils.CYCLE_TIME)
 69            {
 070                timeOfTheDay = 0.01f;
 071                selectedConfiguration.CycleResets();
 72            }
 73
 074            Repaint();
 075        }
 76
 77        private void OnGUI()
 78        {
 079            EditorGUI.DrawRect(new Rect(toolSize.topPanelLeftStart, toolSize.topPanelTopStart, position.width - toolSize
 080            GUILayout.BeginArea(new Rect(toolSize.topPanelLeftStart, toolSize.topPanelTopStart, position.width - toolSiz
 081            RenderTopPanel();
 082            GUILayout.EndArea();
 83
 84            // Left Panel
 085            float topLeft = toolSize.topPanelLeftStart;
 086            float top = toolSize.topPanelTopStart + toolSize.topPanelHeight + toolSize.panelsPadding;
 087            float width = (position.width - toolSize.toolRightPadding) * toolSize.leftPanelWidthPercentage;
 088            float height = (position.height - top - toolSize.panelsPadding);
 089            leftPanelWidth = width - toolSize.leftPanelPadding.xMax;
 090            EditorGUI.DrawRect(new Rect(topLeft, top, width, height), toolSize.panelBGColor);
 091            GUILayout.BeginArea(new Rect(topLeft + toolSize.leftPanelPadding.xMin, top + toolSize.leftPanelPadding.yMin,
 092            RenderLeftPanel();
 093            GUILayout.EndArea();
 94
 95            // Right Panel
 096            topLeft = toolSize.topPanelLeftStart + width + toolSize.panelsPadding;
 097            width = position.width - toolSize.toolRightPadding - topLeft;
 098            GUILayout.BeginArea(new Rect(topLeft + toolSize.rightPanelPadding.xMin, top + toolSize.rightPanelPadding.yMi
 099            RenderRightPanel(topLeft + toolSize.rightPanelPadding.xMin, top + toolSize.rightPanelPadding.yMin, width - t
 0100            GUILayout.EndArea();
 101
 0102            if (GUI.changed)
 103            {
 0104                ApplyOnMaterial(true);
 105            }
 0106        }
 107
 108        #region Top Panel
 109
 110        void RenderTopPanel()
 111        {
 0112            topScroll = EditorGUILayout.BeginScrollView(topScroll);
 0113            GUIStyle style = new GUIStyle();
 0114            style.alignment = TextAnchor.MiddleLeft;
 115
 0116            style.fixedWidth = position.width - toolSize.toolRightPadding;
 0117            EditorGUILayout.BeginHorizontal(style);
 118
 0119            style.fixedWidth = (position.width - toolSize.toolRightPadding) / 2;
 0120            EditorGUILayout.BeginVertical(style);
 0121            RenderProfileControl();
 0122            EditorGUILayout.EndVertical();
 123
 0124            EditorGUILayout.BeginVertical(style);
 0125            RenderTimePanel();
 0126            EditorGUILayout.EndVertical();
 127
 0128            EditorGUILayout.EndHorizontal();
 129
 130            // Timeline Tags
 0131            EditorGUILayout.BeginHorizontal();
 132
 0133            style = new GUIStyle();
 0134            style.alignment = TextAnchor.MiddleLeft;
 0135            style.fixedWidth = (position.width - toolSize.toolRightPadding) / 2;
 0136            EditorGUILayout.BeginVertical(style);
 0137            if (GUILayout.Button(SkyboxEditorLiterals.Labels.timeLineTags, GUILayout.Width(100)))
 138            {
 0139                AddToRightPanel(new RightPanelPins { part = SkyboxEditorToolsParts.Timeline_Tags, name = SkyboxEditorLit
 140            }
 0141            EditorGUILayout.EndVertical();
 142
 0143            style = new GUIStyle();
 0144            style.alignment = TextAnchor.MiddleRight;
 0145            style.fixedWidth = 100;
 0146            EditorGUILayout.BeginVertical(style);
 0147            if (GUILayout.Button(SkyboxEditorLiterals.Labels.config))
 148            {
 0149                Selection.activeObject = AssetDatabase.LoadAssetAtPath<EditorToolMeasurements>(SkyboxEditorLiterals.Path
 150            }
 0151            EditorGUILayout.EndVertical();
 0152            EditorGUILayout.EndHorizontal();
 153
 0154            EditorGUILayout.EndScrollView();
 0155            if (Application.isPlaying && SkyboxController.i == null)
 0156                EditorGUILayout.HelpBox("There's no SkyboxController in the scene, try this in InitialScene!", MessageTy
 0157        }
 158
 159        private void RenderProfileControl()
 160        {
 0161            if (creatingNewConfig)
 162            {
 0163                EditorGUILayout.BeginHorizontal();
 0164                GUILayout.Label(SkyboxEditorLiterals.Labels.name);
 0165                newConfigName = EditorGUILayout.TextField(newConfigName, GUILayout.Width(200));
 166
 0167                if (GUILayout.Button(SkyboxEditorLiterals.Labels.create, GUILayout.Width(50)))
 168                {
 169                    // Make new configuration
 0170                    selectedConfiguration = AddNewConfiguration(newConfigName);
 171
 172                    // Update configuration list
 0173                    UpdateConfigurationsList();
 0174                    creatingNewConfig = false;
 175
 0176                    if (Application.isPlaying && SkyboxController.i != null && overridingController)
 177                    {
 0178                        SkyboxController.i.UpdateConfigurationTimelineEvent(selectedConfiguration);
 179                    }
 180                }
 181
 0182                if (GUILayout.Button(SkyboxEditorLiterals.Labels.cancel, GUILayout.Width(50)))
 183                {
 0184                    creatingNewConfig = false;
 185                }
 0186                EditorGUILayout.EndHorizontal();
 187            }
 188            else
 189            {
 0190                EditorGUILayout.BeginHorizontal();
 191
 0192                EditorGUILayout.LabelField(SkyboxEditorLiterals.Labels.currentProfile);
 0193                selectedConfiguration = (SkyboxConfiguration)EditorGUILayout.ObjectField(selectedConfiguration, typeof(S
 194
 0195                if (selectedConfiguration != configurations[selectedConfigurationIndex])
 196                {
 0197                    UpdateConfigurationsList();
 198
 0199                    if (Application.isPlaying && SkyboxController.i != null && overridingController)
 200                    {
 0201                        SkyboxController.i.UpdateConfigurationTimelineEvent(selectedConfiguration);
 202                    }
 203                }
 204
 0205                if (GUILayout.Button(SkyboxEditorLiterals.Characters.sign_add, GUILayout.Width(50)))
 206                {
 0207                    creatingNewConfig = true;
 208                }
 0209                EditorGUILayout.EndHorizontal();
 210            }
 0211        }
 212
 213        private void RenderTimePanel()
 214        {
 215
 0216            EditorGUILayout.BeginVertical();
 0217            EditorGUILayout.BeginHorizontal();
 0218            EditorGUILayout.LabelField("Time : " + timeOfTheDay.ToString("f2"));
 0219            timeOfTheDay = EditorGUILayout.Slider(timeOfTheDay, 0.01f, SkyboxUtils.CYCLE_TIME);
 0220            if (isPaused)
 221            {
 0222                if (GUILayout.Button(SkyboxEditorLiterals.Labels.play))
 223                {
 0224                    ResumeTime();
 225                }
 226            }
 227            else
 228            {
 0229                if (GUILayout.Button(SkyboxEditorLiterals.Labels.pause))
 230                {
 0231                    PauseTime();
 232                }
 233            }
 0234            EditorGUILayout.EndHorizontal();
 235
 0236            EditorGUILayout.BeginHorizontal();
 0237            EditorGUILayout.LabelField(SkyboxEditorLiterals.Labels.cycle);
 0238            lifecycleDuration = EditorGUILayout.FloatField(lifecycleDuration);
 0239            EditorGUILayout.EndHorizontal();
 0240            EditorGUILayout.EndVertical();
 0241        }
 242
 243        #endregion
 244
 245        #region Left Panel
 246
 247        private void RenderLeftPanel()
 248        {
 0249            leftPanelScrollPos = EditorGUILayout.BeginScrollView(leftPanelScrollPos, true, false);
 0250            EditorGUILayout.BeginVertical();
 251            // Render BG Layer Button
 0252            if (GUILayout.Button(SkyboxEditorLiterals.Layers.backgroundLayer, EditorStyles.toolbarButton))
 253            {
 0254                AddToRightPanel(new RightPanelPins { part = SkyboxEditorToolsParts.BG_Layer, name = SkyboxEditorLiterals
 255            }
 256
 0257            EditorGUILayout.Space(toolSize.leftPanelButtonSpace);
 0258            if (GUILayout.Button(SkyboxEditorLiterals.Layers.horizonPlane, EditorStyles.toolbarButton))
 259            {
 0260                AddToRightPanel(new RightPanelPins { part = SkyboxEditorToolsParts.Horizon_Plane, name = SkyboxEditorLit
 261            }
 262
 0263            EditorGUILayout.Space(toolSize.leftPanelButtonSpace);
 0264            if (GUILayout.Button(SkyboxEditorLiterals.Layers.ambientLayer, EditorStyles.toolbarButton))
 265            {
 0266                AddToRightPanel(new RightPanelPins { part = SkyboxEditorToolsParts.Ambient_Layer, name = SkyboxEditorLit
 267            }
 268
 0269            EditorGUILayout.Space(toolSize.leftPanelButtonSpace);
 0270            if (GUILayout.Button(SkyboxEditorLiterals.Layers.avatarLayer, EditorStyles.toolbarButton))
 271            {
 0272                AddToRightPanel(new RightPanelPins { part = SkyboxEditorToolsParts.Avatar_Layer, name = SkyboxEditorLite
 273            }
 274
 0275            EditorGUILayout.Space(toolSize.leftPanelButtonSpace);
 0276            if (GUILayout.Button(SkyboxEditorLiterals.Layers.fogLayer, EditorStyles.toolbarButton))
 277            {
 0278                AddToRightPanel(new RightPanelPins { part = SkyboxEditorToolsParts.Fog_Layer, name = SkyboxEditorLiteral
 279            }
 280
 0281            EditorGUILayout.Space(toolSize.leftPanelButtonSpace);
 0282            if (GUILayout.Button(SkyboxEditorLiterals.Layers.directionalLightLayer, EditorStyles.toolbarButton))
 283            {
 0284                AddToRightPanel(new RightPanelPins { part = SkyboxEditorToolsParts.Directional_Light_Layer, name = Skybo
 285            }
 286
 0287            EditorGUILayout.Space(toolSize.leftPanelButtonSpace);
 288
 289            // Render Base 2D layers
 0290            EditorGUILayout.LabelField(SkyboxEditorLiterals.Layers.twoDLayers, EditorStyles.label, GUILayout.Width(leftP
 291
 0292            EditorGUILayout.Space(toolSize.leftPanelButtonSpace);
 293
 0294            RenderLeftPanelBaseSkyboxLayers.Render(ref timeOfTheDay, toolSize, selectedConfiguration, AddToRightPanel, r
 295
 296            // Render Domes List
 0297            EditorGUILayout.LabelField(SkyboxEditorLiterals.Layers.RenderDomeLayers, EditorStyles.label, GUILayout.Width
 298
 0299            EditorGUILayout.Space(toolSize.leftPanelButtonSpace);
 300
 0301            RenderLeftPanelDomeLayers.Render(ref timeOfTheDay, toolSize, selectedConfiguration, AddToRightPanel, copyPas
 302
 0303            EditorGUILayout.Space(toolSize.leftPanelButtonSpace);
 304
 305            // Render Satellite list
 0306            EditorGUILayout.LabelField(SkyboxEditorLiterals.Layers.RenderSatelliteLayers, EditorStyles.label, GUILayout.
 307
 0308            EditorGUILayout.Space(toolSize.leftPanelButtonSpace);
 309
 0310            RenderLeftPanelSatelliteLayers.Render(ref timeOfTheDay, toolSize, selectedConfiguration, AddToRightPanel, co
 311
 312            // Render Satellite list
 0313            EditorGUILayout.LabelField(SkyboxEditorLiterals.Layers.RenderPlanarLayers, EditorStyles.label, GUILayout.Wid
 314
 0315            EditorGUILayout.Space(toolSize.leftPanelButtonSpace);
 316
 0317            RenderLeftPanelPlanarLayers.Render(ref timeOfTheDay, toolSize, selectedConfiguration, AddToRightPanel, copyP
 318
 0319            EditorGUILayout.EndVertical();
 0320            EditorGUILayout.EndScrollView();
 0321        }
 322
 323        #endregion
 324
 325        #region Right Panel
 326
 327        private void AddToRightPanel(RightPanelPins obj)
 328        {
 0329            List<RightPanelPins> pinnedPanels = new List<RightPanelPins>();
 330            // Remove
 0331            for (int i = 0; i < rightPanelPins.Count; i++)
 332            {
 0333                if (rightPanelPins[i].pinned)
 334                {
 0335                    pinnedPanels.Add(rightPanelPins[i]);
 336                }
 337            }
 0338            pinnedPanels.Add(obj);
 339            // Add
 0340            rightPanelPins = pinnedPanels;
 0341        }
 342
 343        void RenderRightPanel(float topLeft, float top, float width, float height)
 344        {
 0345            RefreshPinnedPanels();
 346
 0347            rightPanelScrollPos = EditorGUILayout.BeginScrollView(rightPanelScrollPos);
 348
 0349            topLeft = 0;
 0350            top = 0;
 351
 0352            for (int i = 0; i < rightPanelPins.Count - 1; i++)
 353            {
 354                // Make a box for pinned panel
 0355                EditorGUI.DrawRect(new Rect(0 + toolSize.pinnedPanelBGOffset.x, top + toolSize.pinnedPanelBGOffset.y, wi
 0356                GUILayout.BeginArea(new Rect(0, top, width - toolSize.rightPanelPadding.xMax, toolSize.pinnedPanelHeight
 0357                RenderPinnedRightPanel(rightPanelPins[i]);
 0358                GUILayout.EndArea();
 359
 0360                topLeft = 0;
 0361                top = top + toolSize.pinnedPanelHeight + toolSize.pinnedPanelBGOffset.yMax + toolSize.pinnedPanelBGOffse
 362            }
 363
 364            // Make a box for pinned panel
 0365            EditorGUI.DrawRect(new Rect(0 + toolSize.pinnedPanelBGOffset.x, top + toolSize.pinnedPanelBGOffset.y, width 
 0366            GUILayout.BeginArea(new Rect(0, top, width - toolSize.rightPanelPadding.xMax, height - top));
 367
 0368            if (rightPanelPins.Count > 0)
 369            {
 0370                RenderPinnedRightPanel(rightPanelPins[rightPanelPins.Count - 1]);
 371            }
 372
 0373            GUILayout.EndArea();
 374
 0375            EditorGUILayout.EndScrollView();
 0376        }
 377
 378        private void RefreshPinnedPanels()
 379        {
 0380            List<RightPanelPins> pinnedPanels = new List<RightPanelPins>();
 381
 0382            for (int i = 0; i < rightPanelPins.Count; i++)
 383            {
 384                // Check if pinned panel object (in case of Base_Skybox and Elements3D_Dome) is deleted or not if delete
 0385                if (rightPanelPins[i].part == SkyboxEditorToolsParts.Base_Skybox)
 386                {
 0387                    if (!selectedConfiguration.layers.Contains(rightPanelPins[i].baseSkyboxTargetLayer))
 388                    {
 389                        continue;
 390                    }
 391                }
 392
 0393                if (rightPanelPins[i].part == SkyboxEditorToolsParts.Elements3D_Dome)
 394                {
 0395                    if (!selectedConfiguration.additional3Dconfig.Contains(rightPanelPins[i].targetDomeElement))
 396                    {
 397                        continue;
 398                    }
 399                }
 400
 0401                if (rightPanelPins[i].pinned)
 402                {
 0403                    pinnedPanels.Add(rightPanelPins[i]);
 404                }
 0405                else if (i == (rightPanelPins.Count - 1))
 406                {
 0407                    pinnedPanels.Add(rightPanelPins[i]);
 408                }
 409            }
 0410            rightPanelPins = pinnedPanels;
 0411        }
 412
 413        private void RenderPinnedRightPanel(RightPanelPins obj)
 414        {
 0415            RenderRightPanelHeading(obj.name, obj);
 0416            obj.scroll = EditorGUILayout.BeginScrollView(obj.scroll);
 417
 0418            EditorGUILayout.Space(5);
 0419            switch (obj.part)
 420            {
 421                case SkyboxEditorToolsParts.Timeline_Tags:
 0422                    RenderTimelineTags.RenderLayer(ref timeOfTheDay, toolSize, selectedConfiguration);
 0423                    break;
 424                case SkyboxEditorToolsParts.BG_Layer:
 0425                    RenderBackgroundColorLayer.RenderLayer(ref timeOfTheDay, toolSize, selectedConfiguration);
 0426                    break;
 427                case SkyboxEditorToolsParts.Horizon_Plane:
 0428                    RenderHorizonPlane.RenderLayer(ref timeOfTheDay, toolSize, selectedConfiguration);
 0429                    break;
 430                case SkyboxEditorToolsParts.Ambient_Layer:
 0431                    RenderAmbientLayer.RenderLayer(ref timeOfTheDay, toolSize, selectedConfiguration);
 0432                    break;
 433                case SkyboxEditorToolsParts.Avatar_Layer:
 0434                    RenderAvatarLayer.RenderLayer(ref timeOfTheDay, toolSize, selectedConfiguration);
 0435                    break;
 436                case SkyboxEditorToolsParts.Fog_Layer:
 0437                    RenderFogLayer.RenderLayer(ref timeOfTheDay, toolSize, selectedConfiguration);
 0438                    break;
 439                case SkyboxEditorToolsParts.Directional_Light_Layer:
 0440                    DirectionalLightLayer.RenderLayer(ref timeOfTheDay, toolSize, selectedConfiguration, directionalLigh
 0441                    break;
 442                case SkyboxEditorToolsParts.Base_Skybox:
 0443                    RenderTextureLayer.RenderLayer(ref timeOfTheDay, toolSize, obj.baseSkyboxTargetLayer);
 0444                    break;
 445                case SkyboxEditorToolsParts.Elements3D_Dome:
 0446                    RenderDome3DLayer.RenderLayer(ref timeOfTheDay, toolSize, obj.targetDomeElement);
 0447                    break;
 448                case SkyboxEditorToolsParts.Elements3D_Satellite:
 0449                    RenderSatellite3DLayer.RenderLayer(ref timeOfTheDay, toolSize, obj.targetSatelliteElement);
 0450                    break;
 451                case SkyboxEditorToolsParts.Elements3D_Planar:
 0452                    RenderPlanar3DLayer.RenderLayer(ref timeOfTheDay, toolSize, obj.targetPlanarElement);
 453                    break;
 454                default:
 455                    break;
 456            }
 457
 0458            EditorGUILayout.EndScrollView();
 0459        }
 460
 461        void RenderRightPanelHeading(string text, RightPanelPins obj)
 462        {
 0463            GUIStyle style = new GUIStyle(EditorStyles.miniBoldLabel);
 0464            style.normal.background = toolSize.rightPanelHeadingState.backgroundTex;
 0465            EditorGUILayout.BeginHorizontal(style);
 0466            style = new GUIStyle(EditorStyles.boldLabel);
 0467            style.normal.textColor = toolSize.rightPanelHeadingTextColor.textColor;
 0468            EditorGUILayout.LabelField(text, style, GUILayout.Width(200));
 469
 0470            string btnTxt = (obj.pinned) ? SkyboxEditorLiterals.Labels.unpin : SkyboxEditorLiterals.Labels.pin;
 0471            if (GUILayout.Button(btnTxt, GUILayout.Width(50)))
 472            {
 0473                obj.pinned = !obj.pinned;
 474            }
 0475            EditorGUILayout.EndHorizontal();
 0476        }
 477
 478        #endregion
 479
 480        private void EnsureDependencies()
 481        {
 0482            if (!Application.isPlaying)
 483            {
 0484                overridingController = false;
 485            }
 486
 0487            if (Application.isPlaying && !overridingController)
 488            {
 0489                TakeControlAtRuntime();
 490            }
 491
 0492            if (selectedConfiguration == null)
 493            {
 0494                UpdateConfigurationsList();
 495            }
 496
 0497            if (selectedMat == null)
 498            {
 0499                UpdateMaterial();
 500            }
 501
 0502            if (copyPasteObj == null)
 503            {
 0504                copyPasteObj = new CopyFunctionality();
 505            }
 506
 0507            EditorUtility.SetDirty(selectedConfiguration);
 508
 509            // Fill rendering order array
 0510            if (renderingOrderList == null)
 511            {
 0512                renderingOrderList = new List<string>();
 513
 0514                for (int i = 0; i < 5; i++)
 515                {
 0516                    renderingOrderList.Add((i + 1).ToString());
 517                }
 518            }
 519
 0520            if (directionalLight != null)
 521            {
 0522                return;
 523            }
 524
 525            // Cache directional light reference
 0526            directionalLight = GameObject.FindObjectsOfType<Light>(true).Where(s => s.type == LightType.Directional).Fir
 527
 528            // Make a directional light object if can't find
 0529            if (directionalLight == null)
 530            {
 0531                GameObject temp = new GameObject(SkyboxEditorLiterals.Labels.sunObjectName);
 532                // Add the light component
 0533                directionalLight = temp.AddComponent<Light>();
 0534                directionalLight.type = LightType.Directional;
 535            }
 536
 0537            if (skyboxElements == null)
 538            {
 0539                skyboxElements = new SkyboxElements();
 540            }
 0541        }
 542
 543        void TakeControlAtRuntime()
 544        {
 0545            if (SkyboxController.i != null)
 546            {
 0547                isPaused = SkyboxController.i.IsPaused();
 0548                lifecycleDuration = (float)SkyboxController.i.lifecycleDuration;
 0549                selectedConfiguration = SkyboxController.i.GetCurrentConfiguration();
 0550                overridingController = SkyboxController.i.SetOverrideController(true);
 0551                timeOfTheDay = SkyboxController.i.GetCurrentTimeOfTheDay();
 0552                skyboxElements = SkyboxController.i.GetSkyboxElements();
 0553                UpdateConfigurationsList();
 554            }
 0555        }
 556
 557        void InitializeMaterial()
 558        {
 0559            selectedMat = MaterialReferenceContainer.i.skyboxMat;
 0560            selectedConfiguration.ResetMaterial(selectedMat, MaterialReferenceContainer.i.skyboxMatSlots);
 0561            RenderSettings.skybox = selectedMat;
 0562        }
 563
 0564        private void UpdateMaterial() { InitializeMaterial(); }
 565
 566        private SkyboxConfiguration AddNewConfiguration(string name)
 567        {
 568            SkyboxConfiguration temp = null;
 0569            temp = ScriptableObject.CreateInstance<SkyboxConfiguration>();
 0570            temp.skyboxID = name;
 571
 0572            string path = AssetDatabase.GenerateUniqueAssetPath("Assets/Rendering/ProceduralSkybox/Resources/Skybox Conf
 0573            AssetDatabase.CreateAsset(temp, path);
 0574            AssetDatabase.SaveAssets();
 575
 0576            return temp;
 577        }
 578
 579        private void UpdateConfigurationsList()
 580        {
 0581            SkyboxConfiguration[] tConfigurations = Resources.LoadAll<SkyboxConfiguration>("Skybox Configurations/");
 0582            configurations = new List<SkyboxConfiguration>(tConfigurations);
 0583            configurationNames = new List<string>();
 584
 585            // If no configurations exist, make and select new one.
 0586            if (configurations == null || configurations.Count < 1)
 587            {
 0588                selectedConfiguration = AddNewConfiguration(SkyboxEditorLiterals.Labels.defaultskyboxName);
 589
 0590                configurations = new List<SkyboxConfiguration>();
 0591                configurations.Add(selectedConfiguration);
 592            }
 593
 0594            if (selectedConfiguration == null)
 595            {
 0596                selectedConfiguration = configurations[0];
 597            }
 598
 0599            for (int i = 0; i < configurations.Count; i++)
 600            {
 0601                configurations[i].skyboxID = configurations[i].name;
 602
 0603                configurationNames.Add(configurations[i].skyboxID);
 0604                if (selectedConfiguration == configurations[i])
 605                {
 0606                    selectedConfigurationIndex = i;
 607                }
 608            }
 609
 0610            InitializeMaterial();
 611
 0612            if (!Application.isPlaying)
 613            {
 0614                isPaused = true;
 615            }
 0616        }
 617
 0618        void ResumeTime() { isPaused = false; }
 619
 0620        void PauseTime() { isPaused = true; }
 621
 622        private void ApplyOnMaterial(bool isEditor)
 623        {
 0624            EnsureDependencies();
 0625            float normalizedDayTime = SkyboxUtils.GetNormalizedDayTime(timeOfTheDay);
 0626            selectedConfiguration.ApplyOnMaterial(selectedMat, timeOfTheDay, normalizedDayTime, MaterialReferenceContain
 627
 0628            skyboxElements?.ApplyConfigTo3DElements(selectedConfiguration, timeOfTheDay, normalizedDayTime, directionalL
 629
 630            // If in play mode, call avatar color from skybox controller class
 0631            if (Application.isPlaying && SkyboxController.i != null)
 632            {
 0633                SkyboxController.i.ApplyAvatarColor(normalizedDayTime);
 634            }
 0635        }
 636    }
 637}