< Summary

Class:BuilderInWorldEditor
Assembly:BuilderInWorld
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/DCLPlugins/BuilderInWorld/Scripts/BuilderInWorldEditor.cs
Covered lines:148
Uncovered lines:9
Coverable lines:157
Total lines:310
Line coverage:94.2% (148 of 157)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
BuilderInWorldEditor()0%110100%
Initialize(...)0%33093.33%
InitReferences(...)0%220100%
InitHUD(...)0%110100%
Dispose()0%330100%
OnGUI()0%3.033085.71%
Update()0%330100%
LateUpdate()0%3.033085.71%
OnNFTUsageChange()0%2100%
BuilderProjectPanelInfo(...)0%2100%
InitControllers()0%110100%
InitController(...)0%110100%
StartTutorial()0%2100%
CleanItems()0%550100%
EnterEditMode(...)0%660100%
ExitEditMode()0%440100%
InmediateExit()0%110100%
EnterBiwControllers()0%220100%
ExitBiwControllers()0%330100%
IsNewScene()0%110100%
SetupNewScene()0%110100%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/DCLPlugins/BuilderInWorld/Scripts/BuilderInWorldEditor.cs

#LineLine coverage
 1using DCL;
 2using DCL.Configuration;
 3using DCL.Controllers;
 4using DCL.Tutorial;
 5using Newtonsoft.Json;
 6using System.Collections;
 7using System.Collections.Generic;
 8using System.Linq;
 9using DCL.Builder;
 10using UnityEngine;
 11using Environment = DCL.Environment;
 12
 13public class BuilderInWorldEditor : IBIWEditor
 14{
 15    private GameObject cursorGO;
 16    private GameObject[] groundVisualsGO;
 17
 918    internal IBIWOutlinerController outlinerController => context.editorContext.outlinerController;
 819    internal IBIWInputHandler inputHandler => context.editorContext.inputHandler;
 820    internal IBIWPublishController publishController => context.editorContext.publishController;
 1621    internal IBIWCreatorController creatorController => context.editorContext.creatorController;
 822    internal IBIWModeController modeController => context.editorContext.modeController;
 2223    internal IBIWFloorHandler floorHandler => context.editorContext.floorHandler;
 824    internal IBIWEntityHandler entityHandler => context.editorContext.entityHandler;
 825    internal IBIWActionController actionController => context.editorContext.actionController;
 826    internal IBIWSaveController saveController => context.editorContext.saveController;
 827    internal IBIWInputWrapper inputWrapper => context.editorContext.inputWrapper;
 828    internal IBIWRaycastController raycastController => context.editorContext.raycastController;
 829    internal IBIWGizmosController gizmosController => context.editorContext.gizmosController;
 30
 31    private BuilderInWorldBridge builderInWorldBridge;
 32    private BuilderInWorldAudioHandler biwAudioHandler;
 33    internal IContext context;
 34
 835    private readonly List<IBIWController> controllers = new List<IBIWController>();
 36    private Material skyBoxMaterial;
 37
 038    public bool isBuilderInWorldActivated { get; internal set; } = false;
 39
 40    private bool isInit = false;
 41    private Material previousSkyBoxMaterial;
 42
 43    private float startEditorTimeStamp = 0;
 44    internal IParcelScene sceneToEdit;
 45
 46    public void Initialize(IContext context)
 47    {
 848        if (isInit)
 049            return;
 50
 851        isInit = true;
 52
 853        this.context = context;
 54
 855        InitReferences(SceneReferences.i);
 56
 857        if (builderInWorldBridge != null)
 858            builderInWorldBridge.OnBuilderProjectInfo += BuilderProjectPanelInfo;
 59
 860        BIWNFTController.i.OnNFTUsageChange += OnNFTUsageChange;
 61
 862        InitHUD(context);
 63
 864        InitControllers();
 65
 866        CommonScriptableObjects.builderInWorldNotNecessaryUIVisibilityStatus.Set(true);
 67
 868        biwAudioHandler = UnityEngine.Object.Instantiate(context.projectReferencesAsset.audioPrefab, Vector3.zero, Quate
 869        biwAudioHandler.Initialize(context);
 870        biwAudioHandler.gameObject.SetActive(false);
 871    }
 72
 73    public void InitReferences(SceneReferences sceneReferences)
 74    {
 875        builderInWorldBridge = sceneReferences.biwBridgeGameObject.GetComponent<BuilderInWorldBridge>();
 876        cursorGO = sceneReferences.cursorCanvas;
 77
 878        List<GameObject> grounds = new List<GameObject>();
 79
 8080        for (int i = 0; i < sceneReferences.groundVisual.transform.transform.childCount; i++)
 81        {
 3282            grounds.Add(sceneReferences.groundVisual.transform.transform.GetChild(i).gameObject);
 83        }
 84
 885        groundVisualsGO = grounds.ToArray();
 886        skyBoxMaterial = context.projectReferencesAsset.skyBoxMaterial;
 887    }
 88
 89    private void InitHUD(IContext context)
 90    {
 891        context.editorContext.editorHUD.Initialize(context);
 892        context.editorContext.editorHUD.OnTutorialAction += StartTutorial;
 893    }
 94
 95    public void Dispose()
 96    {
 897        if (context.editorContext.editorHUD != null)
 898            context.editorContext.editorHUD.OnTutorialAction -= StartTutorial;
 99
 100
 8101        BIWNFTController.i.OnNFTUsageChange -= OnNFTUsageChange;
 102
 8103        BIWNFTController.i.Dispose();
 8104        builderInWorldBridge.OnBuilderProjectInfo -= BuilderProjectPanelInfo;
 105
 8106        CleanItems();
 107
 8108        if (biwAudioHandler.gameObject != null)
 109        {
 8110            biwAudioHandler.Dispose();
 8111            UnityEngine.Object.Destroy(biwAudioHandler.gameObject);
 112        }
 8113    }
 114
 115    public void OnGUI()
 116    {
 1117        if (!isBuilderInWorldActivated)
 0118            return;
 119
 28120        foreach (var controller in controllers)
 121        {
 13122            controller.OnGUI();
 123        }
 1124    }
 125
 126    public void Update()
 127    {
 2128        if (!isBuilderInWorldActivated)
 1129            return;
 130
 28131        foreach (var controller in controllers)
 132        {
 13133            controller.Update();
 134        }
 1135    }
 136
 137    public void LateUpdate()
 138    {
 1139        if (!isBuilderInWorldActivated)
 0140            return;
 141
 28142        foreach (var controller in controllers)
 143        {
 13144            controller.LateUpdate();
 145        }
 1146    }
 147
 148    private void OnNFTUsageChange()
 149    {
 0150        context.editorContext.editorHUD.RefreshCatalogAssetPack();
 0151        context.editorContext.editorHUD.RefreshCatalogContent();
 0152    }
 153
 0154    private void BuilderProjectPanelInfo(string title, string description) {  context.editorContext.editorHUD.SetBuilder
 155
 156    private void InitControllers()
 157    {
 8158        InitController(entityHandler);
 8159        InitController(modeController);
 8160        InitController(publishController);
 8161        InitController(creatorController);
 8162        InitController(outlinerController);
 8163        InitController(floorHandler);
 8164        InitController(inputHandler);
 8165        InitController(saveController);
 8166        InitController(actionController);
 8167        InitController(inputWrapper);
 8168        InitController(raycastController);
 8169        InitController(gizmosController);
 8170    }
 171
 172    public void InitController(IBIWController controller)
 173    {
 103174        controller.Initialize(context);
 103175        controllers.Add(controller);
 103176    }
 177
 0178    private void StartTutorial() { TutorialController.i.SetBuilderInWorldTutorialEnabled(); }
 179
 180    public void CleanItems()
 181    {
 8182        if ( context.editorContext.editorHUD != null)
 8183            context.editorContext.editorHUD.Dispose();
 184
 8185        Camera camera = Camera.main;
 186
 8187        if (camera != null)
 188        {
 8189            BIWOutline outliner = camera.GetComponent<BIWOutline>();
 8190            UnityEngine.Object.Destroy(outliner);
 191        }
 192
 8193        floorHandler?.CleanUp();
 8194        creatorController?.CleanUp();
 8195    }
 196
 197    public void EnterEditMode(IParcelScene sceneToEdit)
 198    {
 5199        this.sceneToEdit = sceneToEdit;
 200
 5201        BIWNFTController.i.StartEditMode();
 5202        if (biwAudioHandler != null && biwAudioHandler.gameObject != null)
 5203            biwAudioHandler.gameObject.SetActive(true);
 204
 5205        ParcelSettings.VISUAL_LOADING_ENABLED = false;
 5206        cursorGO.SetActive(false);
 207
 5208        if ( context.editorContext.editorHUD != null)
 209        {
 5210            context.editorContext.editorHUD.SetParcelScene(sceneToEdit);
 5211            context.editorContext.editorHUD.RefreshCatalogContent();
 5212            context.editorContext.editorHUD.RefreshCatalogAssetPack();
 5213            context.editorContext.editorHUD.SetVisibilityOfCatalog(true);
 5214            context.editorContext.editorHUD.SetVisibilityOfInspector(true);
 215        }
 216
 5217        CommonScriptableObjects.builderInWorldNotNecessaryUIVisibilityStatus.Set(false);
 5218        DataStore.i.builderInWorld.showTaskBar.Set(true);
 219
 5220        EnterBiwControllers();
 5221        Environment.i.world.sceneController.ActivateBuilderInWorldEditScene();
 222
 5223        if (IsNewScene())
 5224            SetupNewScene();
 225
 5226        isBuilderInWorldActivated = true;
 227
 5228        previousSkyBoxMaterial = RenderSettings.skybox;
 5229        RenderSettings.skybox = skyBoxMaterial;
 230
 50231        foreach (var groundVisual in groundVisualsGO)
 232        {
 20233            groundVisual.SetActive(false);
 234        }
 235
 5236        startEditorTimeStamp = Time.realtimeSinceStartup;
 237
 5238        BIWAnalytics.AddSceneInfo(sceneToEdit.sceneData.basePosition, BIWUtils.GetLandOwnershipType(DataStore.i.builderI
 5239    }
 240
 241    public void ExitEditMode()
 242    {
 1243        Environment.i.platform.cullingController.Start();
 1244        BIWNFTController.i.ExitEditMode();
 245
 1246        CommonScriptableObjects.builderInWorldNotNecessaryUIVisibilityStatus.Set(true);
 1247        DataStore.i.builderInWorld.showTaskBar.Set(true);
 248
 1249        ParcelSettings.VISUAL_LOADING_ENABLED = true;
 250
 1251        outlinerController.CancelAllOutlines();
 252
 1253        cursorGO.SetActive(true);
 254
 1255        InmediateExit();
 256
 1257        if ( context.editorContext.editorHUD != null)
 258        {
 1259            context.editorContext.editorHUD.ClearEntityList();
 1260            context.editorContext.editorHUD.SetVisibility(false);
 261        }
 262
 1263        Environment.i.world.sceneController.DeactivateBuilderInWorldEditScene();
 1264        Environment.i.world.blockersController.SetEnabled(true);
 265
 1266        ExitBiwControllers();
 267
 10268        foreach (var groundVisual in groundVisualsGO)
 269        {
 4270            groundVisual.SetActive(true);
 271        }
 272
 1273        isBuilderInWorldActivated = false;
 1274        RenderSettings.skybox = previousSkyBoxMaterial;
 275
 1276        if (biwAudioHandler.gameObject != null)
 1277            biwAudioHandler.gameObject.SetActive(false);
 1278        DataStore.i.appMode.Set(AppMode.DEFAULT);
 1279        DataStore.i.virtualAudioMixer.sceneSFXVolume.Set(1f);
 1280        BIWAnalytics.ExitEditor(Time.realtimeSinceStartup - startEditorTimeStamp);
 1281    }
 282
 2283    public void InmediateExit() { builderInWorldBridge.ExitKernelEditMode(sceneToEdit); }
 284
 285    public void EnterBiwControllers()
 286    {
 166287        foreach (var controller in controllers)
 288        {
 77289            controller.EnterEditMode(sceneToEdit);
 290        }
 291
 292        //Note: This audio should inside the controllers, it is here because it is still a monobehaviour
 6293        biwAudioHandler.EnterEditMode(sceneToEdit);
 6294    }
 295
 296    public void ExitBiwControllers()
 297    {
 28298        foreach (var controller in controllers)
 299        {
 13300            controller.ExitEditMode();
 301        }
 302
 1303        if (biwAudioHandler.gameObject != null)
 1304            biwAudioHandler.ExitEditMode();
 1305    }
 306
 5307    public bool IsNewScene() { return sceneToEdit.entities.Count <= 0; }
 308
 12309    public void SetupNewScene() { floorHandler.CreateDefaultFloor(); }
 310}