< Summary

Class:DCL.AvatarShape
Assembly:AvatarShape
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Components/Avatar/AvatarShape.cs
Covered lines:40
Uncovered lines:46
Coverable lines:86
Total lines:197
Line coverage:46.5% (40 of 86)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
AvatarShape()0%110100%
Awake()0%110100%
PlayerClicked()0%6200%
OnDestroy()0%330100%
ApplyChanges()0%51.499019.35%
DisablePassport()0%2.062075%
EnablePassport()0%6200%
OnWorldReposition(...)0%6200%
OnEntityTransformChanged(...)0%6200%
OnPoolGet()0%110100%
Cleanup()0%550100%
GetClassId()0%2100%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Components/Avatar/AvatarShape.cs

#LineLine coverage
 1using System;
 2using DCL.Components;
 3using DCL.Interface;
 4using System.Collections;
 5using System.Collections.Generic;
 6using System.Linq;
 7using DCL.Helpers;
 8using DCL.Models;
 9using UnityEngine;
 10
 11namespace DCL
 12{
 13    public class AvatarShape : BaseComponent
 14    {
 15        private const string CURRENT_PLAYER_ID = "CurrentPlayerInfoCardId";
 16
 17        public static event Action<IDCLEntity, AvatarShape> OnAvatarShapeUpdated;
 18
 19        public AvatarName avatarName;
 20        public AvatarRenderer avatarRenderer;
 21        public Collider avatarCollider;
 22        public AvatarMovementController avatarMovementController;
 23
 24        [SerializeField]
 25        private AvatarOnPointerDown onPointerDown;
 26
 27        private StringVariable currentPlayerInfoCardId;
 28
 52129        private AvatarModel oldModel = new AvatarModel();
 30
 31        public bool everythingIsLoaded;
 32
 33        private Vector3? lastAvatarPosition = null;
 52134        private MinimapMetadata.MinimapUserInfo avatarUserInfo = new MinimapMetadata.MinimapUserInfo();
 35        bool initializedPosition = false;
 36
 37        private void Awake()
 38        {
 139            model = new AvatarModel();
 140            currentPlayerInfoCardId = Resources.Load<StringVariable>(CURRENT_PLAYER_ID);
 141        }
 42
 43        private void PlayerClicked()
 44        {
 045            if (model == null)
 046                return;
 047            currentPlayerInfoCardId.Set(((AvatarModel) model).id);
 048        }
 49
 50        public void OnDestroy()
 51        {
 152            Cleanup();
 53
 154            if (poolableObject != null && poolableObject.isInsidePool)
 155                poolableObject.RemoveFromPool();
 156        }
 57
 58        public override IEnumerator ApplyChanges(BaseModel newModel)
 59        {
 160            DisablePassport();
 61
 162            var model = (AvatarModel) newModel;
 63
 164            everythingIsLoaded = false;
 65
 166            bool avatarDone = false;
 167            bool avatarFailed = false;
 68
 169            yield return null; //NOTE(Brian): just in case we have a Object.Destroy waiting to be resolved.
 70
 071            avatarRenderer.ApplyModel(model, () => avatarDone = true, () => avatarFailed = true);
 72
 073            yield return new WaitUntil(() => avatarDone || avatarFailed);
 74
 075            onPointerDown.Initialize(
 76                new OnPointerDown.Model()
 77                {
 78                    type = OnPointerDown.NAME,
 79                    button = WebInterface.ACTION_BUTTON.POINTER.ToString(),
 80                    hoverText = "view profile"
 81                },
 82                entity
 83            );
 84
 085            CommonScriptableObjects.worldOffset.OnChange -= OnWorldReposition;
 086            CommonScriptableObjects.worldOffset.OnChange += OnWorldReposition;
 87
 088            entity.OnTransformChange -= avatarMovementController.OnTransformChanged;
 089            entity.OnTransformChange += avatarMovementController.OnTransformChanged;
 90
 091            entity.OnTransformChange -= OnEntityTransformChanged;
 092            entity.OnTransformChange += OnEntityTransformChanged;
 93
 094            onPointerDown.OnPointerDownReport -= PlayerClicked;
 095            onPointerDown.OnPointerDownReport += PlayerClicked;
 96
 97            // To deal with the cases in which the entity transform was configured before the AvatarShape
 098            if (!initializedPosition && entity.components.ContainsKey(DCL.Models.CLASS_ID_COMPONENT.TRANSFORM))
 99            {
 0100                initializedPosition = true;
 101
 0102                avatarMovementController.MoveTo(
 103                    entity.gameObject.transform.localPosition - Vector3.up * DCLCharacterController.i.characterControlle
 104                    entity.gameObject.transform.localRotation, true);
 105            }
 106
 0107            avatarUserInfo.userId = model.id;
 0108            avatarUserInfo.userName = model.name;
 0109            avatarUserInfo.worldPosition = lastAvatarPosition != null ? lastAvatarPosition.Value : entity.gameObject.tra
 0110            MinimapMetadataController.i?.UpdateMinimapUserInformation(avatarUserInfo);
 111
 0112            avatarName.SetName(model.name);
 0113            avatarName.SetTalking(model.talking);
 114
 0115            avatarCollider.gameObject.SetActive(true);
 116
 0117            everythingIsLoaded = true;
 0118            OnAvatarShapeUpdated?.Invoke(entity, this);
 119
 0120            EnablePassport();
 0121        }
 122
 123        public void DisablePassport()
 124        {
 1125            if (onPointerDown.collider == null)
 0126                return;
 127
 1128            onPointerDown.collider.enabled = false;
 1129        }
 130
 131        public void EnablePassport()
 132        {
 0133            if (onPointerDown.collider == null)
 0134                return;
 135
 0136            onPointerDown.collider.enabled = true;
 0137        }
 138
 139        private void OnWorldReposition(Vector3 current, Vector3 previous)
 140        {
 0141            avatarUserInfo.worldPosition = entity.gameObject.transform.position;
 0142            MinimapMetadataController.i?.UpdateMinimapUserInformation(avatarUserInfo);
 0143        }
 144
 145        private void OnEntityTransformChanged(object newModel)
 146        {
 0147            DCLTransform.Model newTransformModel = (DCLTransform.Model)newModel;
 0148            lastAvatarPosition = newTransformModel.position;
 149
 0150            var model = (AvatarModel) this.model;
 0151            avatarUserInfo.userId = model.id;
 0152            avatarUserInfo.userName = model.name;
 0153            avatarUserInfo.worldPosition = newTransformModel.position;
 0154            MinimapMetadataController.i?.UpdateMinimapUserInformation(avatarUserInfo);
 0155        }
 156
 157        public override void OnPoolGet()
 158        {
 1159            base.OnPoolGet();
 160
 1161            everythingIsLoaded = false;
 1162            initializedPosition = false;
 1163            oldModel = new AvatarModel();
 1164            model = new AvatarModel();
 1165            lastAvatarPosition = null;
 1166            avatarName.SetName(String.Empty);
 1167        }
 168
 169        public override void Cleanup()
 170        {
 3171            base.Cleanup();
 172
 3173            avatarRenderer.CleanupAvatar();
 174
 3175            if (poolableObject != null)
 176            {
 3177                poolableObject.OnRelease -= Cleanup;
 178            }
 179
 3180            onPointerDown.OnPointerDownReport -= PlayerClicked;
 3181            CommonScriptableObjects.worldOffset.OnChange -= OnWorldReposition;
 182
 3183            if (entity != null)
 184            {
 1185                entity.OnTransformChange = null;
 1186                entity = null;
 187            }
 188
 3189            var model = (AvatarModel) this.model;
 3190            if (model != null)
 3191                avatarUserInfo.userId = model.id;
 3192            MinimapMetadataController.i?.UpdateMinimapUserInformation(avatarUserInfo, true);
 3193        }
 194
 0195        public override int GetClassId() { return (int) CLASS_ID_COMPONENT.AVATAR_SHAPE; }
 196    }
 197}