< Summary

Class:BIWFloorHandler
Assembly:BuilderInWorld
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/DCLPlugins/BuilderInWorld/Scripts/Controllers/BIWFloorHandler.cs
Covered lines:71
Uncovered lines:16
Coverable lines:87
Total lines:196
Line coverage:81.6% (71 of 87)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
BIWFloorHandler()0%110100%
Initialize(...)0%110100%
EnterEditMode(...)0%4.594066.67%
Dispose()0%110100%
OnFloorEntityDeleted(...)0%220100%
CleanUp()0%110100%
ExistsFloorPlaceHolderForEntity(...)0%110100%
ChangeFloor(...)0%22090.91%
FindCurrentFloorCatalogItem()0%3.033085.71%
IsCatalogItemFloor(...)0%2100%
CreateDefaultFloor()0%2100%
CreateFloor(...)0%44094.74%
RemovePlaceHolder(...)0%110100%
OnFloorLoaded(...)0%4.054085.71%
RemovePlaceHolder(...)0%2.022083.33%
RemoveAllPlaceHolders()0%220100%
ExitEditMode()0%2100%

File(s)

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

#LineLine coverage
 1using System;
 2using DCL;
 3using DCL.Configuration;
 4using DCL.Controllers;
 5using DCL.Models;
 6using System.Collections;
 7using System.Collections.Generic;
 8using System.Linq;
 9using DCL.Builder;
 10using DCL.Components;
 11using UnityEngine;
 12
 13public class BIWFloorHandler : BIWController, IBIWFloorHandler
 14{
 15    public event Action OnAllParcelsFloorLoaded;
 16
 17    private IBIWActionController actionController;
 18
 19    private IBIWEntityHandler entityHandler;
 20    private IBIWCreatorController creatorController;
 21    private IBIWSaveController saveController;
 22
 23    private GameObject floorPrefab;
 24
 25    private int numberOfParcelsLoaded;
 26
 27    private CatalogItem lastFloorCalalogItemUsed;
 728    public Dictionary<long, GameObject> floorPlaceHolderDict { get; set; } = new Dictionary<long, GameObject>();
 729    private readonly List<long> loadedFloorEntities = new List<long>();
 30    private Camera mainCamera;
 31
 32    public override void Initialize(IContext context)
 33    {
 734        base.Initialize(context);
 35
 736        actionController = context.editorContext.actionController;
 737        entityHandler = context.editorContext.entityHandler;
 738        creatorController = context.editorContext.creatorController;
 739        saveController = context.editorContext.saveController;
 740        mainCamera = context.sceneReferences.mainCamera;
 741        floorPrefab = context.projectReferencesAsset.floorPlaceHolderPrefab;
 42
 743        entityHandler.OnEntityDeleted += OnFloorEntityDeleted;
 744    }
 45
 46    public override void EnterEditMode(IBuilderScene scene)
 47    {
 948        base.EnterEditMode(scene);
 2849        foreach (BIWEntity entity in entityHandler.GetAllEntitiesFromCurrentScene())
 50        {
 551            if(!entity.isFloor)
 52                continue;
 53
 054            if (!entity.isLoaded)
 055                entity.rootEntity.OnShapeLoaded += OnFloorLoaded;
 56            else
 057                OnFloorLoaded(entity.rootEntity);
 58        }
 959    }
 60
 61    public override void Dispose()
 62    {
 863        entityHandler.OnEntityDeleted -= OnFloorEntityDeleted;
 864        CleanUp();
 865    }
 66
 67    private void OnFloorEntityDeleted(BIWEntity entity)
 68    {
 669        if (entity.isFloor)
 470            RemovePlaceHolder(entity);
 671    }
 72
 1673    public void CleanUp() { RemoveAllPlaceHolders(); }
 74
 275    public bool ExistsFloorPlaceHolderForEntity(long entityId) { return floorPlaceHolderDict.ContainsKey(entityId); }
 76
 77    public void ChangeFloor(CatalogItem newFloorObject)
 78    {
 279        saveController.SetSaveActivation(false);
 280        CatalogItem lastFloor = lastFloorCalalogItemUsed;
 281        if (lastFloor == null)
 082            lastFloor = FindCurrentFloorCatalogItem();
 83
 284        entityHandler.DeleteFloorEntities();
 85
 286        CreateFloor(newFloorObject);
 87
 288        BIWCompleteAction buildAction = new BIWCompleteAction();
 89
 290        buildAction.CreateChangeFloorAction(lastFloor, newFloorObject);
 291        actionController.AddAction(buildAction);
 92
 293        saveController.SetSaveActivation(true, true);
 294    }
 95
 96    public CatalogItem FindCurrentFloorCatalogItem()
 97    {
 398        foreach (BIWEntity entity in entityHandler.GetAllEntitiesFromCurrentScene())
 99        {
 1100            if (entity.isFloor)
 101            {
 1102                return entity.GetCatalogItemAssociated();
 103            }
 104        }
 105
 0106        return null;
 1107    }
 108
 0109    public bool IsCatalogItemFloor(CatalogItem floorSceneObject) { return string.Equals(floorSceneObject.category, BIWSe
 110
 111    public void CreateDefaultFloor()
 112    {
 0113        CatalogItem floorSceneObject = BIWUtils.CreateFloorCatalogItem();
 0114        CreateFloor(floorSceneObject);
 0115    }
 116
 117    public void CreateFloor(CatalogItem floorSceneObject)
 118    {
 7119        if (sceneToEdit == null)
 0120            return;
 121
 7122        Vector3 initialPosition = new Vector3(ParcelSettings.PARCEL_SIZE / 2, 0, ParcelSettings.PARCEL_SIZE / 2);
 7123        Vector2Int[] parcelsPoints = sceneToEdit.sceneData.parcels;
 7124        numberOfParcelsLoaded = 0;
 7125        loadedFloorEntities.Clear();
 126
 28127        foreach (Vector2Int parcel in parcelsPoints)
 128        {
 7129            BIWEntity entity = creatorController.CreateCatalogItem(
 130                floorSceneObject,
 131                WorldStateUtils.ConvertPointInSceneToUnityPosition(initialPosition, parcel),
 132                false,
 133                true,
 134                OnFloorLoaded);
 135
 7136            long rootEntityId = entity.rootEntity.entityId;
 137
 138            // It may happen that when you get here, the floor entity is already loaded and it wouldn't be necessary to 
 7139            if (!loadedFloorEntities.Contains(rootEntityId))
 140            {
 7141                GameObject floorPlaceHolder = UnityEngine.Object.Instantiate(floorPrefab, entity.rootEntity.gameObject.t
 7142                floorPlaceHolder.GetComponentInChildren<BIWFloorLoading>().Initialize(mainCamera);
 7143                floorPlaceHolderDict.Add(entity.rootEntity.entityId, floorPlaceHolder);
 7144                entity.OnShapeFinishLoading += RemovePlaceHolder;
 145            }
 146        }
 147
 7148        entityHandler.DeselectEntities();
 7149        lastFloorCalalogItemUsed = floorSceneObject;
 7150    }
 151
 152    private void RemovePlaceHolder(BIWEntity entity)
 153    {
 4154        entity.OnShapeFinishLoading -= RemovePlaceHolder;
 4155        RemovePlaceHolder(entity.rootEntity.entityId);
 4156    }
 157
 158    private void OnFloorLoaded(IDCLEntity entity)
 159    {
 1160        entity.OnShapeLoaded -= OnFloorLoaded;
 1161        loadedFloorEntities.Add(entity.entityId);
 1162        RemovePlaceHolder(entity.entityId);
 163
 1164        numberOfParcelsLoaded++;
 1165        if (sceneToEdit != null && numberOfParcelsLoaded >= sceneToEdit.sceneData.parcels.Count())
 1166            OnAllParcelsFloorLoaded?.Invoke();
 0167    }
 168
 169    private void RemovePlaceHolder(long entityId)
 170    {
 5171        if (!floorPlaceHolderDict.ContainsKey(entityId))
 0172            return;
 173
 5174        GameObject floorPlaceHolder = floorPlaceHolderDict[entityId];
 5175        floorPlaceHolderDict.Remove(entityId);
 5176        UnityEngine.Object.Destroy(floorPlaceHolder);
 5177    }
 178
 179    private void RemoveAllPlaceHolders()
 180    {
 20181        foreach (GameObject gameObject in floorPlaceHolderDict.Values)
 182        {
 2183            UnityEngine.Object.Destroy(gameObject);
 184        }
 185
 8186        floorPlaceHolderDict.Clear();
 8187    }
 188
 189    public override void ExitEditMode()
 190    {
 0191        base.ExitEditMode();
 192
 0193        numberOfParcelsLoaded = 0;
 0194        RemoveAllPlaceHolders();
 0195    }
 196}