< Summary

Class:PlayerAvatarController
Assembly:PlayerAvatarController
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/PlayerAvatarController/PlayerAvatarController.cs
Covered lines:29
Uncovered lines:32
Coverable lines:61
Total lines:149
Line coverage:47.5% (29 of 61)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
PlayerAvatarController()0%110100%
Start()0%2.012084.62%
OnAvatarRendererReady()0%12300%
OnAvatarRendererFail(...)0%2.262060%
OnBaseWereablesFail()0%12300%
ShowWearablesWarning()0%2100%
Update()0%16.765022.22%
SetAvatarVisibility(...)0%110100%
OnEnable()0%110100%
OnAvatarExpression(...)0%110100%
OnUserProfileOnUpdate(...)0%110100%
OnDisable()0%110100%

File(s)

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

#LineLine coverage
 1using System;
 2using DCL;
 3using DCL.Interface;
 4using DCL.FatalErrorReporter;
 5using DCL.NotificationModel;
 6using UnityEngine;
 7using Type = DCL.NotificationModel.Type;
 8
 9public class PlayerAvatarController : MonoBehaviour
 10{
 11    private const string LOADING_WEARABLES_ERROR_MESSAGE = "There was a problem loading your wearables";
 12
 13    public AvatarRenderer avatarRenderer;
 14    public Collider avatarCollider;
 15    public AvatarVisibility avatarVisibility;
 61316    public float cameraDistanceToDeactivate = 1.0f;
 17
 234418    private UserProfile userProfile => UserProfile.GetOwnUserProfile();
 019    private bool repositioningWorld => DCLCharacterController.i.characterPosition.RepositionedWorldLastFrame();
 20
 21    private bool enableCameraCheck = false;
 22    private Camera mainCamera;
 23    private bool avatarWereablesErrors = false;
 24    private bool baseWereablesErrors = false;
 25    private PlayerAvatarAnalytics playerAvatarAnalytics;
 26    private IFatalErrorReporter fatalErrorReporter;
 27
 28    private void Start()
 29    {
 58530        DataStore.i.common.isPlayerRendererLoaded.Set(false);
 58531        playerAvatarAnalytics = new PlayerAvatarAnalytics(Analytics.i, CommonScriptableObjects.playerCoords);
 32
 33        //NOTE(Brian): We must wait for loading to finish before deactivating the renderer, or the GLTF Loader won't fin
 58534        avatarRenderer.OnSuccessEvent -= OnAvatarRendererReady;
 58535        avatarRenderer.OnFailEvent -= OnAvatarRendererFail;
 58536        avatarRenderer.OnSuccessEvent += OnAvatarRendererReady;
 58537        avatarRenderer.OnFailEvent += OnAvatarRendererFail;
 38
 58539        if ( UserProfileController.i != null )
 40        {
 041            UserProfileController.i.OnBaseWereablesFail -= OnBaseWereablesFail;
 042            UserProfileController.i.OnBaseWereablesFail += OnBaseWereablesFail;
 43        }
 44
 58545        CommonScriptableObjects.rendererState.AddLock(this);
 46
 47#if UNITY_WEBGL
 48        fatalErrorReporter = new WebFatalErrorReporter();
 49#else
 58550        fatalErrorReporter = new DefaultFatalErrorReporter(DataStore.i);
 51#endif
 52
 58553        mainCamera = Camera.main;
 58554    }
 55
 56    private void OnAvatarRendererReady()
 57    {
 058        enableCameraCheck = true;
 059        avatarCollider.gameObject.SetActive(true);
 060        CommonScriptableObjects.rendererState.RemoveLock(this);
 061        avatarRenderer.OnSuccessEvent -= OnAvatarRendererReady;
 062        avatarRenderer.OnFailEvent -= OnAvatarRendererFail;
 063        DataStore.i.common.isPlayerRendererLoaded.Set(true);
 64
 065        IAvatarAnchorPoints anchorPoints = new AvatarAnchorPoints();
 066        anchorPoints.Prepare(avatarRenderer.transform, avatarRenderer.GetBones(), avatarRenderer.maxY);
 67
 068        var player = new Player()
 69        {
 70            id = userProfile.userId,
 71            name = userProfile.name,
 72            renderer = avatarRenderer,
 73            anchorPoints = anchorPoints
 74        };
 075        DataStore.i.player.ownPlayer.Set(player);
 76
 077        if (avatarWereablesErrors || baseWereablesErrors)
 078            ShowWearablesWarning();
 079    }
 80
 81    private void OnAvatarRendererFail(Exception exception)
 82    {
 2083        avatarWereablesErrors = true;
 84
 2085        if (exception is AvatarLoadFatalException)
 2086            fatalErrorReporter.Report(exception);
 87        else
 088            OnAvatarRendererReady();
 089    }
 90
 91    private void OnBaseWereablesFail()
 92    {
 093        UserProfileController.i.OnBaseWereablesFail -= OnBaseWereablesFail;
 094        baseWereablesErrors = true;
 95
 096        if (enableCameraCheck && !avatarWereablesErrors)
 097            ShowWearablesWarning();
 098    }
 99
 100    private void ShowWearablesWarning()
 101    {
 0102        NotificationsController.i.ShowNotification(new Model
 103        {
 104            message = LOADING_WEARABLES_ERROR_MESSAGE,
 105            type = Type.GENERIC,
 106            timer = 10f,
 107            destroyOnFinish = true
 108        });
 0109    }
 110
 111    private void Update()
 112    {
 8674113        if (!enableCameraCheck || repositioningWorld)
 8674114            return;
 115
 0116        if (mainCamera == null)
 117        {
 0118            mainCamera = Camera.main;
 119
 0120            if (mainCamera == null)
 0121                return;
 122        }
 123
 0124        bool shouldBeVisible = Vector3.Distance(mainCamera.transform.position, transform.position) > cameraDistanceToDea
 0125        avatarVisibility.SetVisibility("PLAYER_AVATAR_CONTROLLER", shouldBeVisible);
 0126    }
 127
 86128    public void SetAvatarVisibility(bool isVisible) { avatarRenderer.SetGOVisibility(isVisible); }
 129
 130    private void OnEnable()
 131    {
 586132        userProfile.OnUpdate += OnUserProfileOnUpdate;
 586133        userProfile.OnAvatarExpressionSet += OnAvatarExpression;
 586134    }
 135
 136    private void OnAvatarExpression(string id, long timestamp)
 137    {
 2138        avatarRenderer.SetExpression(id, timestamp);
 2139        playerAvatarAnalytics.ReportExpression(id);
 2140    }
 141
 42142    private void OnUserProfileOnUpdate(UserProfile profile) { avatarRenderer.ApplyModel(profile.avatar, null, null); }
 143
 144    private void OnDisable()
 145    {
 586146        userProfile.OnUpdate -= OnUserProfileOnUpdate;
 586147        userProfile.OnAvatarExpressionSet -= OnAvatarExpression;
 586148    }
 149}