< Summary

Class:DCL.Components.AvatarOutlineOnHoverEvent
Assembly:AvatarShape
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Components/Avatar/AvatarOnPointerDown/AvatarOutlineOnHoverEvent.cs
Covered lines:8
Uncovered lines:25
Coverable lines:33
Total lines:96
Line coverage:24.2% (8 of 33)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
Initialize(...)0%110100%
AllUIHiddenChanged(...)0%6200%
ResetAvatarOutlined()0%2100%
SetAvatarOutlined()0%20400%
OnDestroy()0%110100%
GetTransform()0%2100%
SetHoverState(...)0%30500%
IsAtHoverDistance(...)0%6200%
IsVisible()0%2100%
OnPoolRelease()0%2100%
OnPoolGet()0%2100%

File(s)

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

#LineLine coverage
 1using AvatarSystem;
 2using DCL.Helpers;
 3using DCL.Models;
 4using DCLPlugins.UUIDEventComponentsPlugin.UUIDComponent.Interfaces;
 5using UnityEngine;
 6
 7namespace DCL.Components
 8{
 9    /// <summary>
 10    /// Complementary class to detect avatar outlining only,
 11    /// It does not live on its own and should coexist with `AvatarOnPointerDown`
 12    /// </summary>
 13    public class AvatarOutlineOnHoverEvent : MonoBehaviour, IUnlockedCursorInputEvent, IPoolLifecycleHandler
 14    {
 15        private IAvatar avatar;
 16
 17        private bool isHovered;
 18
 19        public event System.Action OnPointerEnterReport;
 20        public event System.Action OnPointerExitReport;
 21        private OnPointerEvent.Model model;
 22
 23        public void Initialize(OnPointerEvent.Model model, IDCLEntity entity, IAvatar avatar)
 24        {
 425            this.entity = entity;
 426            this.avatar = avatar;
 427            this.model = model;
 28
 429            CommonScriptableObjects.allUIHidden.OnChange += AllUIHiddenChanged;
 430        }
 31
 32        private void AllUIHiddenChanged(bool isAllUIHidden, bool _)
 33        {
 034            if (isAllUIHidden)
 035                ResetAvatarOutlined();
 036        }
 37
 38        private void ResetAvatarOutlined()
 39        {
 040            DataStore.i.outliner.avatarOutlined.Set((null, -1, -1));
 041        }
 42
 43        private void SetAvatarOutlined()
 44        {
 045            if (avatar.status == IAvatar.Status.Loaded)
 46            {
 047                var renderer = avatar.GetMainRenderer();
 48
 049                if (renderer != null && !CommonScriptableObjects.allUIHidden.Get())
 050                    DataStore.i.outliner.avatarOutlined.Set((renderer, renderer.GetComponent<MeshFilter>().sharedMesh.su
 51            }
 052        }
 53
 54        private void OnDestroy()
 55        {
 33356            CommonScriptableObjects.allUIHidden.OnChange -= AllUIHiddenChanged;
 33357        }
 58
 59        public Transform GetTransform() =>
 060            transform;
 61
 462        public IDCLEntity entity { get; private set; }
 63
 64        public void SetHoverState(bool state)
 65        {
 066            if (isHovered == state)
 067                return;
 68
 069            isHovered = state;
 70
 071            if (isHovered)
 72            {
 073                SetAvatarOutlined();
 074                OnPointerEnterReport?.Invoke();
 75            }
 76            else
 77            {
 078                ResetAvatarOutlined();
 079                OnPointerExitReport?.Invoke();
 80            }
 081        }
 82
 83        public bool IsAtHoverDistance(float distance) =>
 084            !Utils.IsCursorLocked || distance <= model.distance;
 85
 86        public bool IsVisible() =>
 087            true;
 88
 89        public void OnPoolRelease()
 90        {
 091            avatar = null;
 092        }
 93
 094        public void OnPoolGet() { }
 95    }
 96}