< Summary

Class:BIWFloorHandler
Assembly:BuilderInWorld
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/BuilderMode/Controllers/BIWFloorHandler.cs
Covered lines:53
Uncovered lines:22
Coverable lines:75
Total lines:177
Line coverage:70.6% (53 of 75)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
BIWFloorHandler()0%110100%
Start()0%2100%
OnDestroy()0%2100%
OnFloorEntityDeleted(...)0%6200%
Clean()0%110100%
ExistsFloorPlaceHolderForEntity(...)0%110100%
ChangeFloor(...)0%22090.91%
FindCurrentFloorCatalogItem()0%3.033085.71%
IsCatalogItemFloor(...)0%110100%
CreateDefaultFloor()0%2100%
CreateFloor(...)0%330100%
RemovePlaceHolder(...)0%2100%
OnFloorLoaded(...)0%4.054085.71%
RemovePlaceHolder(...)0%220100%
RemoveAllPlaceHolders()0%220100%
ExitEditMode()0%2100%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/BuilderMode/Controllers/BIWFloorHandler.cs

#LineLine coverage
 1using System;
 2using Builder.MeshLoadIndicator;
 3using DCL;
 4using DCL.Configuration;
 5using DCL.Controllers;
 6using DCL.Models;
 7using System.Collections;
 8using System.Collections.Generic;
 9using System.Linq;
 10using UnityEngine;
 11
 12public class BIWFloorHandler : BIWController
 13{
 14    [Header("Design Variables")]
 19815    public float secondsToTimeOut = 10f;
 16
 17    [Header("Prefab References")]
 18    public ActionController actionController;
 19
 20    public BuilderInWorldEntityHandler builderInWorldEntityHandler;
 21    public DCLBuilderMeshLoadIndicatorController dclBuilderMeshLoadIndicatorController;
 22    public DCLBuilderMeshLoadIndicator meshLoadIndicator;
 23    public BIWCreatorController biwCreatorController;
 24    public BIWSaveController biwSaveController;
 25
 26    [Header("Prefabs")]
 27    public GameObject floorPrefab;
 28
 29    public event Action OnAllParcelsFloorLoaded;
 30    private int numberOfParcelsLoaded;
 31
 32    private CatalogItem lastFloorCalalogItemUsed;
 19833    private readonly Dictionary<string, GameObject> floorPlaceHolderDict = new Dictionary<string, GameObject>();
 19834    private readonly List<string> loadedFloorEntities = new List<string>();
 35
 36    private void Start()
 37    {
 038        builderInWorldEntityHandler.OnEntityDeleted += OnFloorEntityDeleted;
 039        meshLoadIndicator.SetCamera(Camera.main);
 040    }
 41
 42    private void OnDestroy()
 43    {
 044        builderInWorldEntityHandler.OnEntityDeleted -= OnFloorEntityDeleted;
 45
 046        Clean();
 047    }
 48
 49    private void OnFloorEntityDeleted(DCLBuilderInWorldEntity entity)
 50    {
 051        if (entity.isFloor)
 052            RemovePlaceHolder(entity);
 053    }
 54
 55    public void Clean()
 56    {
 2057        RemoveAllPlaceHolders();
 2058        dclBuilderMeshLoadIndicatorController.Dispose();
 2059    }
 60
 261    public bool ExistsFloorPlaceHolderForEntity(string entityId) { return floorPlaceHolderDict.ContainsKey(entityId); }
 62
 63    public void ChangeFloor(CatalogItem newFloorObject)
 64    {
 265        biwSaveController.SetSaveActivation(false);
 266        CatalogItem lastFloor = lastFloorCalalogItemUsed;
 267        if (lastFloor == null)
 068            lastFloor = FindCurrentFloorCatalogItem();
 69
 270        builderInWorldEntityHandler.DeleteFloorEntities();
 71
 272        CreateFloor(newFloorObject);
 73
 274        BuildInWorldCompleteAction buildAction = new BuildInWorldCompleteAction();
 75
 276        buildAction.CreateChangeFloorAction(lastFloor, newFloorObject);
 277        actionController.AddAction(buildAction);
 78
 279        biwSaveController.SetSaveActivation(true, true);
 280    }
 81
 82    public CatalogItem FindCurrentFloorCatalogItem()
 83    {
 384        foreach (DCLBuilderInWorldEntity entity in builderInWorldEntityHandler.GetAllEntitiesFromCurrentScene())
 85        {
 186            if (entity.isFloor)
 87            {
 188                return entity.GetCatalogItemAssociated();
 89            }
 90        }
 91
 092        return null;
 193    }
 94
 195    public bool IsCatalogItemFloor(CatalogItem floorSceneObject) { return string.Equals(floorSceneObject.category, Build
 96
 97    public void CreateDefaultFloor()
 98    {
 099        CatalogItem floorSceneObject = BuilderInWorldUtils.CreateFloorSceneObject();
 0100        CreateFloor(floorSceneObject);
 0101    }
 102
 103    public void CreateFloor(CatalogItem floorSceneObject)
 104    {
 7105        Vector3 initialPosition = new Vector3(ParcelSettings.PARCEL_SIZE / 2, 0, ParcelSettings.PARCEL_SIZE / 2);
 7106        Vector2Int[] parcelsPoints = sceneToEdit.sceneData.parcels;
 7107        numberOfParcelsLoaded = 0;
 7108        loadedFloorEntities.Clear();
 109
 28110        foreach (Vector2Int parcel in parcelsPoints)
 111        {
 7112            DCLBuilderInWorldEntity decentralandEntity = biwCreatorController.CreateCatalogItem(
 113                floorSceneObject,
 114                WorldStateUtils.ConvertPointInSceneToUnityPosition(initialPosition, parcel),
 115                false,
 116                true,
 117                OnFloorLoaded);
 118
 119            // It may happen that when you get here, the floor entity is already loaded and it wouldn't be necessary to 
 7120            if (!loadedFloorEntities.Contains(decentralandEntity.rootEntity.entityId))
 121            {
 7122                dclBuilderMeshLoadIndicatorController.ShowIndicator(decentralandEntity.rootEntity.gameObject.transform.p
 7123                GameObject floorPlaceHolder = GameObject.Instantiate(floorPrefab, decentralandEntity.rootEntity.gameObje
 7124                floorPlaceHolderDict.Add(decentralandEntity.rootEntity.entityId, floorPlaceHolder);
 7125                decentralandEntity.OnShapeFinishLoading += RemovePlaceHolder;
 126            }
 127        }
 128
 7129        builderInWorldEntityHandler.DeselectEntities();
 7130        lastFloorCalalogItemUsed = floorSceneObject;
 7131    }
 132
 133    private void RemovePlaceHolder(DCLBuilderInWorldEntity entity)
 134    {
 0135        entity.OnShapeFinishLoading -= RemovePlaceHolder;
 0136        RemovePlaceHolder(entity.rootEntity.entityId);
 0137    }
 138
 139    private void OnFloorLoaded(IDCLEntity entity)
 140    {
 8141        entity.OnShapeUpdated -= OnFloorLoaded;
 8142        loadedFloorEntities.Add(entity.entityId);
 8143        RemovePlaceHolder(entity.entityId);
 144
 8145        numberOfParcelsLoaded++;
 8146        if (sceneToEdit != null && numberOfParcelsLoaded >= sceneToEdit.sceneData.parcels.Count())
 8147            OnAllParcelsFloorLoaded?.Invoke();
 0148    }
 149
 150    private void RemovePlaceHolder(string entityId)
 151    {
 8152        if (!floorPlaceHolderDict.ContainsKey(entityId))
 3153            return;
 154
 5155        GameObject floorPlaceHolder = floorPlaceHolderDict[entityId];
 5156        floorPlaceHolderDict.Remove(entityId);
 5157        GameObject.Destroy(floorPlaceHolder);
 5158        dclBuilderMeshLoadIndicatorController.HideIndicator(entityId);
 5159    }
 160
 161    private void RemoveAllPlaceHolders()
 162    {
 44163        foreach (GameObject gameObject in floorPlaceHolderDict.Values)
 164        {
 2165            GameObject.Destroy(gameObject);
 166        }
 20167        floorPlaceHolderDict.Clear();
 20168    }
 169
 170    public override void ExitEditMode()
 171    {
 0172        base.ExitEditMode();
 173
 0174        RemoveAllPlaceHolders();
 0175        dclBuilderMeshLoadIndicatorController.HideAllIndicators();
 0176    }
 177}