< Summary

Class:DCL.ECSComponents.CameraModeAreaComponentHandler
Assembly:DCL.ECSComponents.CameraModeArea
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/DCLPlugins/ECS7/ECSComponents/CameraModeArea/Handler/CameraModeAreaComponentHandler.cs
Covered lines:42
Uncovered lines:16
Coverable lines:58
Total lines:136
Line coverage:72.4% (42 of 58)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
CameraModeAreaComponentHandler(...)0%110100%
OnComponentCreated(...)0%330100%
OnComponentRemoved(...)0%110100%
OnComponentModelUpdated(...)0%6.056088.89%
Initialize(...)0%110100%
Update()0%6.25063.64%
Dispose()0%110100%
IsPlayerInsideArea()0%36.697015.38%
OnAreaDisabled()0%220100%
OnOwnPlayerChange(...)0%2100%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/DCLPlugins/ECS7/ECSComponents/CameraModeArea/Handler/CameraModeAreaComponentHandler.cs

#LineLine coverage
 1using DCL.Configuration;
 2using DCL.Controllers;
 3using DCL.ECSRuntime;
 4using DCL.Models;
 5using DCL.Components;
 6using UnityEngine;
 7
 8namespace DCL.ECSComponents
 9{
 10    public class CameraModeAreaComponentHandler : IECSComponentHandler<PBCameraModeArea>
 11    {
 12        private readonly DataStore_Player dataStore;
 13        internal readonly IUpdateEventHandler updateEventHandler;
 14
 15        internal CameraModeRepresentantion cameraModeRepresentantion;
 16        private UnityEngine.Vector3 area;
 17        private IDCLEntity entity;
 18        private IParcelScene scene;
 19        internal PBCameraModeArea lastModel;
 20
 521        internal ICameraModeAreasController areasController = new CameraModeAreasController();
 22        private Collider playerCollider;
 23        internal bool isPlayerInside = false;
 24
 525        public CameraModeAreaComponentHandler(IUpdateEventHandler updateEventHandler, DataStore_Player dataStore)
 26        {
 527            this.updateEventHandler = updateEventHandler;
 528            this.dataStore = dataStore;
 529        }
 30
 31        public void OnComponentCreated(IParcelScene scene, IDCLEntity entity)
 32        {
 533            Initialize(scene, entity, dataStore.ownPlayer.Get()?.collider);
 534            dataStore.ownPlayer.OnChange += OnOwnPlayerChange;
 535        }
 36
 37        public void OnComponentRemoved(IParcelScene scene, IDCLEntity entity)
 38        {
 639            Dispose();
 640            dataStore.ownPlayer.OnChange -= OnOwnPlayerChange;
 641        }
 42
 43        public void OnComponentModelUpdated(IParcelScene scene, IDCLEntity entity, PBCameraModeArea model)
 44        {
 45            // We check if the mode should change, and adjust the area for the new model
 446            bool cameraModeChanged = lastModel != null || model.Mode != lastModel?.Mode;
 47
 448            area = ProtoConvertUtils.PBVectorToUnityVector(model.Area);
 449            lastModel = model;
 50
 51            // If the camera mode hasn't changed we skip the model
 452            if (!cameraModeChanged)
 053                return;
 54
 55            // We set the new mode
 456            cameraModeRepresentantion.SetCameraMode(ProtoConvertUtils.PBCameraEnumToUnityEnum(model.Mode));
 57
 58            // If the mode must change and the player is inside, we change the mode here
 459            if (isPlayerInside)
 260                areasController.ChangeAreaMode(cameraModeRepresentantion);
 461        }
 62
 63        internal void Initialize(in IParcelScene scene, in IDCLEntity entity, in Collider playerCollider)
 64        {
 565            this.playerCollider = playerCollider;
 566            this.scene = scene;
 567            this.entity = entity;
 68
 569            updateEventHandler.AddListener(IUpdateEventHandler.EventType.Update, Update);
 570            cameraModeRepresentantion = new CameraModeRepresentantion();
 571        }
 72
 73        internal void Update()
 74        {
 175            if (lastModel == null)
 076                return;
 77
 178            bool playerInside = IsPlayerInsideArea();
 79
 180            switch (playerInside)
 81            {
 082                case true when !isPlayerInside:
 083                    areasController.AddInsideArea(cameraModeRepresentantion);
 084                    break;
 185                case false when isPlayerInside:
 186                    areasController.RemoveInsideArea(cameraModeRepresentantion);
 87                    break;
 88            }
 89
 190            isPlayerInside = playerInside;
 191        }
 92
 93        internal void Dispose()
 94        {
 695            OnAreaDisabled();
 696            updateEventHandler.RemoveListener(IUpdateEventHandler.EventType.Update, Update);
 697        }
 98
 99        private bool IsPlayerInsideArea()
 100        {
 1101            if (entity == null || scene == null ||
 102                scene.sceneData.sceneNumber != CommonScriptableObjects.sceneNumber.Get())
 1103                return false;
 104
 0105            UnityEngine.Vector3 center = entity.gameObject.transform.position;
 0106            Quaternion rotation = entity.gameObject.transform.rotation;
 107
 0108            Collider[] colliders = Physics.OverlapBox(center, area * 0.5f, rotation,
 109                PhysicsLayers.avatarTriggerMask, QueryTriggerInteraction.Collide);
 110
 0111            if (colliders.Length == 0)
 0112                return false;
 113
 0114            for (int i = 0; i < colliders.Length; i++)
 115            {
 0116                if (colliders[i] == playerCollider)
 0117                    return true;
 118            }
 0119            return false;
 120        }
 121
 122        private void OnAreaDisabled()
 123        {
 6124            if (!isPlayerInside)
 4125                return;
 126
 2127            areasController.RemoveInsideArea(cameraModeRepresentantion);
 2128            isPlayerInside = false;
 2129        }
 130
 131        private void OnOwnPlayerChange(Player current, Player previous)
 132        {
 0133            playerCollider = current.collider;
 0134        }
 135    }
 136}