< Summary

Class:BIWGizmos
Assembly:BuilderInWorld
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/BuilderMode/Gizmos/BIWGizmos.cs
Covered lines:34
Uncovered lines:33
Coverable lines:67
Total lines:160
Line coverage:50.7% (34 of 67)
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.52050%
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/Scripts/MainScripts/DCL/Controllers/BuilderMode/Gizmos/BIWGizmos.cs

#LineLine coverage
 1using DCL.Configuration;
 2using UnityEngine;
 3
 4public interface IBIWGizmos
 5{
 6    abstract void SetSnapFactor(BIWGizmosController.SnapInfo snapInfo);
 7
 8    bool initialized { get; }
 9    GameObject currentGameObject { get; }
 10    void Initialize(Camera camera, Transform cameraHolderTransform);
 11    Vector3 GetActiveAxisVector();
 12    void OnEndDrag();
 13    void ForceRelativeScaleRatio();
 14    string GetGizmoType();
 15    void SetTargetTransform(Transform entityTransform);
 16    void OnBeginDrag(BIWGizmosAxis axis, Transform entityTransform);
 17    float OnDrag(Vector3 hitPoint, Vector2 mousePosition);
 18    bool RaycastHit(Ray ray, out Vector3 hitPoint);
 19}
 20
 21public abstract class BIWGizmos : MonoBehaviour, IBIWGizmos
 22{
 54623    [SerializeField] private string gizmoType = string.Empty;
 24    [SerializeField] protected BIWGizmosAxis axisX;
 25    [SerializeField] protected BIWGizmosAxis axisY;
 26    [SerializeField] protected BIWGizmosAxis axisZ;
 27
 21628    public bool initialized => initializedValue;
 11629    public GameObject currentGameObject { get; private set; }
 030    public bool initializedValue { get; private set; }
 31
 32    protected float snapFactor = 0;
 33
 54634    protected bool worldOrientedGizmos = true;
 35    private Transform targetTransform = null;
 36
 37    protected Camera builderCamera;
 38    protected Transform cameraHolderTransform;
 39
 40    private Vector3 relativeScaleRatio;
 41    protected bool startDragging = false;
 42    internal float previousAxisValue;
 43
 044    public BIWGizmosAxis activeAxis { internal set; get; }
 45
 46    public abstract void SetSnapFactor(BIWGizmosController.SnapInfo snapInfo);
 47    public abstract float TransformEntity(Transform targetTransform, BIWGizmosAxis axis, float axisValue);
 48
 49    public virtual void Initialize(Camera camera, Transform cameraHolderTransform)
 50    {
 21651        this.currentGameObject = gameObject;
 21652        initializedValue = true;
 21653        relativeScaleRatio = transform.localScale / GetCameraPlaneDistance(cameraHolderTransform, transform.position);
 21654        builderCamera = camera;
 21655        this.cameraHolderTransform = cameraHolderTransform;
 21656        axisX.SetGizmo(this);
 21657        axisY.SetGizmo(this);
 21658        axisZ.SetGizmo(this);
 21659    }
 60
 61    public Vector3 GetActiveAxisVector()
 62    {
 163        if (activeAxis == axisX)
 064            return Vector3.right;
 165        if (activeAxis == axisY)
 066            return  Vector3.up;
 167        if (activeAxis == axisZ)
 068            return  Vector3.back;
 69
 170        return Vector3.zero;
 71    }
 72
 43273    public void ForceRelativeScaleRatio() { relativeScaleRatio = new Vector3(BIWSettings.GIZMOS_RELATIVE_SCALE_RATIO, BI
 74
 9375    public string GetGizmoType() { return gizmoType; }
 76
 77    public virtual void SetTargetTransform(Transform entityTransform)
 78    {
 179        targetTransform = entityTransform;
 180        SetPositionToTarget();
 181    }
 82
 83    public virtual void OnBeginDrag(BIWGizmosAxis axis, Transform entityTransform)
 84    {
 185        startDragging = true;
 186        targetTransform = entityTransform;
 187        activeAxis = axis;
 188        axis.SetColorHighlight();
 189    }
 90
 91    public float OnDrag(Vector3 hitPoint, Vector2 mousePosition)
 92    {
 093        float axisValue = GetHitPointToAxisValue(activeAxis, hitPoint, mousePosition);
 94
 095        if (startDragging)
 96        {
 097            startDragging = false;
 098            previousAxisValue = axisValue;
 99        }
 100
 0101        float transformValue = axisValue - previousAxisValue;
 0102        if (Mathf.Abs(transformValue) >= snapFactor)
 103        {
 0104            if (snapFactor > 0)
 105            {
 0106                float sign = Mathf.Sign(transformValue);
 0107                transformValue = transformValue + (Mathf.Abs(transformValue) % snapFactor) * -sign;
 108            }
 109
 0110            SetPreviousAxisValue(axisValue, transformValue);
 0111            return TransformEntity(targetTransform, activeAxis, transformValue);
 112        }
 0113        return 0;
 114    }
 115
 1116    public void OnEndDrag() { activeAxis?.SetColorDefault(); }
 117
 118    public virtual bool RaycastHit(Ray ray, out Vector3 hitPoint)
 119    {
 0120        Vector3 hitPos = ray.GetPoint(Vector3.Distance(ray.origin, activeAxis.transform.position));
 0121        Vector3 hitOffset = (hitPos - activeAxis.transform.position);
 0122        hitPoint = activeAxis.transform.position + Vector3.Project(hitOffset, activeAxis.transform.forward);
 0123        return true;
 124    }
 125
 126    internal virtual float GetHitPointToAxisValue(BIWGizmosAxis axis, Vector3 hitPoint, Vector2 mousePosition)
 127    {
 0128        Vector3 dir = (hitPoint - axis.transform.position).normalized;
 0129        float sign = Vector3.Angle(dir, axis.transform.forward) == 180 ? -1 : 1;
 0130        return Vector3.Distance(activeAxis.transform.position, hitPoint) * sign;
 131    }
 132
 0133    internal virtual void SetPreviousAxisValue(float axisValue, float transformValue) { previousAxisValue = axisValue - 
 134
 135    private void SetPositionToTarget()
 136    {
 1137        if (!targetTransform)
 0138            return;
 139
 1140        transform.position = targetTransform.position;
 1141        if (!worldOrientedGizmos)
 0142            transform.rotation = targetTransform.rotation;
 1143    }
 144
 145    private void Update()
 146    {
 0147        SetPositionToTarget();
 0148        if (!builderCamera)
 0149            return;
 150
 0151        float dist = GetCameraPlaneDistance(cameraHolderTransform, transform.position);
 0152        transform.localScale = relativeScaleRatio * dist;
 0153    }
 154
 155    private static float GetCameraPlaneDistance(Transform cameraTransform, Vector3 objectPosition)
 156    {
 216157        Plane plane = new Plane(cameraTransform.forward, cameraTransform.position);
 216158        return plane.GetDistanceToPoint(objectPosition);
 159    }
 160}