< 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:4
Uncovered lines:35
Coverable lines:39
Total lines:107
Line coverage:10.2% (4 of 39)
Covered branches:0
Total branches:0
Covered methods:4
Total methods:16
Method coverage:25% (4 of 16)

Metrics

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

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 System;
 6using UnityEngine;
 7
 8namespace DCL.Components
 9{
 10    /// <summary>
 11    /// Complementary class to detect avatar outlining only,
 12    /// It does not live on its own and should coexist with `AvatarOnPointerDown`
 13    /// </summary>
 14    public class AvatarOutlineOnHoverEvent : MonoBehaviour, IUnlockedCursorInputEvent, IPoolLifecycleHandler
 15    {
 16        private IAvatar avatar;
 17        private OnPointerEvent.Model model;
 18        private bool isHovered;
 19
 65520        public bool ShouldBeHoveredWhenMouseIsLocked { get; set; } = true;
 21
 22        public event Action OnPointerEnterReport;
 23        public event Action OnPointerExitReport;
 24
 25        private bool isInitialized;
 26
 27        public void Initialize(IDCLEntity entity, IAvatar avatar)
 28        {
 029            if (isInitialized) return;
 030            this.entity = entity;
 031            this.avatar = avatar;
 032            model = new OnPointerEvent.Model();
 33
 034            CommonScriptableObjects.allUIHidden.OnChange += AllUIHiddenChanged;
 035            isInitialized = true;
 036        }
 37
 38        private void OnDestroy()
 39        {
 63440            isInitialized = false;
 63441            CommonScriptableObjects.allUIHidden.OnChange -= AllUIHiddenChanged;
 63442        }
 43
 44        public Transform GetTransform() =>
 045            transform;
 46
 047        public IDCLEntity entity { get; private set; }
 48
 49        public void SetHoverState(bool state)
 50        {
 051            if (!enabled) return;
 052            if (isHovered == state) return;
 53
 054            isHovered = state;
 55
 056            if (isHovered)
 57            {
 058                SetAvatarOutlined();
 059                OnPointerEnterReport?.Invoke();
 60            }
 61            else
 62            {
 063                ResetAvatarOutlined();
 064                OnPointerExitReport?.Invoke();
 65            }
 066        }
 67
 68        public bool IsAtHoverDistance(float distance)
 69        {
 070            bool isCursorLocked = Utils.IsCursorLocked;
 071            if (!ShouldBeHoveredWhenMouseIsLocked && isCursorLocked) return false;
 072            return !isCursorLocked || distance <= model.distance;
 73        }
 74
 75        public bool IsVisible() =>
 076            true;
 77
 78        public void OnPoolRelease()
 79        {
 080            avatar = null;
 081        }
 82
 083        public void OnPoolGet() { }
 84
 85        private void AllUIHiddenChanged(bool isAllUIHidden, bool _)
 86        {
 087            if (isAllUIHidden)
 088                ResetAvatarOutlined();
 089        }
 90
 91        private void ResetAvatarOutlined()
 92        {
 093            DataStore.i.outliner.avatarOutlined.Set((null, -1, -1));
 094        }
 95
 96        private void SetAvatarOutlined()
 97        {
 098            if (avatar.status == IAvatar.Status.Loaded)
 99            {
 0100                var renderer = avatar.GetMainRenderer();
 101
 0102                if (renderer != null && !CommonScriptableObjects.allUIHidden.Get())
 0103                    DataStore.i.outliner.avatarOutlined.Set((renderer, renderer.GetComponent<MeshFilter>().sharedMesh.su
 104            }
 0105        }
 106    }
 107}