< Summary

Class:ECSSystems.AvatarModifierAreaSystem.ECSAvatarModifierAreaSystem
Assembly:ECS7Plugin.Systems.AvatarModifierArea
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/DCLPlugins/ECS7/Systems/AvatarModifierAreaSystem/ECSAvatarModifierAreaSystem.cs
Covered lines:37
Uncovered lines:6
Coverable lines:43
Total lines:107
Line coverage:86% (37 of 43)
Covered branches:0
Total branches:0
Covered methods:4
Total methods:4
Method coverage:100% (4 of 4)

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
ECSAvatarModifierAreaSystem(...)0%110100%
Update()0%16.6116086.67%
AreSetsEqual(...)0%6.846071.43%
UpdateExcludedCollidersCollection(...)0%7.237083.33%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/DCLPlugins/ECS7/Systems/AvatarModifierAreaSystem/ECSAvatarModifierAreaSystem.cs

#LineLine coverage
 1using DCL;
 2using DCL.ECS7.InternalComponents;
 3using DCL.ECSComponents.Utils;
 4using System.Collections.Generic;
 5using System.Linq;
 6using UnityEngine;
 7
 8namespace ECSSystems.AvatarModifierAreaSystem
 9{
 10    public class ECSAvatarModifierAreaSystem
 11    {
 12        private IInternalECSComponent<InternalAvatarModifierArea> internalAvatarModifierArea;
 13        private readonly DataStore_Player dataStore;
 414        private readonly HashSet<Collider> excludedColliders = new HashSet<Collider>();
 15
 416        public ECSAvatarModifierAreaSystem(
 17            IInternalECSComponent<InternalAvatarModifierArea> internalAvatarModifierArea,
 18            DataStore_Player dataStore)
 19        {
 420            this.internalAvatarModifierArea = internalAvatarModifierArea;
 421            this.dataStore = dataStore;
 422        }
 23
 24        public void Update()
 25        {
 826            var componentGroup = internalAvatarModifierArea.GetForAll();
 27
 828            int entitiesCount = componentGroup.Count;
 3229            for (int i = 0; i < entitiesCount; i++)
 30            {
 831                var scene = componentGroup[i].key1;
 832                var entityId = componentGroup[i].key2;
 833                var model = componentGroup[i].value.model;
 834                Transform entityTransform = scene.entities[entityId].gameObject.transform;
 35
 836                UpdateExcludedCollidersCollection(model.excludedIds);
 37
 838                HashSet<GameObject> currentAvatarsInArea = ECSAvatarUtils.DetectAvatars(model.area, entityTransform.posi
 39                    entityTransform.rotation, excludedColliders);
 40
 841                if (model.removed)
 42                {
 043                    foreach (GameObject avatarGO in currentAvatarsInArea)
 44                    {
 045                        model.OnAvatarExit?.Invoke(avatarGO);
 46                    }
 47
 48                    continue;
 49                }
 50
 851                if (AreSetsEqual(model.avatarsInArea, currentAvatarsInArea))
 52                    continue;
 53
 54                // Apply modifier for avatars that just entered the area
 655                if (currentAvatarsInArea.Count > 0)
 56                {
 1857                    foreach (GameObject avatarThatEntered in currentAvatarsInArea.Except(model.avatarsInArea))
 58                    {
 559                        model.OnAvatarEnter?.Invoke(avatarThatEntered);
 60                    }
 61                }
 62
 63                // Reset modifier for avatars that just exited the area
 664                if (model.avatarsInArea?.Count > 0)
 65                {
 866                    foreach (GameObject avatarThatExited in model.avatarsInArea.Except(currentAvatarsInArea))
 67                    {
 268                        model.OnAvatarExit?.Invoke(avatarThatExited);
 69                    }
 70                }
 71
 672                model.avatarsInArea = currentAvatarsInArea;
 673                internalAvatarModifierArea.PutFor(scene, entityId, model);
 74            }
 875        }
 76
 77        private bool AreSetsEqual(HashSet<GameObject> set1, HashSet<GameObject> set2)
 78        {
 879            if (set1 == null && set2 == null)
 080                return true;
 81
 882            if (set1 == null || set2 == null)
 083                return false;
 84
 885            if (set1.Count != set2.Count)
 686                return false;
 87
 288            return set1.SetEquals(set2);
 89        }
 90
 91        private void UpdateExcludedCollidersCollection(HashSet<string> excludedIds)
 92        {
 893            excludedColliders.Clear();
 94
 1595            if (excludedIds == null || excludedIds.Count == 0) return;
 96
 197            var ownPlayer = dataStore.ownPlayer.Get();
 498            foreach (string excludedId in excludedIds)
 99            {
 1100                if (dataStore.otherPlayers.TryGetValue(excludedId, out Player player))
 1101                    excludedColliders.Add(player.collider);
 0102                else if (ownPlayer != null && excludedId == ownPlayer.id)
 0103                    excludedColliders.Add(ownPlayer.collider);
 104            }
 1105        }
 106    }
 107}