< Summary

Class:Builder.Gizmos.DCLBuilderGizmo
Assembly:Builder
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Builder/Scripts/Gizmos/DCLBuilderGizmo.cs
Covered lines:13
Uncovered lines:49
Coverable lines:62
Total lines:144
Line coverage:20.9% (13 of 62)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
DCLBuilderGizmo()0%110100%
Initialize(...)0%110100%
GetActiveAxisVector()0%20400%
ForceRelativeScaleRatio()0%110100%
GetGizmoType()0%2100%
SetTargetTransform(...)0%2100%
OnBeginDrag(...)0%2100%
OnDrag(...)0%20400%
OnEndDrag()0%2100%
RaycastHit(...)0%2100%
GetHitPointToAxisValue(...)0%12300%
SetPreviousAxisValue(...)0%2100%
SetPositionToTarget()0%12300%
Update()0%6200%
GetCameraPlaneDistance(...)0%110100%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Builder/Scripts/Gizmos/DCLBuilderGizmo.cs

#LineLine coverage
 1using DCL.Configuration;
 2using UnityEngine;
 3
 4namespace Builder.Gizmos
 5{
 6    public abstract class DCLBuilderGizmo : MonoBehaviour
 7    {
 5978        [SerializeField] private string gizmoType = string.Empty;
 9        [SerializeField] protected DCLBuilderGizmoAxis axisX;
 10        [SerializeField] protected DCLBuilderGizmoAxis axisY;
 11        [SerializeField] protected DCLBuilderGizmoAxis axisZ;
 12
 013        public bool initialized { get; private set; }
 14        protected float snapFactor = 0;
 15
 59716        protected bool worldOrientedGizmos = true;
 17        private Transform targetTransform = null;
 18
 19        protected Camera builderCamera;
 20        protected Transform cameraHolderTransform;
 21
 22        private Vector3 relativeScaleRatio;
 23        protected bool startDragging = false;
 24        protected float prevAxisValue;
 25
 026        public DCLBuilderGizmoAxis activeAxis { protected set; get; }
 27
 28        public abstract void SetSnapFactor(DCLBuilderGizmoManager.SnapInfo snapInfo);
 29        public abstract float TransformEntity(Transform targetTransform, DCLBuilderGizmoAxis axis, float axisValue);
 30
 31        public virtual void Initialize(Camera camera, Transform cameraHolderTransform)
 32        {
 333            initialized = true;
 334            relativeScaleRatio = transform.localScale / GetCameraPlaneDistance(cameraHolderTransform, transform.position
 335            builderCamera = camera;
 336            this.cameraHolderTransform = cameraHolderTransform;
 337            axisX.SetGizmo(this);
 338            axisY.SetGizmo(this);
 339            axisZ.SetGizmo(this);
 340        }
 41
 42        public Vector3 GetActiveAxisVector()
 43        {
 044            if (activeAxis == axisX)
 045                return Vector3.right;
 046            if (activeAxis == axisY)
 047                return  Vector3.up;
 048            if (activeAxis == axisZ)
 049                return  Vector3.back;
 50
 051            return Vector3.zero;
 52        }
 53
 2454        public void ForceRelativeScaleRatio() { relativeScaleRatio = new Vector3(BuilderInWorldSettings.GIZMOS_RELATIVE_
 55
 056        public string GetGizmoType() { return gizmoType; }
 57
 58        public virtual void SetTargetTransform(Transform entityTransform)
 59        {
 060            targetTransform = entityTransform;
 061            SetPositionToTarget();
 062        }
 63
 64        public virtual void OnBeginDrag(DCLBuilderGizmoAxis axis, Transform entityTransform)
 65        {
 066            startDragging = true;
 067            targetTransform = entityTransform;
 068            activeAxis = axis;
 069            axis.SetColorHighlight();
 070        }
 71
 72        public virtual float OnDrag(Vector3 hitPoint, Vector2 mousePosition)
 73        {
 074            float axisValue = GetHitPointToAxisValue(activeAxis, hitPoint, mousePosition);
 75
 076            if (startDragging)
 77            {
 078                startDragging = false;
 079                prevAxisValue = axisValue;
 80            }
 81
 082            float transformValue = axisValue - prevAxisValue;
 083            if (Mathf.Abs(transformValue) >= snapFactor)
 84            {
 085                if (snapFactor > 0)
 86                {
 087                    float sign = Mathf.Sign(transformValue);
 088                    transformValue = transformValue + (Mathf.Abs(transformValue) % snapFactor) * -sign;
 89                }
 90
 091                SetPreviousAxisValue(axisValue, transformValue);
 092                return TransformEntity(targetTransform, activeAxis, transformValue);
 93            }
 094            return 0;
 95        }
 96
 097        public virtual void OnEndDrag() { activeAxis.SetColorDefault(); }
 98
 99        public virtual bool RaycastHit(Ray ray, out Vector3 hitPoint)
 100        {
 0101            Vector3 hitPos = ray.GetPoint(Vector3.Distance(ray.origin, activeAxis.transform.position));
 0102            Vector3 hitOffset = (hitPos - activeAxis.transform.position);
 0103            hitPoint = activeAxis.transform.position + Vector3.Project(hitOffset, activeAxis.transform.forward);
 0104            return true;
 105        }
 106
 107        protected virtual float GetHitPointToAxisValue(DCLBuilderGizmoAxis axis, Vector3 hitPoint, Vector2 mousePosition
 108        {
 0109            Vector3 dir = (hitPoint - axis.transform.position).normalized;
 0110            float sign = Vector3.Angle(dir, axis.transform.forward) == 180 ? -1 : 1;
 0111            return Vector3.Distance(activeAxis.transform.position, hitPoint) * sign;
 112        }
 113
 0114        protected virtual void SetPreviousAxisValue(float axisValue, float transformValue) { prevAxisValue = axisValue -
 115
 116        private void SetPositionToTarget()
 117        {
 0118            if (targetTransform)
 119            {
 0120                transform.position = targetTransform.position;
 0121                if (!worldOrientedGizmos)
 122                {
 0123                    transform.rotation = targetTransform.rotation;
 124                }
 125            }
 0126        }
 127
 128        private void Update()
 129        {
 0130            SetPositionToTarget();
 0131            if (builderCamera)
 132            {
 0133                float dist = GetCameraPlaneDistance(cameraHolderTransform, transform.position);
 0134                transform.localScale = relativeScaleRatio * dist;
 135            }
 0136        }
 137
 138        private static float GetCameraPlaneDistance(Transform cameraTransform, Vector3 objectPosition)
 139        {
 3140            Plane plane = new Plane(cameraTransform.forward, cameraTransform.position);
 3141            return plane.GetDistanceToPoint(objectPosition);
 142        }
 143    }
 144}