< Summary

Class:DCL.PhysicsCast
Assembly:PhysicsCast
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/WorldRuntime/PhysicsCast/PhysicsCast.cs
Covered lines:0
Uncovered lines:56
Coverable lines:56
Total lines:149
Line coverage:0% (0 of 56)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
PhysicsCast()0%2100%
Query(...)0%12300%
HitFirst(...)0%20400%
HitAll(...)0%56700%
HitFirstAvatar(...)0%2100%
HitAllAvatars(...)0%2100%
GetUnityRayFromQuery(...)0%2100%
GetRayInfoFromQuery(...)0%2100%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/WorldRuntime/PhysicsCast/PhysicsCast.cs

#LineLine coverage
 1using DCL.Helpers;
 2using DCL.Interface;
 3using DCL.Models;
 4using System.Collections.Generic;
 5using DCL.Components;
 6using DCL.Controllers;
 7using UnityEngine;
 8
 9namespace DCL
 10{
 11    public class PhysicsCast : Singleton<PhysicsCast>
 12    {
 13        private LayerMask layerMaskTarget;
 14
 15        private IRaycastHandler raycastHandler;
 16
 017        public PhysicsCast()
 18        {
 019            layerMaskTarget = 1 << LayerMask.NameToLayer("OnPointerEvent");
 020            raycastHandler = new RaycastHandler();
 021        }
 22
 23        public void Query(RaycastQuery query, EntityIdHelper helper)
 24        {
 025            switch (query.raycastType)
 26            {
 27                case RaycastType.HIT_FIRST:
 028                    HitFirst(query, helper);
 029                    break;
 30                case RaycastType.HIT_ALL:
 031                    HitAll(query, helper);
 32                    break;
 33            }
 034        }
 35
 36        private void HitFirst(RaycastQuery query,EntityIdHelper helper)
 37        {
 38            WebInterface.RaycastHitEntity hitEntity;
 39
 040            Environment.i.world.state.TryGetScene(query.sceneNumber, out IParcelScene scene);
 41
 042            RaycastResultInfo raycastInfo = raycastHandler.Raycast(GetUnityRayFromQuery(query), query.ray.distance,
 43                ~layerMaskTarget, scene);
 044            WebInterface.RayInfo rayInfo = GetRayInfoFromQuery(query);
 45
 046            if (raycastInfo != null)
 47            {
 048                CollidersManager.i.GetColliderInfo(raycastInfo.hitInfo.hit.collider, out ColliderInfo colliderInfo);
 49
 050                hitEntity = new WebInterface.RaycastHitEntity()
 51                {
 52                    didHit = raycastInfo.hitInfo.isValid,
 53                    hitNormal = raycastInfo.hitInfo.hit.normal,
 54                    hitPoint = raycastInfo.hitInfo.hit.point,
 55                    ray = rayInfo,
 56                    entity = new WebInterface.HitEntityInfo()
 57                    {
 58                        entityId = colliderInfo.entity != null ?  helper.GetOriginalId(colliderInfo.entity.entityId) : "
 59                        meshName = colliderInfo.meshName
 60                    }
 61                };
 62            }
 63            else
 64            {
 065                hitEntity = new WebInterface.RaycastHitEntity()
 66                {
 67                    didHit = false,
 68                    ray = rayInfo
 69                };
 70            }
 71
 072            WebInterface.ReportRaycastHitFirstResult(query.sceneNumber, query.id, query.raycastType, hitEntity);
 073        }
 74
 75        private void HitAll(RaycastQuery query, EntityIdHelper helper)
 76        {
 077            WebInterface.RaycastHitEntities raycastHitEntities = new WebInterface.RaycastHitEntities();
 78
 079            IParcelScene scene = null;
 080            Environment.i.world.state.TryGetScene(query.sceneNumber, out scene);
 81
 082            RaycastResultInfoList raycastResults = raycastHandler.RaycastAll(GetUnityRayFromQuery(query),
 83                query.ray.distance, ~layerMaskTarget, scene);
 84
 085            raycastHitEntities.ray = GetRayInfoFromQuery(query);
 86
 087            if (raycastResults.hitInfo != null && raycastResults.hitInfo.Length > 0)
 88            {
 089                int count = raycastResults.hitInfo.Length;
 090                List<WebInterface.RaycastHitEntity> hitEntityInfoList = new List<WebInterface.RaycastHitEntity>();
 91
 092                for (int i = 0; i < count; i++)
 93                {
 094                    var hitInfo = raycastResults.hitInfo[i];
 095                    CollidersManager.i.GetColliderInfo(hitInfo.hit.collider, out ColliderInfo colliderInfo);
 96
 097                    if (hitInfo.isValid)
 98                    {
 099                        WebInterface.RaycastHitEntity hitEntity = new WebInterface.RaycastHitEntity();
 0100                        hitEntity.didHit = true;
 0101                        hitEntity.ray = raycastHitEntities.ray;
 0102                        hitEntity.hitPoint = hitInfo.hit.point;
 0103                        hitEntity.hitNormal = hitInfo.hit.normal;
 0104                        hitEntity.entity = new WebInterface.HitEntityInfo();
 0105                        hitEntity.entity.entityId = colliderInfo.entity != null ? helper.GetOriginalId(colliderInfo.enti
 0106                        hitEntity.entity.meshName = colliderInfo.meshName;
 0107                        hitEntityInfoList.Add(hitEntity);
 108                    }
 109                }
 110
 0111                raycastHitEntities.didHit = true;
 0112                raycastHitEntities.hitPoint = raycastResults.hitInfo[0].hit.point;
 0113                raycastHitEntities.hitNormal = raycastResults.hitInfo[0].hit.normal;
 0114                raycastHitEntities.entities = hitEntityInfoList.ToArray();
 115            }
 116
 0117            WebInterface.ReportRaycastHitAllResult(query.sceneNumber, query.id, query.raycastType, raycastHitEntities);
 0118        }
 119
 120        private void HitFirstAvatar(RaycastQuery query)
 121        {
 0122        }
 123
 124        private void HitAllAvatars(RaycastQuery query)
 125        {
 0126        }
 127
 128        private UnityEngine.Ray GetUnityRayFromQuery(RaycastQuery query)
 129        {
 0130            UnityEngine.Ray ray = new UnityEngine.Ray();
 131
 0132            ray.origin = query.ray.unityOrigin;
 0133            ray.direction = query.ray.direction;
 134
 0135            return ray;
 136        }
 137
 138        private WebInterface.RayInfo GetRayInfoFromQuery(RaycastQuery query)
 139        {
 0140            WebInterface.RayInfo rayInfo = new WebInterface.RayInfo();
 141
 0142            rayInfo.direction = query.ray.direction;
 0143            rayInfo.distance = query.ray.distance;
 0144            rayInfo.origin = query.ray.origin;
 145
 0146            return rayInfo;
 147        }
 148    }
 149}