< Summary

Class:BIWEntityHandler
Assembly:BuilderInWorld
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/DCLPlugins/BuilderInWorld/Scripts/Controllers/BIWEntityHandler.cs
Covered lines:360
Uncovered lines:64
Coverable lines:424
Total lines:863
Line coverage:84.9% (360 of 424)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
BIWEntityHandler()0%110100%
Initialize(...)0%220100%
OnInputMouseDown(...)0%6200%
OnInputMouseUp(...)0%220100%
Dispose()0%220100%
Update()0%12300%
ReportTransform(...)0%15.286036.36%
GetLastTimeReport()0%2100%
GetSelectedEntityList()0%2100%
IsAnyEntitySelected()0%110100%
SetActiveMode(...)0%2100%
SetMultiSelectionActive(...)0%2100%
EnterEditMode(...)0%110100%
CheckErrorOnEntities()0%330100%
IsPointerInSelectedEntity()0%4.024090%
DeleteSelectedEntitiesInput()0%6200%
DuplicateSelectedEntitiesInput()0%12300%
ExitEditMode()0%6200%
ChangeEntitySelectionFromList(...)0%2.52050%
SelectFromList(...)0%4.374071.43%
DeselectEntity(...)0%7.297081.82%
DeselectEntities()0%440100%
EntityClicked(...)0%7.67076.92%
ReSelectEntities()0%330100%
ChangeEntitySelectStatus(...)0%2.062075%
CancelSelection()0%2.032080%
ChangeLockStateSelectedEntities()0%220100%
ShowAllEntities()0%330100%
ChangeShowStateSelectedEntities()0%440100%
Select(...)0%2.032080%
SelectEntity(...)0%6.016092.86%
GetAllVoxelsEntities()0%440100%
GetAllEntitiesFromCurrentScene()0%330100%
GetConvertedEntity(...)0%2.152066.67%
GetConvertedEntity(...)0%220100%
DuplicateSelectedEntities()0%440100%
DuplicateEntity(...)0%110100%
CreateEntityFromJSON(...)0%7.057090%
CreateEmptyEntity(...)0%330100%
SetupAllEntities()0%220100%
DestroyLastCreatedEntities()0%770100%
EntityListChanged()0%2.062075%
GetCurrentSceneEntityCount()0%110100%
GetEntitiesInCurrentScene()0%330100%
SetupEntityToEdit(...)0%7.647076.47%
ChangeEntityBoundsCheckerStatus(...)0%220100%
GetNewNameForEntity(...)0%110100%
GetNewNameForEntity(...)0%3.143075%
DeleteFloorEntities()0%440100%
DeleteEntity(...)0%110100%
DeleteEntity(...)0%110100%
DeleteEntity(...)0%9.019095%
DeleteSingleEntity(...)0%110100%
DeleteSelectedEntities()0%4.014092.31%
DeleteEntitiesOutsideSceneBoundaries()0%550100%
DestroyCollidersForAllEntities()0%220100%
RemoveConvertedEntity(...)0%110100%
NotifyEntityIsCreated(...)0%220100%
SetEntityName(...)0%110100%
SetEntityName(...)0%6.176083.33%
ChangeEntityVisibilityStatus(...)0%330100%
ChangeEntityLockStatus(...)0%4.134080%
GetConvertedUniqueKeyForEntity(...)0%110100%
GetConvertedUniqueKeyForEntity(...)0%110100%
AreAllEntitiesInsideBoundaries()0%330100%

File(s)

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

#LineLine coverage
 1using DCL;
 2using DCL.Components;
 3using DCL.Configuration;
 4using DCL.Controllers;
 5using DCL.Helpers;
 6using DCL.Interface;
 7using DCL.Models;
 8using Newtonsoft.Json;
 9using System;
 10using System.Collections;
 11using System.Collections.Generic;
 12using System.Diagnostics.CodeAnalysis;
 13using DCL.Builder;
 14using UnityEngine;
 15using Environment = DCL.Environment;
 16
 17public class BIWEntityHandler : BIWController, IBIWEntityHandler
 18{
 19    private const float DUPLICATE_OFFSET = 2f;
 20
 21    private IBIWOutlinerController outlinerController;
 22
 23    private IBIWModeController modeController;
 24    private IBIWActionController actionController;
 25    private IBIWCreatorController creatorController;
 26    private IBIWRaycastController raycastController;
 27
 28    private BuilderInWorldBridge bridge;
 29    private Material editMaterial;
 30
 31    private InputAction_Trigger hideSelectedEntitiesAction;
 32
 33    private InputAction_Trigger showAllEntitiesAction;
 34
 7035    private readonly Dictionary<string, BIWEntity> convertedEntities = new Dictionary<string, BIWEntity>();
 7036    private readonly List<BIWEntity> selectedEntities = new List<BIWEntity>();
 37
 38    private IBIWMode currentActiveMode;
 39    internal bool isMultiSelectionActive = false;
 40    internal bool isSecondayClickPressed = false;
 41
 42    private float lastTransformReportTime;
 43
 7044    private List<string> entityNameList = new List<string>();
 45
 46    private InputAction_Trigger.Triggered hideSelectedEntitiesDelegate;
 47    private InputAction_Trigger.Triggered showAllEntitiesDelegate;
 48
 49    private IBuilderEditorHUDController hudController;
 50
 51    public event Action<BIWEntity> OnEntityDeselected;
 52    public event Action OnEntitySelected;
 53    public event Action<List<BIWEntity>> OnDeleteSelectedEntities;
 54    public event Action<BIWEntity> OnEntityDeleted;
 55
 56    private BIWEntity lastClickedEntity;
 57    private float lastTimeEntityClicked;
 58
 59    public override void Initialize(IContext context)
 60    {
 7061        base.Initialize(context);
 7062        if ( context.editorContext.editorHUD != null)
 63        {
 7064            hudController = context.editorContext.editorHUD;
 7065            hudController.OnEntityDelete += DeleteSingleEntity;
 7066            hudController.OnDuplicateSelectedAction += DuplicateSelectedEntitiesInput;
 7067            hudController.OnDeleteSelectedAction += DeleteSelectedEntitiesInput;
 7068            hudController.OnEntityClick += ChangeEntitySelectionFromList;
 7069            hudController.OnEntityLock += ChangeEntityLockStatus;
 7070            hudController.OnEntityChangeVisibility += ChangeEntityVisibilityStatus;
 7071            hudController.OnEntityRename += SetEntityName;
 7072            hudController.OnEntitySmartItemComponentUpdate += UpdateSmartItemComponentInKernel;
 73        }
 74
 75
 7076        BIWInputWrapper.OnMouseDown += OnInputMouseDown;
 7077        BIWInputWrapper.OnMouseUp += OnInputMouseUp;
 78
 7079        DCL.Environment.i.world.sceneBoundsChecker.OnEntityBoundsCheckerStatusChanged += ChangeEntityBoundsCheckerStatus
 80
 7081        bridge = context.sceneReferences.biwBridgeGameObject.GetComponent<BuilderInWorldBridge>();
 82
 7083        outlinerController = context.editorContext.outlinerController;
 84
 7085        modeController = context.editorContext.modeController;
 7086        actionController = context.editorContext.actionController;
 7087        creatorController = context.editorContext.creatorController;
 7088        raycastController = context.editorContext.raycastController;
 89
 7090        editMaterial = context.projectReferencesAsset.editMaterial;
 91
 7092        hideSelectedEntitiesAction = context.inputsReferencesAsset.hideSelectedEntitiesAction;
 7093        showAllEntitiesAction = context.inputsReferencesAsset.showAllEntitiesAction;
 94
 7095        hideSelectedEntitiesDelegate = (action) => ChangeShowStateSelectedEntities();
 7096        showAllEntitiesDelegate = (action) => ShowAllEntities();
 97
 7098        hideSelectedEntitiesAction.OnTriggered += hideSelectedEntitiesDelegate;
 7099        showAllEntitiesAction.OnTriggered += showAllEntitiesDelegate;
 100
 70101        actionController.OnRedo += ReSelectEntities;
 70102        actionController.OnUndo += ReSelectEntities;
 70103    }
 104
 105    internal void OnInputMouseDown(int buttonId, Vector3 mousePosition)
 106    {
 0107        if (buttonId == 1)
 0108            isSecondayClickPressed = true;
 0109    }
 110
 111    internal void OnInputMouseUp(int buttonId, Vector3 mousePosition)
 112    {
 5113        if (buttonId == 1)
 5114            isSecondayClickPressed = false;
 5115    }
 116
 117    public override void Dispose()
 118    {
 56119        DestroyCollidersForAllEntities();
 120
 56121        actionController.OnRedo -= ReSelectEntities;
 56122        actionController.OnUndo -= ReSelectEntities;
 123
 56124        hideSelectedEntitiesAction.OnTriggered -= hideSelectedEntitiesDelegate;
 56125        showAllEntitiesAction.OnTriggered -= showAllEntitiesDelegate;
 126
 56127        DCL.Environment.i.world.sceneBoundsChecker.OnEntityBoundsCheckerStatusChanged -= ChangeEntityBoundsCheckerStatus
 128
 56129        BIWInputWrapper.OnMouseDown -= OnInputMouseDown;
 56130        BIWInputWrapper.OnMouseUp -= OnInputMouseUp;
 131
 56132        if (hudController != null)
 133        {
 56134            hudController.OnEntityDelete -= DeleteSingleEntity;
 56135            hudController.OnDuplicateSelectedAction -= DuplicateSelectedEntitiesInput;
 56136            hudController.OnDeleteSelectedAction -= DeleteSelectedEntitiesInput;
 56137            hudController.OnEntityClick -= ChangeEntitySelectionFromList;
 56138            hudController.OnEntityLock -= ChangeEntityLockStatus;
 56139            hudController.OnEntityChangeVisibility -= ChangeEntityVisibilityStatus;
 56140            hudController.OnEntityChangeVisibility -= ChangeEntityVisibilityStatus;
 56141            hudController.OnEntityRename -= SetEntityName;
 56142            hudController.OnEntitySmartItemComponentUpdate -= UpdateSmartItemComponentInKernel;
 143        }
 56144    }
 145
 146    public override void Update()
 147    {
 0148        base.Update();
 149
 0150        if (selectedEntities.Count == 0)
 0151            return;
 0152        if ((DCLTime.realtimeSinceStartup - lastTransformReportTime) <= BIWSettings.ENTITY_POSITION_REPORTING_DELAY)
 0153            return;
 154
 0155        ReportTransform();
 0156    }
 157
 158    public void ReportTransform(bool forceReport = false)
 159    {
 4160        foreach (BIWEntity entity in selectedEntities)
 161        {
 0162            if (!entity.HasMovedSinceLastReport() &&
 163                !entity.HasScaledSinceLastReport() &&
 164                !entity.HasRotatedSinceLastReport() &&
 165                !forceReport)
 0166                return;
 0167            bridge.EntityTransformReport(entity.rootEntity, sceneToEdit);
 0168            entity.PositionReported();
 0169            entity.ScaleReported();
 0170            entity.RotationReported();
 171        }
 172
 2173        lastTransformReportTime = DCLTime.realtimeSinceStartup;
 2174    }
 175
 0176    public float GetLastTimeReport() { return lastTransformReportTime; }
 177
 0178    public List<BIWEntity> GetSelectedEntityList() { return selectedEntities; }
 179
 1180    public bool IsAnyEntitySelected() { return selectedEntities.Count > 0; }
 181    public void SetActiveMode(IBIWMode buildMode)
 182    {
 0183        currentActiveMode = buildMode;
 0184        DeselectEntities();
 0185    }
 186
 0187    public void SetMultiSelectionActive(bool isActive) { isMultiSelectionActive = isActive; }
 188
 189    public override void EnterEditMode(IParcelScene scene)
 190    {
 72191        base.EnterEditMode(scene);
 192
 72193        SetupAllEntities();
 72194        EntityListChanged();
 72195        CheckErrorOnEntities();
 72196    }
 197
 198    private void CheckErrorOnEntities()
 199    {
 240200        foreach (BIWEntity entity in convertedEntities.Values)
 201        {
 48202            entity.CheckErrors();
 48203            if (entity.hasMissingCatalogItemError)
 48204                creatorController.CreateErrorOnEntity(entity);
 205        }
 72206    }
 207
 208    public bool IsPointerInSelectedEntity()
 209    {
 2210        BIWEntity entityInPointer = raycastController.GetEntityOnPointer();
 2211        if (entityInPointer == null)
 1212            return false;
 213
 3214        foreach (BIWEntity entity in selectedEntities)
 215        {
 1216            if (entityInPointer == entity)
 1217                return true;
 218        }
 219
 0220        return false;
 1221    }
 222
 223    private void DeleteSelectedEntitiesInput()
 224    {
 0225        if (selectedEntities.Count > 0)
 0226            DeleteSelectedEntities();
 0227    }
 228
 229    private void DuplicateSelectedEntitiesInput()
 230    {
 0231        if (selectedEntities.Count <= 0 || isSecondayClickPressed)
 0232            return;
 233
 0234        DuplicateSelectedEntities();
 0235    }
 236
 237    public override void ExitEditMode()
 238    {
 0239        base.ExitEditMode();
 0240        DeselectEntities();
 241
 0242        foreach (BIWEntity entity in convertedEntities.Values)
 243        {
 0244            entity.Dispose();
 245        }
 246
 0247        convertedEntities.Clear();
 0248    }
 249
 250    internal void ChangeEntitySelectionFromList(BIWEntity entityToEdit)
 251    {
 1252        if (!selectedEntities.Contains(entityToEdit))
 1253            SelectFromList(entityToEdit);
 254        else
 0255            DeselectEntity(entityToEdit);
 0256    }
 257
 258    private void SelectFromList(BIWEntity entityToEdit)
 259    {
 1260        if (!isMultiSelectionActive)
 1261            DeselectEntities();
 1262        if (SelectEntity(entityToEdit))
 263        {
 1264            if (!isMultiSelectionActive)
 1265                outlinerController.OutlineEntity(entityToEdit);
 266            else
 0267                outlinerController.OutlineEntities(selectedEntities);
 268        }
 0269    }
 270
 271    public void DeselectEntity(BIWEntity entity)
 272    {
 12273        if (!selectedEntities.Contains(entity))
 0274            return;
 275
 12276        entity.Deselect();
 277
 12278        outlinerController.CancelEntityOutline(entity);
 12279        selectedEntities.Remove(entity);
 12280        hudController?.UpdateEntitiesSelection(selectedEntities.Count);
 12281        currentActiveMode?.EntityDeselected(entity);
 12282        if (selectedEntities.Count <= 0 &&
 283            hudController != null)
 12284            hudController.HideEntityInformation();
 285
 12286        OnEntityDeselected?.Invoke(entity);
 0287    }
 288
 289    public void DeselectEntities()
 290    {
 40291        if (selectedEntities.Count <= 0)
 31292            return;
 293
 9294        int amountToDeselect = selectedEntities.Count;
 36295        for (int i = 0; i < amountToDeselect; i++)
 296        {
 9297            DeselectEntity(selectedEntities[0]);
 298        }
 299
 9300        currentActiveMode?.OnDeselectedEntities();
 301
 9302        Cursor.SetCursor(null, Vector2.zero, CursorMode.Auto);
 9303    }
 304
 305    public void EntityClicked(BIWEntity entityToSelect)
 306    {
 3307        if (entityToSelect != null)
 308        {
 3309            if (!isMultiSelectionActive)
 3310                DeselectEntities();
 311
 3312            if (!entityToSelect.isLocked)
 3313                ChangeEntitySelectStatus(entityToSelect);
 314
 3315            if (entityToSelect == lastClickedEntity && (lastTimeEntityClicked + BIWSettings.MOUSE_MS_DOUBLE_CLICK_THRESH
 1316                modeController.EntityDoubleClick(entityToSelect);
 317
 3318            lastClickedEntity = entityToSelect;
 3319            lastTimeEntityClicked = Time.realtimeSinceStartup;
 3320        }
 0321        else if (!isMultiSelectionActive)
 322        {
 0323            DeselectEntities();
 324        }
 0325    }
 326
 327    internal void ReSelectEntities()
 328    {
 13329        List<BIWEntity> entitiesToReselect = new List<BIWEntity>();
 28330        foreach (BIWEntity entity in selectedEntities)
 331        {
 1332            entitiesToReselect.Add(entity);
 333        }
 334
 13335        DeselectEntities();
 336
 28337        foreach (BIWEntity entity in entitiesToReselect)
 338        {
 1339            SelectEntity(entity);
 340        }
 13341    }
 342
 343    internal void ChangeEntitySelectStatus(BIWEntity entityCliked)
 344    {
 3345        if (entityCliked.isSelected)
 0346            DeselectEntity(entityCliked);
 347        else
 3348            SelectEntity(entityCliked);
 3349    }
 350
 351    public void CancelSelection()
 352    {
 1353        if (selectedEntities.Count == 0)
 0354            return;
 355
 1356        DestroyLastCreatedEntities();
 1357        DeselectEntities();
 1358    }
 359
 360    public void ChangeLockStateSelectedEntities()
 361    {
 4362        foreach (BIWEntity entity in selectedEntities)
 363        {
 1364            entity.ToggleLockStatus();
 365        }
 366
 1367        DeselectEntities();
 1368    }
 369
 370    public void ShowAllEntities()
 371    {
 4372        foreach (BIWEntity entity in convertedEntities.Values)
 373        {
 1374            if (!entity.isVisible)
 1375                entity.ToggleShowStatus();
 376        }
 1377    }
 378
 379    public void ChangeShowStateSelectedEntities()
 380    {
 1381        List<BIWEntity> entitiesToHide = new List<BIWEntity>(selectedEntities);
 382
 4383        foreach (BIWEntity entity in entitiesToHide)
 384        {
 1385            if (entity.isVisible && entity.isSelected)
 1386                DeselectEntity(entity);
 1387            entity.ToggleShowStatus();
 388        }
 1389    }
 390
 391    public void Select(IDCLEntity entity)
 392    {
 8393        BIWEntity entityEditable = GetConvertedEntity(entity);
 8394        if (entityEditable == null)
 0395            return;
 396
 8397        SelectEntity(entityEditable, true);
 8398    }
 399
 400    public bool SelectEntity(BIWEntity entityEditable, bool selectedFromCatalog = false)
 401    {
 27402        if (entityEditable.isLocked)
 1403            return false;
 404
 26405        if (entityEditable.isSelected)
 0406            return false;
 407
 26408        entityEditable.Select();
 409
 26410        selectedEntities.Add(entityEditable);
 411
 26412        currentActiveMode?.SelectedEntity(entityEditable);
 413
 26414        if ( context.editorContext.editorHUD != null)
 415        {
 26416            hudController.UpdateEntitiesSelection(selectedEntities.Count);
 26417            hudController.ShowEntityInformation(selectedFromCatalog);
 26418            hudController.EntityInformationSetEntity(entityEditable, sceneToEdit);
 419        }
 420
 26421        outlinerController.CancelAllOutlines();
 422
 26423        OnEntitySelected?.Invoke();
 424
 26425        return true;
 426    }
 427
 428    public List<BIWEntity> GetAllVoxelsEntities()
 429    {
 1430        List<BIWEntity> voxelEntities = new List<BIWEntity>();
 4431        foreach (BIWEntity entity in convertedEntities.Values)
 432        {
 1433            if (entity.rootEntity.scene == sceneToEdit && entity.isVoxel)
 1434                voxelEntities.Add(entity);
 435        }
 436
 1437        return voxelEntities;
 438    }
 439
 440    public List<BIWEntity> GetAllEntitiesFromCurrentScene()
 441    {
 56442        List<BIWEntity> entities = new List<BIWEntity>();
 246443        foreach (BIWEntity entity in convertedEntities.Values)
 444        {
 67445            if (entity.rootEntity.scene == sceneToEdit)
 67446                entities.Add(entity);
 447        }
 448
 56449        return entities;
 450    }
 451
 452    public BIWEntity GetConvertedEntity(string entityId)
 453    {
 6454        if (convertedEntities.ContainsKey(GetConvertedUniqueKeyForEntity(entityId)))
 6455            return convertedEntities[GetConvertedUniqueKeyForEntity(entityId)];
 456
 0457        return null;
 458    }
 459
 460    public BIWEntity GetConvertedEntity(IDCLEntity entity)
 461    {
 17462        if (convertedEntities.ContainsKey(GetConvertedUniqueKeyForEntity(entity)))
 16463            return convertedEntities[GetConvertedUniqueKeyForEntity(entity)];
 464
 1465        return null;
 466    }
 467
 468    public void DuplicateSelectedEntities()
 469    {
 2470        BIWCompleteAction buildAction = new BIWCompleteAction();
 2471        buildAction.actionType = IBIWCompleteAction.ActionType.CREATE;
 472
 2473        List<BIWEntityAction> entityActionList = new List<BIWEntityAction>();
 2474        List<BIWEntity> entitiesToDuplicate = new List<BIWEntity>(selectedEntities);
 2475        DeselectEntities();
 476
 8477        foreach (BIWEntity entityToDuplicate in entitiesToDuplicate)
 478        {
 2479            if (entityToDuplicate.isNFT)
 480                continue;
 481
 2482            var entityDuplicated = DuplicateEntity(entityToDuplicate);
 2483            BIWEntityAction biwEntityAction = new BIWEntityAction(entityDuplicated.rootEntity, entityDuplicated.rootEnti
 2484            entityActionList.Add(biwEntityAction);
 2485            SelectEntity(entityDuplicated);
 486        }
 487
 2488        currentActiveMode?.SetDuplicationOffset(DUPLICATE_OFFSET);
 489
 2490        buildAction.CreateActionType(entityActionList, IBIWCompleteAction.ActionType.CREATE);
 2491        actionController.AddAction(buildAction);
 2492    }
 493
 494    public BIWEntity DuplicateEntity(BIWEntity entityToDuplicate)
 495    {
 3496        IDCLEntity entity = SceneUtils.DuplicateEntity(sceneToEdit, entityToDuplicate.rootEntity);
 497        //Note: If the entity contains the name component or DCLLockedOnEdit, we don't want to copy them
 3498        entity.RemoveSharedComponent(typeof(DCLName), false);
 3499        entity.RemoveSharedComponent(typeof(DCLLockedOnEdit), false);
 500
 3501        BIWUtils.CopyGameObjectStatus(entityToDuplicate.rootEntity.gameObject, entity.gameObject, false, false);
 3502        BIWEntity convertedEntity = SetupEntityToEdit(entity);
 503
 3504        NotifyEntityIsCreated(entity);
 3505        EntityListChanged();
 3506        return convertedEntity;
 507    }
 508
 509    public IDCLEntity CreateEntityFromJSON(string entityJson)
 510    {
 3511        EntityData data = BIWUtils.ConvertJSONToEntityData(entityJson);
 512
 3513        IDCLEntity newEntity = sceneToEdit.CreateEntity(data.entityId);
 514
 515
 3516        if (data.transformComponent != null)
 517        {
 1518            DCLTransform.Model model = new DCLTransform.Model();
 1519            model.position = data.transformComponent.position;
 1520            model.rotation = Quaternion.Euler(data.transformComponent.rotation);
 1521            model.scale = data.transformComponent.scale;
 522
 1523            EntityComponentsUtils.AddTransformComponent(sceneToEdit, newEntity, model);
 524        }
 525
 6526        foreach (ProtocolV2.GenericComponent component in data.components)
 527        {
 0528            sceneToEdit.EntityComponentCreateOrUpdateWithModel(newEntity.entityId, (CLASS_ID_COMPONENT) component.compon
 529        }
 530
 10531        foreach (ProtocolV2.GenericComponent component in data.sharedComponents)
 532        {
 2533            sceneToEdit.SharedComponentAttach(newEntity.entityId, component.classId);
 534        }
 535
 3536        if (data.nftComponent != null)
 537        {
 1538            NFTShape.Model model = new NFTShape.Model();
 1539            model.color = data.nftComponent.color.ToColor();
 1540            model.src = data.nftComponent.src;
 1541            model.assetId = data.nftComponent.assetId;
 542
 1543            EntityComponentsUtils.AddNFTShapeComponent(sceneToEdit, newEntity, model, data.nftComponent.id);
 544        }
 545
 3546        var convertedEntity = SetupEntityToEdit(newEntity, true);
 547
 3548        if (convertedEntity.rootEntity.TryGetSharedComponent(CLASS_ID.GLTF_SHAPE, out var gltfComponent))
 0549            gltfComponent.CallWhenReady(convertedEntity.ShapeLoadFinish);
 550
 3551        if (convertedEntity.rootEntity.TryGetSharedComponent(CLASS_ID.NFT_SHAPE, out var nftComponent))
 1552            nftComponent.CallWhenReady(convertedEntity.ShapeLoadFinish);
 553
 554
 3555        creatorController.CreateLoadingObject(convertedEntity);
 3556        EntityListChanged();
 557
 3558        return newEntity;
 559    }
 560
 561    public BIWEntity CreateEmptyEntity(IParcelScene parcelScene, Vector3 entryPoint, Vector3 editionGOPosition, bool not
 562    {
 30563        IDCLEntity newEntity = parcelScene.CreateEntity(Guid.NewGuid().ToString());
 30564        DCLTransform.Model transformModel = new DCLTransform.Model();
 30565        transformModel.position = WorldStateUtils.ConvertUnityToScenePosition(entryPoint, parcelScene);
 566
 30567        Vector3 pointToLookAt = Camera.main.transform.position;
 30568        pointToLookAt.y = editionGOPosition.y;
 30569        Quaternion lookOnLook = Quaternion.LookRotation(editionGOPosition - pointToLookAt);
 570
 30571        transformModel.rotation = lookOnLook;
 30572        transformModel.scale = newEntity.gameObject.transform.lossyScale;
 573
 30574        EntityComponentsUtils.AddTransformComponent(parcelScene, newEntity, transformModel);
 575
 30576        BIWEntity convertedEntity = SetupEntityToEdit(newEntity, true);
 30577        hudController?.UpdateSceneLimitInfo();
 578
 30579        if (notifyEntityList)
 11580            EntityListChanged();
 30581        return convertedEntity;
 582    }
 583
 584    private void SetupAllEntities()
 585    {
 240586        foreach (IDCLEntity entity in sceneToEdit.entities.Values)
 587        {
 48588            SetupEntityToEdit(entity);
 589        }
 72590    }
 591
 592    public void DestroyLastCreatedEntities()
 593    {
 2594        List<BIWEntity> entitiesToRemove = new List<BIWEntity>();
 8595        foreach (BIWEntity entity in selectedEntities)
 596        {
 2597            if (entity.isSelected && entity.isNew)
 1598                entitiesToRemove.Add(entity);
 599        }
 600
 2601        if (entitiesToRemove.Count == 0)
 1602            return;
 603
 1604        modeController.UndoEditionGOLastStep();
 605
 4606        foreach (BIWEntity entity in entitiesToRemove)
 607        {
 1608            DeleteEntity(entity, false);
 609        }
 610
 1611        hudController?.HideEntityInformation();
 1612    }
 613
 614    public void EntityListChanged()
 615    {
 117616        if ( context.editorContext.editorHUD == null)
 0617            return;
 117618        hudController.SetEntityList(GetEntitiesInCurrentScene());
 117619    }
 620
 2621    public int GetCurrentSceneEntityCount() { return GetEntitiesInCurrentScene().Count; }
 622
 623    List<BIWEntity> GetEntitiesInCurrentScene()
 624    {
 119625        List<BIWEntity> currentEntitiesInScene = new List<BIWEntity>();
 448626        foreach (BIWEntity entity in convertedEntities.Values)
 627        {
 105628            if (entity.rootEntity.scene == sceneToEdit)
 105629                currentEntitiesInScene.Add(entity);
 630        }
 631
 119632        return currentEntitiesInScene;
 633    }
 634
 635    BIWEntity SetupEntityToEdit(IDCLEntity entity, bool hasBeenCreated = false)
 636    {
 84637        string biwEntityId = GetConvertedUniqueKeyForEntity(entity);
 638
 84639        if (convertedEntities.ContainsKey(biwEntityId))
 1640            return convertedEntities[biwEntityId];
 641
 83642        BIWEntity entityToEdit = new BIWEntity();
 83643        entityToEdit.Initialize(entity, editMaterial);
 83644        convertedEntities.Add(entityToEdit.entityUniqueId, entityToEdit);
 83645        entity.OnRemoved += RemoveConvertedEntity;
 83646        entityToEdit.isNew = hasBeenCreated;
 647
 83648        string entityName = entityToEdit.GetDescriptiveName();
 83649        var catalogItem = entityToEdit.GetCatalogItemAssociated();
 650
 83651        if ((string.IsNullOrEmpty(entityName) || entityNameList.Contains(entityName)) && catalogItem != null)
 652        {
 0653            entityName = GetNewNameForEntity(catalogItem);
 0654            SetEntityName(entityToEdit, entityName);
 0655        }
 83656        else if (!string.IsNullOrEmpty(entityName) && !entityNameList.Contains(entityName))
 657        {
 0658            entityNameList.Add(entityName);
 659        }
 660
 83661        return entityToEdit;
 662    }
 663
 664    internal void ChangeEntityBoundsCheckerStatus(IDCLEntity entity, bool isInsideBoundaries)
 665    {
 2666        var convertedEntity = GetConvertedEntity(entity);
 2667        if (convertedEntity == null)
 1668            return;
 669
 1670        convertedEntity.SetEntityBoundariesError(isInsideBoundaries);
 1671    }
 672
 1673    public string GetNewNameForEntity(CatalogItem sceneObject) { return GetNewNameForEntity(sceneObject.name); }
 674
 675    public string GetNewNameForEntity(string name)
 676    {
 3677        int i = 1;
 3678        if (!entityNameList.Contains(name))
 1679            return name;
 680
 2681        string newName = name + " " + i;
 2682        while (entityNameList.Contains(newName))
 683        {
 0684            i++;
 0685            newName = name + " " + i;
 686        }
 687
 2688        return newName;
 689    }
 690
 691    public void DeleteFloorEntities()
 692    {
 4693        List<BIWEntity> entitiesToDelete = new List<BIWEntity>();
 694
 22695        foreach (BIWEntity entity in convertedEntities.Values)
 696        {
 7697            if (entity.isFloor)
 698            {
 4699                entitiesToDelete.Add(entity);
 700            }
 701        }
 702
 16703        foreach (BIWEntity entity in entitiesToDelete)
 4704            DeleteEntity(entity, false);
 4705    }
 706
 707    public void DeleteEntity(string entityId)
 708    {
 3709        BIWEntity entity = convertedEntities[GetConvertedUniqueKeyForEntity(entityId)];
 3710        DeleteEntity(entity, true);
 3711    }
 712
 8713    public void DeleteEntity(BIWEntity entityToDelete) { DeleteEntity(entityToDelete, true); }
 714
 715    public void DeleteEntity(BIWEntity entityToDelete, bool checkSelection)
 716    {
 13717        if (entityToDelete.isSelected && checkSelection)
 0718            DeselectEntity(entityToDelete);
 719
 13720        if (selectedEntities.Contains(entityToDelete))
 721        {
 1722            selectedEntities.Remove(entityToDelete);
 1723            hudController?.UpdateEntitiesSelection(selectedEntities.Count);
 724        }
 725
 13726        string entityName = entityToDelete.GetDescriptiveName();
 727
 13728        if (entityNameList.Contains(entityName))
 4729            entityNameList.Remove(entityName);
 730
 13731        RemoveConvertedEntity(entityToDelete.rootEntity);
 13732        entityToDelete.rootEntity.OnRemoved -= RemoveConvertedEntity;
 13733        entityToDelete.Delete();
 13734        string idToRemove = entityToDelete.rootEntity.entityId;
 13735        OnEntityDeleted?.Invoke(entityToDelete);
 13736        creatorController.RemoveLoadingObjectInmediate(entityToDelete.rootEntity.entityId);
 13737        if (sceneToEdit.entities.ContainsKey(idToRemove))
 13738            sceneToEdit.RemoveEntity(idToRemove, true);
 739
 13740        hudController?.RefreshCatalogAssetPack();
 13741        EntityListChanged();
 13742        bridge?.RemoveEntityOnKernel(idToRemove, sceneToEdit);
 13743    }
 744
 745    public void DeleteSingleEntity(BIWEntity entityToDelete)
 746    {
 1747        actionController.CreateActionEntityDeleted(entityToDelete);
 1748        DeleteEntity(entityToDelete, true);
 1749    }
 750
 751    public void DeleteSelectedEntities()
 752    {
 2753        List<BIWEntity> entitiesToRemove = new List<BIWEntity>();
 754
 8755        for (int i = 0; i < selectedEntities.Count; i++)
 756        {
 2757            entitiesToRemove.Add(selectedEntities[i]);
 758        }
 759
 2760        actionController.CreateActionEntityDeleted(entitiesToRemove);
 761
 2762        DeselectEntities();
 763
 8764        foreach (BIWEntity entity in entitiesToRemove)
 765        {
 2766            DeleteEntity(entity);
 767        }
 768
 2769        OnDeleteSelectedEntities?.Invoke(entitiesToRemove);
 0770    }
 771
 772    public void DeleteEntitiesOutsideSceneBoundaries()
 773    {
 1774        List<BIWEntity> entitiesToRemove = new List<BIWEntity>();
 6775        foreach (BIWEntity entity in convertedEntities.Values)
 776        {
 2777            if (entity.rootEntity.scene == sceneToEdit)
 778            {
 2779                if (!DCL.Environment.i.world.sceneBoundsChecker.IsEntityInsideSceneBoundaries(entity.rootEntity))
 780                {
 2781                    entitiesToRemove.Add(entity);
 782                }
 783            }
 784        }
 785
 6786        foreach (BIWEntity entity in entitiesToRemove)
 787        {
 2788            DeleteEntity(entity);
 789        }
 1790    }
 791
 792    private void DestroyCollidersForAllEntities()
 793    {
 230794        foreach (BIWEntity entity in convertedEntities.Values)
 795        {
 59796            entity.DestroyColliders();
 797        }
 56798    }
 799
 166800    private void RemoveConvertedEntity(IDCLEntity entity) { convertedEntities.Remove(GetConvertedUniqueKeyForEntity(enti
 801
 36802    public void NotifyEntityIsCreated(IDCLEntity entity) { bridge?.AddEntityOnKernel(entity, sceneToEdit); }
 803
 804    [ExcludeFromCodeCoverage]
 805    public void UpdateSmartItemComponentInKernel(BIWEntity entityToUpdate) { bridge?.UpdateSmartItemComponent(entityToUp
 806
 4807    public void SetEntityName(BIWEntity entityToApply, string newName) { SetEntityName(entityToApply, newName, true); }
 808
 809    public void SetEntityName(BIWEntity entityToApply, string newName, bool sendUpdateToKernel = true)
 810    {
 17811        string currentName = entityToApply.GetDescriptiveName();
 812
 17813        if (currentName == newName)
 0814            return;
 815
 17816        if (entityNameList.Contains(newName))
 2817            newName = GetNewNameForEntity(newName);
 818
 17819        if (entityNameList.Contains(currentName))
 0820            entityNameList.Remove(currentName);
 821
 17822        entityToApply.SetDescriptiveName(newName);
 17823        entityNameList.Add(newName);
 824
 17825        if (sendUpdateToKernel)
 2826            bridge?.ChangedEntityName(entityToApply, sceneToEdit);
 17827    }
 828
 829    internal void ChangeEntityVisibilityStatus(BIWEntity entityToApply)
 830    {
 1831        entityToApply.ToggleShowStatus();
 1832        if (!entityToApply.isVisible && selectedEntities.Contains(entityToApply))
 1833            DeselectEntity(entityToApply);
 1834    }
 835
 836    internal void ChangeEntityLockStatus(BIWEntity entityToApply)
 837    {
 1838        entityToApply.ToggleLockStatus();
 1839        if (entityToApply.isLocked && selectedEntities.Contains(entityToApply))
 0840            DeselectEntity(entityToApply);
 841
 1842        bridge?.ChangeEntityLockStatus(entityToApply, sceneToEdit);
 1843    }
 844
 15845    private string GetConvertedUniqueKeyForEntity(string entityID) { return sceneToEdit.sceneData.id + entityID; }
 846
 200847    private string GetConvertedUniqueKeyForEntity(IDCLEntity entity) { return entity.scene.sceneData.id + entity.entityI
 848
 849    public bool AreAllEntitiesInsideBoundaries()
 850    {
 5851        bool areAllIn = true;
 14852        foreach (BIWEntity entity in convertedEntities.Values)
 853        {
 3854            if (!DCL.Environment.i.world.sceneBoundsChecker.IsEntityInsideSceneBoundaries(entity.rootEntity))
 855            {
 2856                areAllIn = false;
 2857                break;
 858            }
 859        }
 860
 5861        return areAllIn;
 862    }
 863}

Methods/Properties

BIWEntityHandler()
Initialize(DCL.Builder.IContext)
OnInputMouseDown(System.Int32, UnityEngine.Vector3)
OnInputMouseUp(System.Int32, UnityEngine.Vector3)
Dispose()
Update()
ReportTransform(System.Boolean)
GetLastTimeReport()
GetSelectedEntityList()
IsAnyEntitySelected()
SetActiveMode(IBIWMode)
SetMultiSelectionActive(System.Boolean)
EnterEditMode(DCL.Controllers.IParcelScene)
CheckErrorOnEntities()
IsPointerInSelectedEntity()
DeleteSelectedEntitiesInput()
DuplicateSelectedEntitiesInput()
ExitEditMode()
ChangeEntitySelectionFromList(BIWEntity)
SelectFromList(BIWEntity)
DeselectEntity(BIWEntity)
DeselectEntities()
EntityClicked(BIWEntity)
ReSelectEntities()
ChangeEntitySelectStatus(BIWEntity)
CancelSelection()
ChangeLockStateSelectedEntities()
ShowAllEntities()
ChangeShowStateSelectedEntities()
Select(DCL.Models.IDCLEntity)
SelectEntity(BIWEntity, System.Boolean)
GetAllVoxelsEntities()
GetAllEntitiesFromCurrentScene()
GetConvertedEntity(System.String)
GetConvertedEntity(DCL.Models.IDCLEntity)
DuplicateSelectedEntities()
DuplicateEntity(BIWEntity)
CreateEntityFromJSON(System.String)
CreateEmptyEntity(DCL.Controllers.IParcelScene, UnityEngine.Vector3, UnityEngine.Vector3, System.Boolean)
SetupAllEntities()
DestroyLastCreatedEntities()
EntityListChanged()
GetCurrentSceneEntityCount()
GetEntitiesInCurrentScene()
SetupEntityToEdit(DCL.Models.IDCLEntity, System.Boolean)
ChangeEntityBoundsCheckerStatus(DCL.Models.IDCLEntity, System.Boolean)
GetNewNameForEntity(CatalogItem)
GetNewNameForEntity(System.String)
DeleteFloorEntities()
DeleteEntity(System.String)
DeleteEntity(BIWEntity)
DeleteEntity(BIWEntity, System.Boolean)
DeleteSingleEntity(BIWEntity)
DeleteSelectedEntities()
DeleteEntitiesOutsideSceneBoundaries()
DestroyCollidersForAllEntities()
RemoveConvertedEntity(DCL.Models.IDCLEntity)
NotifyEntityIsCreated(DCL.Models.IDCLEntity)
SetEntityName(BIWEntity, System.String)
SetEntityName(BIWEntity, System.String, System.Boolean)
ChangeEntityVisibilityStatus(BIWEntity)
ChangeEntityLockStatus(BIWEntity)
GetConvertedUniqueKeyForEntity(System.String)
GetConvertedUniqueKeyForEntity(DCL.Models.IDCLEntity)
AreAllEntitiesInsideBoundaries()