< Summary

Class:BIWGizmosController
Assembly:BuilderInWorld
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/DCLPlugins/BuilderInWorld/Scripts/Controllers/BIWGizmosController.cs
Covered lines:91
Uncovered lines:32
Coverable lines:123
Total lines:260
Line coverage:73.9% (91 of 123)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
BIWGizmosController()0%2100%
Initialize(...)0%220100%
Dispose()0%110100%
GetSelectedGizmo()0%220100%
SetSnapFactor(...)0%220100%
OnBeginDrag(...)0%220100%
OnDrag(...)0%330100%
OnEndDrag()0%550100%
HasAxisHover()0%110100%
SetAxisHover(...)0%20400%
ForceRelativeScaleRatio()0%220100%
ShowGizmo()0%220100%
HideGizmo(...)0%330100%
IsGizmoActive()0%110100%
RaycastHit(...)0%6200%
Update()0%6200%
SetGizmoType(...)0%6.016094.12%
InitializeGizmos(...)0%330100%
SetSelectedEntities(...)0%110100%
OnGizmosAxisPressed(...)0%2100%
OnMouseUp(...)0%3.073080%
OnMouseDrag(...)0%21.196025%
CheckGizmoHover(...)0%6200%
GizmoStatusUpdate()0%4.074083.33%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/DCLPlugins/BuilderInWorld/Scripts/Controllers/BIWGizmosController.cs

#LineLine coverage
 1using System;
 2using System.Collections;
 3using System.Collections.Generic;
 4using DCL;
 5using DCL.Builder;
 6using DCL.Camera;
 7using UnityEngine;
 8using CameraController = DCL.Camera.CameraController;
 9
 10public class BIWGizmosController : BIWController, IBIWGizmosController
 11{
 12    public event IBIWGizmosController.GizmoTransformDelegate OnGizmoTransformObjectStart;
 13    public event IBIWGizmosController.GizmoTransformDelegate OnGizmoTransformObject;
 14    public event IBIWGizmosController.GizmoTransformDelegate OnGizmoTransformObjectEnd;
 15
 16    public event Action<Vector3> OnChangeTransformValue;
 17
 18    private IBIWRaycastController raycastController;
 19
 20    private IBIWGizmos[] gizmos;
 21
 22    internal bool isTransformingObject;
 023    public IBIWGizmos activeGizmo { get; set; }
 24
 025    private SnapInfo snapInfo = new SnapInfo();
 26
 27    private BIWGizmosAxis hoveredAxis = null;
 28
 29    private Transform selectedEntitiesParent;
 30    private List<BIWEntity> selectedEntities;
 31    private GameObject gizmosGO;
 32    private FreeCameraMovement freeCameraMovement;
 33
 34    public override void Initialize(IContext context)
 35    {
 4336        base.Initialize(context);
 4337        gizmosGO = GameObject.Instantiate(context.projectReferencesAsset.gizmosPrefab, context.projectReferencesAsset.gi
 4338        gizmos = gizmosGO.GetComponentsInChildren<IBIWGizmos>(true);
 39
 4340        raycastController = context.editorContext.raycastController;
 41
 4342        raycastController.OnGizmosAxisPressed += OnGizmosAxisPressed;
 4343        BIWInputWrapper.OnMouseUp += OnMouseUp;
 4344        BIWInputWrapper.OnMouseDrag += OnMouseDrag;
 45
 4346        if (context.sceneReferences.cameraController.GetComponent<CameraController>().TryGetCameraStateByType<FreeCamera
 4347            freeCameraMovement = (FreeCameraMovement)cameraState;
 48
 49        // NOTE(Adrian): Take into account that right now to get the relative scale of the gizmos, we set the gizmos in 
 4350        InitializeGizmos(context.sceneReferences.mainCamera, freeCameraMovement.transform);
 4351        ForceRelativeScaleRatio();
 4352    }
 53
 54    public override void Dispose()
 55    {
 4356        base.Dispose();
 4357        UnityEngine.Object.Destroy(gizmosGO);
 4358        raycastController.OnGizmosAxisPressed -= OnGizmosAxisPressed;
 4359        BIWInputWrapper.OnMouseUp -= OnMouseUp;
 4360        BIWInputWrapper.OnMouseDrag -= OnMouseDrag;
 4361    }
 62
 63    public string GetSelectedGizmo()
 64    {
 5365        if (IsGizmoActive())
 2166            return activeGizmo.GetGizmoType();
 67
 3268        return DCL.Components.DCLGizmos.Gizmo.NONE;
 69    }
 70
 71    public void SetSnapFactor(float position, float rotation, float scale)
 72    {
 3773        snapInfo.position = position;
 3774        snapInfo.rotation = rotation;
 3775        snapInfo.scale = scale;
 76
 3777        if (activeGizmo != null)
 3778            activeGizmo.SetSnapFactor(snapInfo);
 3779    }
 80
 81    internal void OnBeginDrag(IBIWGizmosAxis hittedAxis)
 82    {
 183        isTransformingObject = true;
 184        activeGizmo = hittedAxis.GetGizmo();
 185        activeGizmo.OnBeginDrag(hittedAxis, selectedEntitiesParent);
 186        freeCameraMovement.SetCameraCanMove(false);
 187        OnGizmoTransformObjectStart?.Invoke(activeGizmo.GetGizmoType());
 188    }
 89
 90    internal void OnDrag(Vector3 hitPoint, Vector2 mousePosition)
 91    {
 192        float value = activeGizmo.OnDrag(hitPoint, mousePosition);
 193        OnGizmoTransformObject?.Invoke(activeGizmo.GetGizmoType());
 194        OnChangeTransformValue?.Invoke(value * activeGizmo.GetActiveAxisVector());
 195    }
 96
 97    internal void OnEndDrag()
 98    {
 299        activeGizmo?.OnEndDrag();
 2100        freeCameraMovement.SetCameraCanMove(true);
 2101        OnGizmoTransformObjectEnd?.Invoke(activeGizmo?.GetGizmoType());
 2102        isTransformingObject = false;
 2103    }
 104
 1105    public bool HasAxisHover() { return hoveredAxis != null; }
 106
 107    private void SetAxisHover(BIWGizmosAxis axis)
 108    {
 0109        if (hoveredAxis != null && hoveredAxis != axis)
 0110            hoveredAxis.SetColorDefault();
 0111        else if (axis != null)
 0112            axis.SetColorHighlight();
 113
 0114        hoveredAxis = axis;
 0115    }
 116
 117    public void ForceRelativeScaleRatio()
 118    {
 344119        for (int i = 0; i < gizmos.Length; i++)
 120        {
 129121            gizmos[i].ForceRelativeScaleRatio();
 122        }
 43123    }
 124
 125    public void ShowGizmo()
 126    {
 1127        gizmosGO.gameObject.SetActive(true);
 1128        if (activeGizmo != null)
 129        {
 1130            activeGizmo.SetTargetTransform(selectedEntitiesParent);
 1131            activeGizmo.currentGameObject.SetActive(true);
 132        }
 1133    }
 134
 135    public void HideGizmo(bool setInactiveGizmos = false)
 136    {
 129137        if (activeGizmo != null)
 89138            activeGizmo.currentGameObject.SetActive(false);
 139
 129140        if (setInactiveGizmos)
 1141            SetGizmoType(DCL.Components.DCLGizmos.Gizmo.NONE);
 142
 129143        gizmosGO.gameObject.SetActive(false);
 129144    }
 145
 1146    public bool IsGizmoActive() { return activeGizmo != null; }
 147
 148    internal bool RaycastHit(Ray ray, out Vector3 hitPoint)
 149    {
 0150        if (activeGizmo != null)
 0151            return activeGizmo.RaycastHit(ray, out hitPoint);
 152
 0153        hitPoint = Vector3.zero;
 0154        return false;
 155    }
 156
 157    public override void Update()
 158    {
 0159        base.Update();
 0160        if (!isTransformingObject)
 0161            CheckGizmoHover(Input.mousePosition);
 0162    }
 163
 164    public void SetGizmoType(string gizmoType)
 165    {
 46166        HideGizmo();
 167
 46168        if (gizmoType != DCL.Components.DCLGizmos.Gizmo.NONE)
 169        {
 45170            bool wasGizmoActive = IsGizmoActive();
 171
 118172            for (int i = 0; i < gizmos.Length; i++)
 173            {
 59174                if (gizmos[i].GetGizmoType() == gizmoType)
 175                {
 45176                    activeGizmo = gizmos[i];
 45177                    activeGizmo.SetSnapFactor(snapInfo);
 45178                    break;
 179                }
 180            }
 181
 45182            bool areEntitiesSelected = selectedEntities != null && selectedEntities.Count > 0;
 183
 45184            if (wasGizmoActive && areEntitiesSelected)
 0185                ShowGizmo();
 186            else
 45187                GizmoStatusUpdate();
 45188        }
 189        else
 190        {
 1191            activeGizmo = null;
 192        }
 1193    }
 194
 195    private void InitializeGizmos(Camera camera, Transform cameraTransform)
 196    {
 344197        for (int i = 0; i < gizmos.Length; i++)
 198        {
 129199            if (!gizmos[i].initialized)
 129200                gizmos[i].Initialize(camera, cameraTransform);
 201        }
 43202    }
 203
 204    public void SetSelectedEntities(Transform selectionParent, List<BIWEntity> entities)
 205    {
 2206        selectedEntities = entities;
 2207        selectedEntitiesParent = selectionParent;
 2208        GizmoStatusUpdate();
 2209    }
 210
 0211    private void OnGizmosAxisPressed(IBIWGizmosAxis pressedAxis) { OnBeginDrag(pressedAxis); }
 212
 213    internal void OnMouseUp(int buttonId, Vector3 mousePosition)
 214    {
 1215        if (!isTransformingObject)
 0216            return;
 217
 1218        if (buttonId == 0)
 1219            OnEndDrag();
 1220    }
 221
 222    internal void OnMouseDrag(int buttonId, Vector3 mousePosition, float axisX, float axisY)
 223    {
 1224        if (buttonId != 0)
 1225            return;
 226
 0227        bool hasMouseMoved = (axisX != 0 || axisY != 0);
 0228        if (!isTransformingObject || !hasMouseMoved)
 0229            return;
 230
 231        Vector3 hit;
 0232        if (RaycastHit(raycastController.GetMouseRay(mousePosition), out hit))
 0233            OnDrag(hit, mousePosition);
 0234    }
 235
 236    private void CheckGizmoHover(Vector3 mousePosition)
 237    {
 238        RaycastHit hit;
 0239        if (raycastController.RaycastToGizmos(mousePosition, out hit))
 240        {
 0241            BIWGizmosAxis gizmoAxis = hit.collider.gameObject.GetComponent<BIWGizmosAxis>();
 0242            SetAxisHover(gizmoAxis);
 0243        }
 244        else
 245        {
 0246            SetAxisHover(null);
 247        }
 0248    }
 249
 250    private void GizmoStatusUpdate()
 251    {
 47252        if (!IsGizmoActive())
 0253            return;
 254
 47255        if (selectedEntities == null || selectedEntities.Count == 0)
 46256            HideGizmo();
 257        else
 1258            ShowGizmo();
 1259    }
 260}