< Summary

Class:BIWEntity
Assembly:BuilderEntity
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/DCLPlugins/BuilderInWorld/Scripts/BuilderEntity/BIWEntity.cs
Covered lines:212
Uncovered lines:102
Coverable lines:314
Total lines:704
Line coverage:67.5% (212 of 314)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
BIWEntity()0%110100%
Initialize(...)0%440100%
GetCatalogItemAssociated()0%8.038092.31%
HasShape()0%2100%
HasMovedSinceLastReport()0%2100%
HasScaledSinceLastReport()0%2100%
HasRotatedSinceLastReport()0%2100%
PositionReported()0%2100%
ScaleReported()0%2100%
RotationReported()0%2100%
CheckErrors()0%550100%
SetEntityBoundariesError(...)0%110100%
Select()0%110100%
Deselect()0%330100%
ToggleShowStatus()0%2.062075%
ToggleLockStatus()0%110100%
ShapeLoadFinish(...)0%2.52050%
Delete()0%220100%
Dispose()0%10.147060%
DestroyColliders()0%3.13077.78%
AddRotation(...)0%2100%
SetRotation(...)0%2100%
GetEulerRotation()0%2100%
InitRotation()0%220100%
HasSmartItemComponent()0%220100%
HasSmartItemActions()0%2100%
GetSmartItemParameters()0%2100%
GetSmartItemActions()0%2100%
GetIsLockedValue()0%330100%
SetIsLockedValue(...)0%440100%
SetDescriptiveName(...)0%3.473062.5%
GetDescriptiveName()0%330100%
ResetTransfrom()0%6200%
ShapeInit()0%66095%
HandleAnimation()0%2.152066.67%
DefaultAnimationStop()0%12300%
DefaultAnimationSample(...)0%15.555025%
SetOriginalMaterials()0%26.978033.33%
SetEntityAsVoxel()0%2100%
SaveOriginalMaterial()0%15.115092.31%
SetEditMaterial()0%84.071009.52%
OnNameUpdate(...)0%2.52050%
OnShapeUpdate(...)0%2.062075%
CreateCollidersForEntity(...)0%21.1916072.73%
IsEntityNFT()0%330100%
IsEntityAFloor()0%330100%
IsEntityAVoxel()0%9.498071.43%

File(s)

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

#LineLine coverage
 1using DCL;
 2using DCL.Components;
 3using DCL.Configuration;
 4using DCL.Controllers;
 5using DCL.Helpers;
 6using DCL.Models;
 7using System;
 8using System.Collections.Generic;
 9using DCL.Builder;
 10using UnityEngine;
 11
 12public class BIWEntity
 13{
 114    public GameObject gameObject => rootEntity.gameObject;
 015    public Transform transform => rootEntity.gameObject.transform;
 16
 017    public IDCLEntity rootEntity { protected set; get; }
 18    public string entityUniqueId;
 19
 20    public event Action<BIWEntity> OnShapeFinishLoading;
 21    public event Action<BIWEntity> OnStatusUpdate;
 22    public event Action<BIWEntity> OnDelete;
 23    public event Action<BIWEntity> OnErrorStatusChange;
 24
 025    public bool isDeleted { get; private set; }
 26
 27    public bool isLocked
 28    {
 4329        get { return GetIsLockedValue(); }
 30        set
 31        {
 3832            SetIsLockedValue(value);
 3833            OnStatusUpdate?.Invoke(this);
 034        }
 35    }
 36
 37    private bool isSelectedValue = false;
 38
 39    public bool isSelected
 40    {
 041        get { return isSelectedValue; }
 42        set
 43        {
 3944            isSelectedValue = value;
 3945            OnStatusUpdate?.Invoke(this);
 046        }
 47    }
 48
 49    private bool isNewValue = false;
 50
 51    public bool isNew
 52    {
 053        get { return isNewValue; }
 54        set
 55        {
 10056            isNewValue = value;
 10057            OnStatusUpdate?.Invoke(this);
 058        }
 59    }
 60
 13161    private bool isVisibleValue = true;
 62
 63    public bool isVisible
 64    {
 065        get { return isVisibleValue; }
 66        set
 67        {
 14268            isVisibleValue = value;
 69
 14270            if (rootEntity != null && rootEntity.gameObject != null)
 71            {
 14072                rootEntity.gameObject.SetActive(isVisibleValue);
 73            }
 74
 14275            OnStatusUpdate?.Invoke(this);
 076        }
 77    }
 78
 079    public bool isVoxel { get; set; } = false;
 80
 81    private CatalogItem associatedCatalogItem;
 82
 083    public bool isFloor { get; set; } = false;
 084    public bool isNFT { get; private set; } = false;
 85
 86    private bool isShapeComponentSet = false;
 87
 88    private Animation[] meshAnimations;
 89
 90    private Vector3 currentRotation;
 91    private Transform originalParent;
 92
 93    private Material[] originalMaterials;
 94
 95    private Material editMaterial;
 96
 13197    private Dictionary<string, List<GameObject>> collidersGameObjectDictionary = new Dictionary<string, List<GameObject>
 98
 99    private Vector3 lastPositionReported;
 100    private Vector3 lastScaleReported;
 101    private Quaternion lastRotationReported;
 102
 103    #region Error Handler definition
 104
 0105    public bool hasError  { get; private set; } = false;
 106
 0107    public bool hasMissingCatalogItemError { get; private set; } = false;
 0108    public bool isInsideBoundariesError { get; private set; } = false;
 109
 110    #endregion
 111
 112    public void Initialize(IDCLEntity entity, Material editMaterial)
 113    {
 105114        rootEntity = entity;
 105115        rootEntity.OnShapeUpdated += OnShapeUpdate;
 105116        rootEntity.OnNameChange += OnNameUpdate;
 117
 105118        this.editMaterial = editMaterial;
 105119        isVoxel = false;
 120
 121
 105122        entityUniqueId = rootEntity.scene.sceneData.id + rootEntity.entityId;
 105123        if (rootEntity.gameObject != null)
 104124            isVisible = rootEntity.gameObject.activeSelf;
 125
 105126        isShapeComponentSet = false;
 105127        InitRotation();
 128
 105129        if (rootEntity.meshRootGameObject && rootEntity.meshesInfo.renderers.Length > 0)
 130        {
 7131            ShapeInit();
 132        }
 105133    }
 134
 135    public CatalogItem GetCatalogItemAssociated()
 136    {
 171137        if (associatedCatalogItem != null)
 5138            return associatedCatalogItem;
 139
 166140        if (rootEntity == null)
 1141            return null;
 142
 143        //We get the catalog reference
 165144        IAssetCatalogReferenceHolder catalogHolder = rootEntity.TryGetComponent<IAssetCatalogReferenceHolder>();
 165145        if (catalogHolder == null)
 119146            return null;
 147
 148        //we get the assetId to search in the catalog for the item
 46149        string assetId = catalogHolder.GetAssetId();
 150
 151        //We try to get the item from the main catalog that is usable right now
 46152        if (!string.IsNullOrEmpty(assetId) && DataStore.i.builderInWorld.catalogItemDict.TryGetValue(assetId, out associ
 9153            return associatedCatalogItem;
 154
 155        //If the item doesn't exist in the catalog, we fallback to the catalog of the scene
 37156        if (!string.IsNullOrEmpty(assetId) && DataStore.i.builderInWorld.currentSceneCatalogItemDict.TryGetValue(assetId
 0157            return associatedCatalogItem;
 158
 159        //Error 404: Item not found, we show a pink box to represent the item
 37160        return null;
 161    }
 162
 0163    public bool HasShape() { return isShapeComponentSet; }
 164
 0165    public bool HasMovedSinceLastReport() { return Vector3.Distance(lastPositionReported, rootEntity.gameObject.transfor
 166
 0167    public bool HasScaledSinceLastReport() { return Math.Abs(lastScaleReported.magnitude - rootEntity.gameObject.transfo
 168
 0169    public bool HasRotatedSinceLastReport() { return Quaternion.Angle(lastRotationReported, rootEntity.gameObject.transf
 170
 0171    public void PositionReported() { lastPositionReported = rootEntity.gameObject.transform.position; }
 172
 0173    public void ScaleReported() { lastScaleReported = rootEntity.gameObject.transform.lossyScale; }
 174
 0175    public void RotationReported() { lastRotationReported = rootEntity.gameObject.transform.rotation; }
 176
 177    #region Error Handling
 178
 179    public void CheckErrors()
 180    {
 63181        bool isCurrentlyWithError = false;
 182
 183        //If the entity doesn't have a catalog item associated, we can be sure that the item is deleted
 63184        if (GetCatalogItemAssociated() == null)
 185        {
 61186            hasMissingCatalogItemError = true;
 61187            isCurrentlyWithError = true;
 188        }
 189
 190        //If entity is not inside boundaries it has an error
 63191        if (isInsideBoundariesError)
 19192            isCurrentlyWithError = true;
 193
 63194        bool hasErrorPreviously = hasError;
 63195        hasError = isCurrentlyWithError;
 196
 63197        if (isCurrentlyWithError != hasErrorPreviously)
 55198            OnErrorStatusChange?.Invoke(this);
 8199    }
 200
 201    public void SetEntityBoundariesError(bool isInsideBoundaries)
 202    {
 15203        isInsideBoundariesError = !isInsideBoundaries;
 15204        CheckErrors();
 15205    }
 206
 207    #endregion
 208
 209    public void Select()
 210    {
 26211        isSelected = true;
 26212        originalParent = rootEntity.gameObject.transform.parent;
 26213        SetEditMaterial();
 26214        lastPositionReported = rootEntity.gameObject.transform.position;
 26215        lastScaleReported = rootEntity.gameObject.transform.lossyScale;
 26216        lastRotationReported = rootEntity.gameObject.transform.rotation;
 26217    }
 218
 219    public void Deselect()
 220    {
 25221        if (!isSelected)
 12222            return;
 223
 13224        isNew = false;
 13225        isSelected = false;
 13226        if (rootEntity.gameObject != null)
 13227            rootEntity.gameObject.transform.SetParent(originalParent);
 228
 13229        SetOriginalMaterials();
 13230    }
 231
 232    public void ToggleShowStatus()
 233    {
 3234        rootEntity.gameObject.SetActive(!rootEntity.gameObject.activeSelf);
 3235        isVisible = rootEntity.gameObject.activeSelf;
 3236        OnStatusUpdate?.Invoke(this);
 0237    }
 238
 6239    public void ToggleLockStatus() { isLocked = !isLocked; }
 240
 1241    public void ShapeLoadFinish(ISharedComponent component) { OnShapeFinishLoading?.Invoke(this); }
 242
 243    public void Delete()
 244    {
 13245        Deselect();
 13246        Dispose();
 13247        isDeleted = true;
 13248        OnDelete?.Invoke(this);
 1249    }
 250
 251    public void Dispose()
 252    {
 13253        if (rootEntity != null)
 254        {
 13255            rootEntity.OnShapeUpdated -= OnShapeUpdate;
 13256            rootEntity.OnNameChange -= OnNameUpdate;
 257
 13258            if (isNFT)
 259            {
 0260                foreach (KeyValuePair<Type, ISharedComponent> kvp in rootEntity.sharedComponents)
 261                {
 0262                    if (kvp.Value.GetClassId() == (int) CLASS_ID.NFT_SHAPE)
 263                    {
 0264                        BIWNFTController.i.StopUsingNFT(((NFTShape.Model) kvp.Value.GetModel()).assetId);
 0265                        break;
 266                    }
 267                }
 268            }
 269
 13270            DCL.Environment.i.world.sceneBoundsChecker?.EvaluateEntityPosition(rootEntity);
 13271            DCL.Environment.i.world.sceneBoundsChecker?.RemoveEntityToBeChecked(rootEntity);
 272        }
 273
 13274        DestroyColliders();
 275
 13276        associatedCatalogItem = null;
 13277    }
 278
 279    public void DestroyColliders()
 280    {
 164281        foreach (List<GameObject> entityColliderGameObject in collidersGameObjectDictionary.Values)
 282        {
 20283            for (int i = entityColliderGameObject.Count - 1; i > 0; i--)
 284            {
 0285                GameObject.Destroy(entityColliderGameObject[i]);
 286            }
 287        }
 288
 72289        collidersGameObjectDictionary.Clear();
 72290    }
 291
 292    #region Components
 293
 294    #region Transfrom
 295
 0296    public void AddRotation(Vector3 newRotation) { currentRotation += newRotation; }
 297
 0298    public void SetRotation(Vector3 newRotation) { currentRotation = newRotation; }
 299
 0300    public Vector3 GetEulerRotation() { return currentRotation; }
 301
 302    public void InitRotation()
 303    {
 304        //TODO : We need to implement the initial rotation from the transform component instead of getting the current r
 105305        if (rootEntity.gameObject != null)
 104306            currentRotation = rootEntity.gameObject.transform.eulerAngles;
 105307    }
 308
 309    #endregion
 310
 311    #region SmartItem
 312
 313    public bool HasSmartItemComponent()
 314    {
 16315        if (rootEntity == null)
 1316            return false;
 317
 15318        return rootEntity.components.ContainsKey(CLASS_ID_COMPONENT.SMART_ITEM);
 319    }
 320
 0321    public bool HasSmartItemActions() { return GetCatalogItemAssociated().HasActions(); }
 322
 0323    public SmartItemParameter[] GetSmartItemParameters() { return GetCatalogItemAssociated().parameters; }
 324
 0325    public SmartItemAction[] GetSmartItemActions() { return GetCatalogItemAssociated().actions; }
 326
 327    #endregion
 328
 329    #region Locked
 330
 331    public bool GetIsLockedValue()
 332    {
 148333        foreach (KeyValuePair<Type, ISharedComponent> kvp in rootEntity.sharedComponents)
 334        {
 40335            if (kvp.Value.GetClassId() == (int) CLASS_ID.LOCKED_ON_EDIT)
 336            {
 18337                return ((DCLLockedOnEdit.Model) kvp.Value.GetModel()).isLocked;
 338            }
 339        }
 340
 25341        return isFloor;
 18342    }
 343
 344    public void SetIsLockedValue(bool isLocked)
 345    {
 40346        bool foundComponent = false;
 347
 98348        foreach (KeyValuePair<Type, ISharedComponent> kvp in rootEntity.sharedComponents)
 349        {
 9350            if (kvp.Value.GetClassId() == (int) CLASS_ID.LOCKED_ON_EDIT)
 351            {
 5352                ((DCLLockedOnEdit) kvp.Value).SetIsLocked(isLocked);
 5353                foundComponent = true;
 354            }
 355        }
 356
 40357        if (!foundComponent)
 358        {
 35359            DCLLockedOnEdit.Model model = new DCLLockedOnEdit.Model();
 35360            model.isLocked = isLocked;
 361
 35362            EntityComponentsUtils.AddLockedOnEditComponent(rootEntity.scene , rootEntity, model, Guid.NewGuid().ToString
 363        }
 40364    }
 365
 366    #endregion
 367
 368    #region DescriptiveName
 369
 370    public void SetDescriptiveName(string newName)
 371    {
 19372        if (rootEntity.TryGetSharedComponent(CLASS_ID.NAME, out ISharedComponent nameComponent))
 373        {
 0374            ((DCLName) nameComponent).SetNewName(newName);
 0375        }
 376        else
 377        {
 19378            DCLName.Model model = new DCLName.Model();
 19379            model.value = newName;
 19380            EntityComponentsUtils.AddNameComponent(rootEntity.scene , rootEntity,model, Guid.NewGuid().ToString());
 381        }
 382
 19383        OnStatusUpdate?.Invoke(this);
 0384    }
 385
 386    public string GetDescriptiveName()
 387    {
 117388        if (rootEntity != null && rootEntity.TryGetSharedComponent(CLASS_ID.NAME, out ISharedComponent nameComponent))
 389        {
 7390            return ((DCLName.Model) nameComponent.GetModel()).value;
 391        }
 392
 110393        return "";
 394    }
 395
 396    #endregion
 397
 398    #endregion
 399
 400    public void ResetTransfrom()
 401    {
 0402        currentRotation = Vector3.zero;
 0403        rootEntity.gameObject.transform.eulerAngles = currentRotation;
 0404        rootEntity.gameObject.transform.localScale = Vector3.one;
 0405        OnStatusUpdate?.Invoke(this);
 0406    }
 407
 408    void ShapeInit()
 409    {
 14410        isShapeComponentSet = true;
 411
 14412        isFloor = IsEntityAFloor();
 14413        isNFT = IsEntityNFT();
 414
 14415        CreateCollidersForEntity(rootEntity);
 416
 14417        if (isFloor)
 1418            isLocked = true;
 419
 14420        if (IsEntityAVoxel())
 0421            SetEntityAsVoxel();
 422
 14423        HandleAnimation();
 424
 14425        if (isNFT)
 426        {
 6427            foreach (KeyValuePair<Type, ISharedComponent> keyValuePairBaseDisposable in rootEntity.sharedComponents)
 428            {
 2429                if (keyValuePairBaseDisposable.Value.GetClassId() == (int) CLASS_ID.NFT_SHAPE)
 430                {
 2431                    BIWNFTController.i.UseNFT(((NFTShape.Model) keyValuePairBaseDisposable.Value.GetModel()).assetId);
 2432                    break;
 433                }
 434            }
 435        }
 436
 14437        SaveOriginalMaterial();
 438
 14439        DCL.Environment.i.world.sceneBoundsChecker.AddPersistent(rootEntity);
 14440        SetEntityBoundariesError(DCL.Environment.i.world.sceneBoundsChecker.IsEntityInsideSceneBoundaries(rootEntity));
 14441    }
 442
 443    private void HandleAnimation()
 444    {
 445        // We don't want animation to be running on editor
 14446        meshAnimations = rootEntity.gameObject.GetComponentsInChildren<Animation>();
 14447        if (HasSmartItemComponent())
 448        {
 0449            DefaultAnimationStop();
 0450        }
 451        else
 452        {
 14453            DefaultAnimationSample(0);
 454        }
 14455    }
 456
 457    private void DefaultAnimationStop()
 458    {
 0459        if (meshAnimations == null)
 0460            return;
 461
 0462        for (int i = 0; i < meshAnimations.Length; i++)
 463        {
 0464            meshAnimations[i].Stop();
 465        }
 0466    }
 467
 468    private void DefaultAnimationSample(float time)
 469    {
 14470        if (meshAnimations == null || meshAnimations.Length == 0)
 14471            return;
 472
 0473        for (int i = 0; i < meshAnimations.Length; i++)
 474        {
 0475            meshAnimations[i].Stop();
 0476            meshAnimations[i].clip?.SampleAnimation(meshAnimations[i].gameObject, time);
 477        }
 0478    }
 479
 480    void SetOriginalMaterials()
 481    {
 13482        if (rootEntity.meshesInfo.renderers == null)
 12483            return;
 1484        if (isNFT)
 0485            return;
 486
 1487        int matCont = 0;
 2488        foreach (Renderer renderer in rootEntity.meshesInfo.renderers)
 489        {
 0490            if (renderer == null)
 491                continue;
 0492            Material[] materials = new Material[renderer.sharedMaterials.Length];
 493
 0494            for (int i = 0; i < renderer.sharedMaterials.Length; i++)
 495            {
 0496                if (isNFT && matCont == 0)
 497                {
 0498                    materials[i] = renderer.sharedMaterials[i];
 0499                    matCont++;
 0500                    continue;
 501                }
 502
 0503                materials[i] = originalMaterials[matCont];
 0504                matCont++;
 505            }
 506
 0507            renderer.sharedMaterials = materials;
 508        }
 1509    }
 510
 511    void SetEntityAsVoxel()
 512    {
 0513        isVoxel = true;
 0514        rootEntity.gameObject.tag = BIWSettings.VOXEL_TAG;
 0515    }
 516
 517    void SaveOriginalMaterial()
 518    {
 14519        if (rootEntity.meshesInfo == null ||
 520            rootEntity.meshesInfo.renderers == null ||
 521            rootEntity.meshesInfo.renderers.Length == 0)
 1522            return;
 523
 13524        if (isNFT)
 2525            return;
 526
 11527        int totalMaterials = 0;
 44528        foreach (Renderer renderer in rootEntity.meshesInfo.renderers)
 529        {
 11530            if (renderer == null)
 531                continue;
 11532            totalMaterials += renderer.sharedMaterials.Length;
 533        }
 534
 11535        if (!isNFT || (isNFT && originalMaterials == null))
 11536            originalMaterials = new Material[totalMaterials];
 537
 11538        int matCont = 0;
 44539        foreach (Renderer renderer in rootEntity.meshesInfo.renderers)
 540        {
 11541            if (renderer == null)
 542                continue;
 543
 44544            for (int i = 0; i < renderer.sharedMaterials.Length; i++)
 545            {
 11546                if (isNFT && matCont == 0)
 547                {
 0548                    matCont++;
 0549                    continue;
 550                }
 551
 11552                originalMaterials[matCont] = renderer.sharedMaterials[i];
 11553                matCont++;
 554            }
 555        }
 11556    }
 557
 558    void SetEditMaterial()
 559    {
 26560        if (rootEntity.meshesInfo == null ||
 561            rootEntity.meshesInfo.renderers == null ||
 562            rootEntity.meshesInfo.renderers.Length < 1)
 26563            return;
 564
 0565        if (isNFT)
 0566            return;
 567
 0568        int matCont = 0;
 0569        foreach (Renderer renderer in rootEntity.meshesInfo.renderers)
 570        {
 0571            if (renderer == null)
 572                continue;
 573
 0574            Material[] materials = new Material[renderer.sharedMaterials.Length];
 575
 0576            for (int i = 0; i < renderer.sharedMaterials.Length; i++)
 577            {
 0578                if (isNFT && matCont == 0)
 579                {
 0580                    materials[i] = renderer.sharedMaterials[i];
 0581                    matCont++;
 0582                    continue;
 583                }
 584
 0585                materials[i] = editMaterial;
 0586                matCont++;
 587            }
 588
 0589            renderer.sharedMaterials = materials;
 590        }
 0591    }
 592
 1593    void OnNameUpdate(object model) { OnStatusUpdate?.Invoke(this); }
 594
 595    void OnShapeUpdate(IDCLEntity entity)
 596    {
 7597        ShapeInit();
 598
 7599        if (isSelected)
 0600            SetEditMaterial();
 7601    }
 602
 603    void CreateCollidersForEntity(IDCLEntity entity)
 604    {
 14605        MeshesInfo meshInfo = entity.meshesInfo;
 14606        if (meshInfo == null ||
 607            meshInfo.currentShape == null ||
 608            !meshInfo.currentShape.IsVisible())
 0609            return;
 610
 14611        if (collidersGameObjectDictionary.ContainsKey(entity.scene.sceneData.id + entity.entityId) && !isNFT)
 0612            return;
 613
 14614        if (entity.children.Count > 0)
 615        {
 0616            using (var iterator = entity.children.GetEnumerator())
 617            {
 0618                while (iterator.MoveNext())
 619                {
 0620                    CreateCollidersForEntity(iterator.Current.Value);
 621                }
 0622            }
 623        }
 624
 625        //Note: When we are duplicating the GLTF and NFT component, their colliders are duplicated too
 626        //So we eliminate any previous collider to ensure that only 1 collider remain active
 14627        Transform[] children = rootEntity.gameObject.transform.GetComponentsInChildren<Transform>();
 160628        foreach (Transform child in children)
 629        {
 66630            if (child.gameObject.layer ==  BIWSettings.COLLIDER_SELECTION_LAYER)
 631            {
 0632                GameObject.Destroy(child.gameObject);
 633            }
 634        }
 635
 14636        List<GameObject> colliderList = new List<GameObject>();
 637
 66638        for (int i = 0; i < meshInfo.renderers.Length; i++)
 639        {
 19640            if (meshInfo.renderers[i] == null)
 641                continue;
 19642            GameObject entityColliderChildren = new GameObject(entity.entityId);
 19643            entityColliderChildren.layer = BIWSettings.COLLIDER_SELECTION_LAYER_INDEX;
 644
 19645            Transform t = entityColliderChildren.transform;
 19646            t.SetParent(meshInfo.renderers[i].transform);
 19647            t.ResetLocalTRS();
 648
 19649            var meshCollider = entityColliderChildren.AddComponent<MeshCollider>();
 650
 19651            if (meshInfo.renderers[i] is SkinnedMeshRenderer skr)
 652            {
 0653                Mesh meshColliderForSkinnedMesh = new Mesh();
 0654                skr.BakeMesh(meshColliderForSkinnedMesh);
 0655                meshCollider.sharedMesh = meshColliderForSkinnedMesh;
 0656                t.localScale = new Vector3(1 / meshInfo.renderers[i].gameObject.transform.lossyScale.x, 1 / meshInfo.ren
 0657            }
 658            else
 659            {
 19660                meshCollider.sharedMesh = meshInfo.renderers[i].GetComponent<MeshFilter>().sharedMesh;
 661            }
 662
 19663            meshCollider.enabled = true;
 19664            colliderList.Add(entityColliderChildren);
 665
 19666            if (isNFT)
 667            {
 8668                if (collidersGameObjectDictionary.ContainsKey(entity.scene.sceneData.id + entity.entityId))
 6669                    collidersGameObjectDictionary.Remove(entity.scene.sceneData.id + entity.entityId);
 670
 8671                collidersGameObjectDictionary.Add(entity.scene.sceneData.id + entity.entityId, colliderList);
 672
 8673                colliderList = new List<GameObject>();
 674            }
 675        }
 676
 14677        if (!isNFT)
 12678            collidersGameObjectDictionary.Add(entity.scene.sceneData.id + entity.entityId, colliderList);
 14679    }
 680
 681    public bool IsEntityNFT()
 682    {
 61683        foreach (KeyValuePair<Type, ISharedComponent> keyValuePairBaseDisposable in rootEntity.sharedComponents)
 684        {
 17685            if (keyValuePairBaseDisposable.Value.GetClassId() == (int) CLASS_ID.NFT_SHAPE)
 3686                return true;
 687        }
 688
 12689        return false;
 3690    }
 691
 14692    bool IsEntityAFloor() { return GetCatalogItemAssociated()?.category == BIWSettings.FLOOR_CATEGORY; }
 693
 694    bool IsEntityAVoxel()
 695    {
 14696        if (rootEntity.meshesInfo?.currentShape == null)
 0697            return false;
 14698        if (rootEntity.meshesInfo.renderers?.Length <= 0)
 1699            return false;
 13700        if (rootEntity.meshesInfo.mergedBounds.size != Vector3.one)
 13701            return false;
 0702        return true;
 703    }
 704}

Methods/Properties

gameObject()
transform()
rootEntity(DCL.Models.IDCLEntity)
rootEntity()
isDeleted()
isDeleted(System.Boolean)
isLocked()
isLocked(System.Boolean)
isSelected()
isSelected(System.Boolean)
isNew()
isNew(System.Boolean)
BIWEntity()
isVisible()
isVisible(System.Boolean)
isVoxel()
isVoxel(System.Boolean)
isFloor()
isFloor(System.Boolean)
isNFT()
isNFT(System.Boolean)
hasError()
hasError(System.Boolean)
hasMissingCatalogItemError()
hasMissingCatalogItemError(System.Boolean)
isInsideBoundariesError()
isInsideBoundariesError(System.Boolean)
Initialize(DCL.Models.IDCLEntity, UnityEngine.Material)
GetCatalogItemAssociated()
HasShape()
HasMovedSinceLastReport()
HasScaledSinceLastReport()
HasRotatedSinceLastReport()
PositionReported()
ScaleReported()
RotationReported()
CheckErrors()
SetEntityBoundariesError(System.Boolean)
Select()
Deselect()
ToggleShowStatus()
ToggleLockStatus()
ShapeLoadFinish(DCL.Components.ISharedComponent)
Delete()
Dispose()
DestroyColliders()
AddRotation(UnityEngine.Vector3)
SetRotation(UnityEngine.Vector3)
GetEulerRotation()
InitRotation()
HasSmartItemComponent()
HasSmartItemActions()
GetSmartItemParameters()
GetSmartItemActions()
GetIsLockedValue()
SetIsLockedValue(System.Boolean)
SetDescriptiveName(System.String)
GetDescriptiveName()
ResetTransfrom()
ShapeInit()
HandleAnimation()
DefaultAnimationStop()
DefaultAnimationSample(System.Single)
SetOriginalMaterials()
SetEntityAsVoxel()
SaveOriginalMaterial()
SetEditMaterial()
OnNameUpdate(System.Object)
OnShapeUpdate(DCL.Models.IDCLEntity)
CreateCollidersForEntity(DCL.Models.IDCLEntity)
IsEntityNFT()
IsEntityAFloor()
IsEntityAVoxel()