< Summary

Class:BIWGizmos
Assembly:BuilderInWorld
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/DCLPlugins/BuilderInWorld/Scripts/Gizmos/BIWGizmos.cs
Covered lines:35
Uncovered lines:34
Coverable lines:69
Total lines:149
Line coverage:50.7% (35 of 69)
Covered branches:0
Total branches:0

Metrics

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

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/DCLPlugins/BuilderInWorld/Scripts/Gizmos/BIWGizmos.cs

#LineLine coverage
 1using DCL;
 2using DCL.Builder;
 3using DCL.Configuration;
 4using UnityEngine;
 5
 6public abstract class BIWGizmos : MonoBehaviour, IBIWGizmos
 7{
 1448    [SerializeField] private string gizmoType = string.Empty;
 9    [SerializeField] protected BIWGizmosAxis axisX;
 10    [SerializeField] protected BIWGizmosAxis axisY;
 11    [SerializeField] protected BIWGizmosAxis axisZ;
 12
 13213    public bool initialized => initializedValue;
 9214    public GameObject currentGameObject { get; private set; }
 015    public bool initializedValue { get; private set; }
 16
 17    protected float snapFactor = 0;
 18
 14419    protected bool worldOrientedGizmos = true;
 20    private Transform targetTransform = null;
 21
 22    protected Camera builderCamera;
 23    protected Transform cameraHolderTransform;
 24
 25    private Vector3 relativeScaleRatio;
 26    protected bool startDragging = false;
 27    internal float previousAxisValue;
 28
 029    public IBIWGizmosAxis activeAxis { internal set; get; }
 30
 31    public abstract void SetSnapFactor(SnapInfo snapInfo);
 32    public abstract float TransformEntity(Transform targetTransform, IBIWGizmosAxis axis, float axisValue);
 33
 34    public virtual void Initialize(Camera camera, Transform cameraHolderTransform)
 35    {
 13236        this.currentGameObject = gameObject;
 13237        initializedValue = true;
 13238        relativeScaleRatio = transform.localScale / GetCameraPlaneDistance(cameraHolderTransform, transform.position);
 13239        builderCamera = camera;
 13240        this.cameraHolderTransform = cameraHolderTransform;
 13241        axisX.SetGizmo(this);
 13242        axisY.SetGizmo(this);
 13243        axisZ.SetGizmo(this);
 13244    }
 45
 46    public Vector3 GetActiveAxisVector()
 47    {
 148        if (activeAxis == axisX)
 049            return Vector3.right;
 150        if (activeAxis == axisY)
 051            return  Vector3.up;
 152        if (activeAxis == axisZ)
 053            return  Vector3.back;
 54
 155        return Vector3.zero;
 56    }
 57
 26458    public void ForceRelativeScaleRatio() { relativeScaleRatio = new Vector3(BIWSettings.GIZMOS_RELATIVE_SCALE_RATIO, BI
 59
 8260    public string GetGizmoType() { return gizmoType; }
 61
 62    public virtual void SetTargetTransform(Transform entityTransform)
 63    {
 164        targetTransform = entityTransform;
 165        SetPositionToTarget();
 166    }
 67
 68    public virtual void OnBeginDrag(IBIWGizmosAxis axis, Transform entityTransform)
 69    {
 170        startDragging = true;
 171        targetTransform = entityTransform;
 172        activeAxis = axis;
 173        axis.SetColorHighlight();
 174    }
 75
 76    public float OnDrag(Vector3 hitPoint, Vector2 mousePosition)
 77    {
 078        float axisValue = GetHitPointToAxisValue(activeAxis, hitPoint, mousePosition);
 79
 080        if (startDragging)
 81        {
 082            startDragging = false;
 083            previousAxisValue = axisValue;
 84        }
 85
 086        float transformValue = axisValue - previousAxisValue;
 087        if (Mathf.Abs(transformValue) >= snapFactor)
 88        {
 089            if (snapFactor > 0)
 90            {
 091                float sign = Mathf.Sign(transformValue);
 092                transformValue = transformValue + (Mathf.Abs(transformValue) % snapFactor) * -sign;
 93            }
 94
 095            SetPreviousAxisValue(axisValue, transformValue);
 096            return TransformEntity(targetTransform, activeAxis, transformValue);
 97        }
 098        return 0;
 99    }
 100
 101    public void OnEndDrag()
 102    {
 1103        Environment.i.platform.physicsSyncController.MarkDirty();
 1104        activeAxis?.SetColorDefault();
 0105    }
 106
 107    public virtual bool RaycastHit(Ray ray, out Vector3 hitPoint)
 108    {
 0109        Vector3 hitPos = ray.GetPoint(Vector3.Distance(ray.origin, activeAxis.axisTransform.position));
 0110        Vector3 hitOffset = (hitPos - activeAxis.axisTransform.position);
 0111        hitPoint = activeAxis.axisTransform.position + Vector3.Project(hitOffset, activeAxis.axisTransform.forward);
 0112        return true;
 113    }
 114
 115    internal virtual float GetHitPointToAxisValue(IBIWGizmosAxis axis, Vector3 hitPoint, Vector2 mousePosition)
 116    {
 0117        Vector3 dir = (hitPoint - axis.axisTransform.position).normalized;
 0118        float sign = Vector3.Angle(dir, axis.axisTransform.forward) == 180 ? -1 : 1;
 0119        return Vector3.Distance(activeAxis.axisTransform.position, hitPoint) * sign;
 120    }
 121
 0122    internal virtual void SetPreviousAxisValue(float axisValue, float transformValue) { previousAxisValue = axisValue - 
 123
 124    private void SetPositionToTarget()
 125    {
 1126        if (!targetTransform)
 0127            return;
 128
 1129        transform.position = targetTransform.position;
 1130        if (!worldOrientedGizmos)
 0131            transform.rotation = targetTransform.rotation;
 1132    }
 133
 134    private void Update()
 135    {
 0136        SetPositionToTarget();
 0137        if (!builderCamera)
 0138            return;
 139
 0140        float dist = GetCameraPlaneDistance(cameraHolderTransform, transform.position);
 0141        transform.localScale = relativeScaleRatio * dist;
 0142    }
 143
 144    private static float GetCameraPlaneDistance(Transform cameraTransform, Vector3 objectPosition)
 145    {
 132146        Plane plane = new Plane(cameraTransform.forward, cameraTransform.position);
 132147        return plane.GetDistanceToPoint(objectPosition);
 148    }
 149}