< Summary

Class:BIWGodMode
Assembly:BuilderInWorld
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/BuilderMode/States/EditorMode/BIWGodMode.cs
Covered lines:319
Uncovered lines:89
Coverable lines:408
Total lines:823
Line coverage:78.1% (319 of 408)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
BIWGodMode()0%110100%
Init(...)0%330100%
Dispose()0%330100%
Update()0%5.264057.14%
OnGUI()0%4.123050%
CheckOutlineEntitiesInSquareSelection(...)0%5.035088.89%
ChangeSnapTemporaryDeactivated()0%220100%
ChangeSnapTemporaryActivated()0%220100%
EntitiesTransfromByGizmos(...)0%3.033085.71%
UpdateSelectionPosition(...)0%22090%
UpdateSelectionRotation(...)0%2.012088.89%
UpdateSelectionScale(...)0%22092.31%
DragEditionGameObject(...)0%2.032080%
MouseClickDetected()0%2.152066.67%
OnInputMouseDrag(...)0%26.59040%
GetPositionRoundedToSnapFactor(...)0%2100%
OnInputMouseUpOnUi(...)0%3.473062.5%
OnInputMouseUp(...)0%5.164058.33%
OnInputMouseDown(...)0%11.559068.42%
CheckEndBoundMultiselection(...)0%8.744033.33%
CanCancelAction(...)0%6200%
StarDraggingSelectedEntities()0%440100%
EndDraggingSelectedEntities()0%3.143075%
EndBoundMultiSelection(...)0%12.4211077.27%
Activate(...)0%440100%
ActivateCamera(...)0%220100%
OnDeleteEntity(...)0%6200%
OnDeselectedEntities()0%2100%
Deactivate()0%110100%
StartMultiSelection()0%110100%
SetDuplicationOffset(...)0%2100%
CreatedEntity(...)0%3.013088.89%
GetCreatedEntityPoint()0%2100%
SelectedEntity(...)0%330100%
EntityDeselected(...)0%3.143075%
EntityDoubleClick(...)0%6200%
UpdateActionsInteractable()0%2.062075%
ShouldCancelUndoAction()0%2.032080%
SetSnapActive(...)0%220100%
FocusOnSelectedEntitiesInput()0%6200%
TryLookAtEntity(...)0%64050%
LookAtEntity(...)0%3.073080%
CalculateEntityMidPoint(...)0%330100%
TranslateMode()0%110100%
RotateMode()0%110100%
ScaleMode()0%110100%
GizmosMode(...)0%7.777075%
OnGizmosTransformStart(...)0%220100%
OnGizmosTransformEnd(...)0%6.566075%
FocusEntities(...)0%110100%
GetInitialCameraPosition(...)0%110100%
SetLookAtObject(...)0%110100%
SetEditObjectAtMouse()0%6.325062.5%
ResetCamera()0%110100%
TakeSceneScreenshotForPublish()0%220100%
TakeSceneScreenshotForExit()0%220100%
OpenNewProjectDetails()0%220100%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/BuilderMode/States/EditorMode/BIWGodMode.cs

#LineLine coverage
 1using DCL;
 2using DCL.Configuration;
 3using DCL.Controllers;
 4using DCL.Helpers;
 5using DCL.Models;
 6using System;
 7using System.Collections.Generic;
 8using DCL.Camera;
 9using UnityEngine;
 10using Environment = DCL.Environment;
 11
 12public class BIWGodMode : BIWMode
 13{
 6314    private float initialEagleCameraHeight = 10f;
 6315    private float initialEagleCameraDistance = 10f;
 16    private float initialEagleCameraLookAtHeight = 0f;
 17
 6318    private float snapDragFactor = 5f;
 19    internal IFreeCameraMovement freeCameraController;
 20
 21    private CameraController cameraController;
 22    private Transform lookAtTransform;
 23    private MouseCatcher mouseCatcher;
 24    private PlayerAvatarController avatarRenderer;
 25    private IBIWGizmosController gizmoManager;
 26    private IBIWOutlinerController outlinerController;
 27
 28    private InputAction_Trigger focusOnSelectedEntitiesInputAction;
 29    private InputAction_Hold multiSelectionInputAction;
 30
 31    private IParcelScene sceneToEdit;
 32
 33    internal bool isPlacingNewObject = false;
 34    internal bool mouseMainBtnPressed = false;
 35    internal bool mouseSecondaryBtnPressed = false;
 36    internal bool isSquareMultiSelectionInputActive = false;
 37    internal bool isMouseDragging = false;
 38    internal bool changeSnapTemporaryButtonPressed = false;
 39
 40    internal bool wasGizmosActive = false;
 41    internal bool isDraggingStarted = false;
 42    internal bool canDragSelectedEntities = false;
 43
 6344    private bool activateCamera = true;
 45    private CameraMode.ModeId avatarCameraModeBeforeEditing;
 46
 47    internal Vector3 lastMousePosition;
 48    internal Vector3 dragStartedPoint;
 49
 50    public const float RAYCAST_MAX_DISTANCE = 10000f;
 51
 52    public override void Init(BIWContext context)
 53    {
 6354        base.Init(context);
 55
 6356        lookAtTransform = new GameObject("BIWGodModeTransform").transform;
 6357        maxDistanceToSelectEntitiesValue = context.godModeDynamicVariablesAsset.maxDistanceToSelectEntities;
 58
 6359        snapFactor = context.godModeDynamicVariablesAsset.snapFactor;
 6360        snapRotationDegresFactor = context.godModeDynamicVariablesAsset.snapRotationDegresFactor;
 6361        snapScaleFactor =  context.godModeDynamicVariablesAsset.snapScaleFactor;
 6362        snapDistanceToActivateMovement =  context.godModeDynamicVariablesAsset.snapDistanceToActivateMovement;
 63
 6364        initialEagleCameraHeight = context.godModeDynamicVariablesAsset.initialEagleCameraHeight;
 6365        initialEagleCameraDistance = context.godModeDynamicVariablesAsset.initialEagleCameraDistance;
 6366        initialEagleCameraLookAtHeight = context.godModeDynamicVariablesAsset.initialEagleCameraLookAtHeight;
 67
 6368        snapDragFactor = context.godModeDynamicVariablesAsset.snapDragFactor;
 69
 6370        outlinerController = context.outlinerController;
 6371        gizmoManager = context.gizmosController;
 72
 6373        if (HUDController.i.builderInWorldMainHud != null)
 74        {
 2575            HUDController.i.builderInWorldMainHud.OnTranslateSelectedAction += TranslateMode;
 2576            HUDController.i.builderInWorldMainHud.OnRotateSelectedAction += RotateMode;
 2577            HUDController.i.builderInWorldMainHud.OnScaleSelectedAction += ScaleMode;
 2578            HUDController.i.builderInWorldMainHud.OnSelectedObjectPositionChange += UpdateSelectionPosition;
 2579            HUDController.i.builderInWorldMainHud.OnSelectedObjectRotationChange += UpdateSelectionRotation;
 2580            HUDController.i.builderInWorldMainHud.OnSelectedObjectScaleChange += UpdateSelectionScale;
 2581            HUDController.i.builderInWorldMainHud.OnResetCameraAction += ResetCamera;
 2582            HUDController.i.builderInWorldMainHud.OnPublishAction += TakeSceneScreenshotForPublish;
 83        }
 84
 6385        if (context.sceneReferences.cameraController.TryGetCameraStateByType<FreeCameraMovement>(out CameraStateBase cam
 6386            freeCameraController = (FreeCameraMovement) cameraState;
 6387        mouseCatcher = context.sceneReferences.mouseCatcher;
 6388        avatarRenderer = context.sceneReferences.playerAvatarController;
 6389        cameraController = context.sceneReferences.cameraController;
 90
 6391        BIWInputWrapper.OnMouseDown += OnInputMouseDown;
 6392        BIWInputWrapper.OnMouseUp += OnInputMouseUp;
 6393        BIWInputWrapper.OnMouseUpOnUI += OnInputMouseUpOnUi;
 6394        BIWInputWrapper.OnMouseDrag += OnInputMouseDrag;
 95
 6396        focusOnSelectedEntitiesInputAction = context.inputsReferencesAsset.focusOnSelectedEntitiesInputAction;
 6397        multiSelectionInputAction = context.inputsReferencesAsset.multiSelectionInputAction;
 98
 6399        focusOnSelectedEntitiesInputAction.OnTriggered += (o) => FocusOnSelectedEntitiesInput();
 100
 70101        multiSelectionInputAction.OnStarted += (o) => ChangeSnapTemporaryActivated();
 697102        multiSelectionInputAction.OnFinished += (o) => ChangeSnapTemporaryDeactivated();
 103
 63104        gizmoManager.OnChangeTransformValue += EntitiesTransfromByGizmos;
 63105        gizmoManager.OnGizmoTransformObjectEnd += OnGizmosTransformEnd;
 63106        gizmoManager.OnGizmoTransformObjectStart += OnGizmosTransformStart;
 63107    }
 108
 109    public override void Dispose()
 110    {
 63111        base.Dispose();
 112
 63113        isPlacingNewObject = false;
 114
 63115        gizmoManager.OnGizmoTransformObjectEnd -= OnGizmosTransformEnd;
 63116        gizmoManager.OnGizmoTransformObjectStart -= OnGizmosTransformStart;
 117
 63118        BIWInputWrapper.OnMouseDown -= OnInputMouseDown;
 63119        BIWInputWrapper.OnMouseUp -= OnInputMouseUp;
 63120        BIWInputWrapper.OnMouseUpOnUI -= OnInputMouseUpOnUi;
 63121        BIWInputWrapper.OnMouseDrag -= OnInputMouseDrag;
 122
 63123        gizmoManager.OnChangeTransformValue -= EntitiesTransfromByGizmos;
 124
 63125        if (lookAtTransform.gameObject != null)
 63126            GameObject.Destroy(lookAtTransform.gameObject);
 127
 63128        if (HUDController.i.builderInWorldMainHud == null)
 38129            return;
 130
 25131        HUDController.i.builderInWorldMainHud.OnSelectedObjectPositionChange -= UpdateSelectionPosition;
 25132        HUDController.i.builderInWorldMainHud.OnSelectedObjectRotationChange -= UpdateSelectionRotation;
 25133        HUDController.i.builderInWorldMainHud.OnSelectedObjectScaleChange -= UpdateSelectionScale;
 25134        HUDController.i.builderInWorldMainHud.OnTranslateSelectedAction -= TranslateMode;
 25135        HUDController.i.builderInWorldMainHud.OnRotateSelectedAction -= RotateMode;
 25136        HUDController.i.builderInWorldMainHud.OnScaleSelectedAction -= ScaleMode;
 25137        HUDController.i.builderInWorldMainHud.OnResetCameraAction -= ResetCamera;
 25138        HUDController.i.builderInWorldMainHud.OnPublishAction -= TakeSceneScreenshotForPublish;
 25139    }
 140
 141    public override void Update()
 142    {
 2143        base.Update();
 2144        if (isPlacingNewObject)
 145        {
 0146            SetEditObjectAtMouse();
 0147        }
 2148        else if (isSquareMultiSelectionInputActive && isMouseDragging)
 149        {
 0150            CheckOutlineEntitiesInSquareSelection(Input.mousePosition);
 151        }
 2152    }
 153
 154    public override void OnGUI()
 155    {
 1156        base.OnGUI();
 1157        if (mouseMainBtnPressed && isSquareMultiSelectionInputActive)
 158        {
 0159            var rect = BIWUtils.GetScreenRect(lastMousePosition, Input.mousePosition);
 0160            BIWUtils.DrawScreenRect(rect, new Color(1f, 1f, 1f, 0.25f));
 0161            BIWUtils.DrawScreenRectBorder(rect, 1, Color.white);
 162        }
 1163    }
 164
 165    internal void CheckOutlineEntitiesInSquareSelection(Vector3 mousePosition)
 166    {
 167        List<BIWEntity> allEntities = null;
 168
 1169        allEntities = entityHandler.GetAllEntitiesFromCurrentScene();
 170
 4171        foreach (BIWEntity entity in allEntities)
 172        {
 1173            if (!entity.rootEntity.meshRootGameObject || entity.rootEntity.meshesInfo.renderers.Length <= 0)
 174                continue;
 175
 1176            if (BIWUtils.IsWithinSelectionBounds(entity.rootEntity.meshesInfo.mergedBounds.center, lastMousePosition, mo
 1177                outlinerController.OutlineEntity(entity);
 178            else
 0179                outlinerController.CancelEntityOutline(entity);
 180        }
 1181    }
 182
 183    private void ChangeSnapTemporaryDeactivated()
 184    {
 634185        if (changeSnapTemporaryButtonPressed)
 3186            SetSnapActive(!isSnapActiveValue);
 187
 634188        changeSnapTemporaryButtonPressed = false;
 634189    }
 190
 191    private void ChangeSnapTemporaryActivated()
 192    {
 7193        if (selectedEntities.Count == 0)
 4194            return;
 195
 3196        changeSnapTemporaryButtonPressed = true;
 197
 3198        SetSnapActive(!isSnapActiveValue);
 3199    }
 200
 201    internal void EntitiesTransfromByGizmos(Vector3 transformValue)
 202    {
 1203        if (gizmoManager.GetSelectedGizmo() != BIWSettings.ROTATE_GIZMO_NAME)
 0204            return;
 205
 4206        foreach (BIWEntity entity in selectedEntities)
 207        {
 1208            entity.AddRotation(transformValue);
 209        }
 1210    }
 211
 212    public void UpdateSelectionPosition(Vector3 newPosition)
 213    {
 1214        if (selectedEntities.Count != 1)
 0215            return;
 216
 1217        TransformActionStarted(selectedEntities[0].rootEntity, BIWSettings.TRANSLATE_GIZMO_NAME);
 1218        editionGO.transform.position = WorldStateUtils.ConvertSceneToUnityPosition(newPosition, sceneToEdit);
 1219        gizmoManager.SetSelectedEntities(editionGO.transform, selectedEntities);
 1220        TransformActionEnd(selectedEntities[0].rootEntity, BIWSettings.TRANSLATE_GIZMO_NAME);
 1221        ActionFinish(BIWCompleteAction.ActionType.MOVE);
 1222        entityHandler.ReportTransform(true);
 1223        saveController.TryToSave();
 1224    }
 225
 226    public void UpdateSelectionRotation(Vector3 rotation)
 227    {
 1228        if (selectedEntities.Count != 1)
 0229            return;
 230
 1231        TransformActionStarted(selectedEntities[0].rootEntity, BIWSettings.ROTATE_GIZMO_NAME);
 1232        selectedEntities[0].rootEntity.gameObject.transform.rotation = Quaternion.Euler(rotation);
 1233        TransformActionEnd(selectedEntities[0].rootEntity, BIWSettings.ROTATE_GIZMO_NAME);
 1234        ActionFinish(BIWCompleteAction.ActionType.ROTATE);
 1235        entityHandler.ReportTransform(true);
 1236        saveController.TryToSave();
 1237    }
 238
 239    public void UpdateSelectionScale(Vector3 scale)
 240    {
 1241        if (selectedEntities.Count != 1)
 0242            return;
 243
 1244        var entityToUpdate = selectedEntities[0];
 245
 1246        TransformActionStarted(entityToUpdate.rootEntity, BIWSettings.SCALE_GIZMO_NAME);
 247        // Before change the scale, we unparent the entity to not to make it dependant on the editionGO and after that, 
 1248        entityToUpdate.rootEntity.gameObject.transform.SetParent(null);
 1249        entityToUpdate.rootEntity.gameObject.transform.localScale = scale;
 1250        editionGO.transform.localScale = Vector3.one;
 1251        entityToUpdate.rootEntity.gameObject.transform.SetParent(editionGO.transform);
 252
 1253        TransformActionEnd(entityToUpdate.rootEntity, BIWSettings.SCALE_GIZMO_NAME);
 1254        ActionFinish(BIWCompleteAction.ActionType.SCALE);
 1255        entityHandler.ReportTransform(true);
 1256        saveController.TryToSave();
 1257    }
 258
 259    internal void DragEditionGameObject(Vector3 mousePosition)
 260    {
 1261        Vector3 currentPoint = raycastController.GetFloorPointAtMouse(mousePosition);
 1262        Vector3 initialEntityPosition = editionGO.transform.position;
 263
 1264        if (isSnapActiveValue)
 265        {
 0266            currentPoint = GetPositionRoundedToSnapFactor(currentPoint);
 0267            initialEntityPosition = GetPositionRoundedToSnapFactor(initialEntityPosition);
 268        }
 269
 1270        Vector3 move = currentPoint - dragStartedPoint;
 1271        Vector3 destination = initialEntityPosition + move;
 272
 1273        editionGO.transform.position = destination;
 1274        dragStartedPoint = currentPoint;
 1275    }
 276
 277    #region Mouse
 278
 279    public override void MouseClickDetected()
 280    {
 1281        if (isPlacingNewObject)
 282        {
 1283            entityHandler.DeselectEntities();
 1284            saveController.TryToSave();
 1285            return;
 286        }
 287
 0288        base.MouseClickDetected();
 0289    }
 290
 291    internal void OnInputMouseDrag(int buttonId, Vector3 mousePosition, float axisX, float axisY)
 292    {
 1293        if (Vector3.Distance(lastMousePosition, mousePosition) <= BIWSettings.MOUSE_THRESHOLD_FOR_DRAG && !isMouseDraggi
 0294            return;
 295
 1296        isMouseDragging = true;
 1297        if (buttonId != 0 ||
 298            selectedEntities.Count <= 0 ||
 299            BIWUtils.IsPointerOverMaskElement(BIWSettings.GIZMOS_LAYER) ||
 300            isSquareMultiSelectionInputActive)
 1301            return;
 302
 0303        if (!isDraggingStarted)
 0304            StarDraggingSelectedEntities();
 305
 0306        if (canDragSelectedEntities)
 0307            DragEditionGameObject(mousePosition);
 0308    }
 309
 310    internal Vector3 GetPositionRoundedToSnapFactor(Vector3 position)
 311    {
 0312        position = new Vector3(
 313            Mathf.Round(position.x / snapDragFactor) * snapDragFactor,
 314            position.y,
 315            Mathf.Round(position.z / snapDragFactor) * snapDragFactor);
 316
 0317        return position;
 318    }
 319
 320    internal void OnInputMouseUpOnUi(int buttonID, Vector3 position)
 321    {
 1322        if (buttonID == 1)
 323        {
 0324            mouseSecondaryBtnPressed = false;
 0325            freeCameraController.StopDetectingMovement();
 326        }
 327
 1328        if (buttonID != 0)
 0329            return;
 330
 1331        CheckEndBoundMultiselection(position);
 1332        isMouseDragging = false;
 1333    }
 334
 335    internal void OnInputMouseUp(int buttonID, Vector3 position)
 336    {
 1337        if (buttonID == 1)
 338        {
 0339            mouseSecondaryBtnPressed = false;
 0340            if (CanCancelAction(position))
 0341                entityHandler.CancelSelection();
 342
 0343            freeCameraController.StopDetectingMovement();
 344        }
 345
 1346        if (buttonID != 0)
 0347            return;
 348
 1349        EndDraggingSelectedEntities();
 350
 1351        CheckEndBoundMultiselection(position);
 352
 1353        outlinerController.SetOutlineCheckActive(true);
 354
 1355        isMouseDragging = false;
 1356    }
 357
 358    internal void OnInputMouseDown(int buttonID, Vector3 position)
 359    {
 1360        lastMousePosition = position;
 361
 1362        if (buttonID == 1)
 363        {
 0364            mouseSecondaryBtnPressed = true;
 0365            freeCameraController.StartDectectingMovement();
 366        }
 367
 1368        if (buttonID != 0)
 0369            return;
 370
 1371        dragStartedPoint = raycastController.GetFloorPointAtMouse(position);
 372
 1373        if (isSnapActiveValue)
 374        {
 0375            dragStartedPoint.x = Mathf.Round(dragStartedPoint.x);
 0376            dragStartedPoint.z = Mathf.Round(dragStartedPoint.z);
 377        }
 378
 1379        if (isPlacingNewObject)
 0380            return;
 381
 1382        var entity = raycastController.GetEntityOnPointer();
 1383        if ((entity == null
 384             || (entity != null && !entity.isSelected))
 385            && !BIWUtils.IsPointerOverMaskElement(BIWSettings.GIZMOS_LAYER))
 386        {
 1387            isSquareMultiSelectionInputActive = true;
 1388            outlinerController.SetOutlineCheckActive(false);
 389        }
 390
 1391        mouseMainBtnPressed = true;
 1392        freeCameraController.SetCameraCanMove(false);
 1393    }
 394
 395    #endregion
 396
 397    private void CheckEndBoundMultiselection(Vector3 position)
 398    {
 2399        if (isSquareMultiSelectionInputActive && mouseMainBtnPressed )
 400        {
 0401            if (Vector3.Distance(lastMousePosition, position) >= BIWSettings.MOUSE_THRESHOLD_FOR_DRAG)
 0402                EndBoundMultiSelection(Input.mousePosition);
 403
 0404            isSquareMultiSelectionInputActive = false;
 0405            mouseMainBtnPressed = false;
 406        }
 2407    }
 408
 0409    private bool CanCancelAction(Vector3 currentMousePosition) { return Vector3.Distance(lastMousePosition, currentMouse
 410
 411    internal void StarDraggingSelectedEntities()
 412    {
 2413        if (!entityHandler.IsPointerInSelectedEntity() ||
 414            gizmoManager.HasAxisHover())
 1415            return;
 416
 1417        if (gizmoManager.IsGizmoActive())
 418        {
 1419            gizmoManager.HideGizmo();
 1420            wasGizmosActive = true;
 421        }
 422
 1423        freeCameraController.SetCameraCanMove(false);
 1424        isDraggingStarted = true;
 425
 1426        canDragSelectedEntities = true;
 1427    }
 428
 429    internal void EndDraggingSelectedEntities()
 430    {
 2431        if (wasGizmosActive && !isPlacingNewObject)
 432        {
 0433            gizmoManager.ShowGizmo();
 0434            saveController.TryToSave();
 435        }
 436
 2437        wasGizmosActive = false;
 438
 2439        freeCameraController.SetCameraCanMove(true);
 2440        isDraggingStarted = false;
 441
 2442        canDragSelectedEntities = false;
 2443    }
 444
 445    internal void EndBoundMultiSelection(Vector3 mousePosition)
 446    {
 1447        freeCameraController.SetCameraCanMove(true);
 448        List<BIWEntity> allEntities = null;
 449
 1450        allEntities = entityHandler.GetAllEntitiesFromCurrentScene();
 451
 1452        List<BIWEntity> selectedInsideBoundsEntities = new List<BIWEntity>();
 1453        int alreadySelectedEntities = 0;
 454
 1455        if (!isMultiSelectionActive)
 1456            entityHandler.DeselectEntities();
 457
 4458        foreach (BIWEntity entity in allEntities)
 459        {
 1460            if (entity.rootEntity.meshRootGameObject && entity.rootEntity.meshesInfo.renderers.Length > 0)
 461            {
 1462                if (BIWUtils.IsWithinSelectionBounds(entity.rootEntity.meshesInfo.mergedBounds.center, lastMousePosition
 463                    && !entity.isLocked)
 464                {
 1465                    if (entity.isSelected)
 0466                        alreadySelectedEntities++;
 467
 1468                    entityHandler.SelectEntity(entity);
 1469                    selectedInsideBoundsEntities.Add(entity);
 470                }
 471            }
 472        }
 473
 1474        if (selectedInsideBoundsEntities.Count == alreadySelectedEntities && alreadySelectedEntities > 0)
 475        {
 0476            foreach (BIWEntity entity in selectedInsideBoundsEntities)
 477            {
 0478                entityHandler.DeselectEntity(entity);
 479            }
 480        }
 481
 1482        outlinerController.CancelAllOutlines();
 1483    }
 484
 485    public override void Activate(IParcelScene scene)
 486    {
 50487        base.Activate(scene);
 50488        sceneToEdit = scene;
 489
 50490        if (activateCamera)
 50491            ActivateCamera(scene);
 492
 50493        if (gizmoManager.GetSelectedGizmo() == DCL.Components.DCLGizmos.Gizmo.NONE)
 43494            gizmoManager.SetGizmoType(BIWSettings.TRANSLATE_GIZMO_NAME);
 50495        mouseCatcher.enabled = false;
 50496        Environment.i.world.sceneController.IsolateScene(sceneToEdit);
 50497        Utils.UnlockCursor();
 498
 50499        gizmoManager.HideGizmo();
 50500        editionGO.transform.SetParent(null);
 50501        avatarRenderer.SetAvatarVisibility(false);
 502
 50503        HUDController.i.builderInWorldMainHud?.ActivateGodModeUI();
 8504    }
 505
 506    public void ActivateCamera(IParcelScene parcelScene)
 507    {
 51508        freeCameraController.gameObject.SetActive(true);
 51509        SetLookAtObject(parcelScene);
 510
 51511        Vector3 cameraPosition = GetInitialCameraPosition(parcelScene);
 51512        freeCameraController.SetPosition(cameraPosition);
 51513        freeCameraController.LookAt(lookAtTransform);
 51514        freeCameraController.SetResetConfiguration(cameraPosition, lookAtTransform);
 515
 51516        if (cameraController.currentCameraState.cameraModeId != CameraMode.ModeId.BuildingToolGodMode)
 8517            avatarCameraModeBeforeEditing = cameraController.currentCameraState.cameraModeId;
 518
 51519        cameraController.SetCameraMode(CameraMode.ModeId.BuildingToolGodMode);
 51520    }
 521
 522    public override void OnDeleteEntity(BIWEntity entity)
 523    {
 0524        base.OnDeleteEntity(entity);
 0525        saveController.TryToSave();
 526
 0527        if (selectedEntities.Count == 0)
 0528            gizmoManager.HideGizmo();
 0529    }
 530
 531    public override void OnDeselectedEntities()
 532    {
 0533        base.OnDeselectedEntities();
 0534        gizmoManager.SetSelectedEntities(editionGO.transform, new List<BIWEntity>());
 0535    }
 536
 537    public override void Deactivate()
 538    {
 7539        base.Deactivate();
 7540        mouseCatcher.enabled = true;
 7541        Utils.LockCursor();
 7542        cameraController.SetCameraMode(avatarCameraModeBeforeEditing);
 543
 7544        Environment.i.world.sceneController.ReIntegrateIsolatedScene();
 545
 7546        gizmoManager.HideGizmo();
 7547        RenderSettings.fog = true;
 7548        avatarRenderer.SetAvatarVisibility(true);
 7549    }
 550
 551    public override void StartMultiSelection()
 552    {
 1553        base.StartMultiSelection();
 554
 1555        snapGO.transform.SetParent(null);
 1556        freeMovementGO.transform.SetParent(null);
 1557    }
 558
 559    public override void SetDuplicationOffset(float offset)
 560    {
 0561        base.SetDuplicationOffset(offset);
 0562        editionGO.transform.position += Vector3.right * offset;
 0563    }
 564
 565    public override void CreatedEntity(BIWEntity createdEntity)
 566    {
 1567        base.CreatedEntity(createdEntity);
 568
 1569        if (!createdEntity.isFloor)
 570        {
 1571            isPlacingNewObject = true;
 1572            outlinerController.SetOutlineCheckActive(false);
 573
 1574            SetEditObjectAtMouse();
 575        }
 576
 1577        gizmoManager.HideGizmo();
 1578        if (createdEntity.isVoxel)
 0579            createdEntity.rootEntity.gameObject.tag = BIWSettings.VOXEL_TAG;
 1580    }
 581
 0582    public override Vector3 GetCreatedEntityPoint() { return raycastController.GetFloorPointAtMouse(Input.mousePosition)
 583
 584    public override void SelectedEntity(BIWEntity selectedEntity)
 585    {
 1586        base.SelectedEntity(selectedEntity);
 587
 1588        gizmoManager.SetSelectedEntities(editionGO.transform, selectedEntities);
 589
 1590        if (!isMultiSelectionActive && !selectedEntity.isNew)
 1591            TryLookAtEntity(selectedEntity.rootEntity);
 592
 1593        snapGO.transform.SetParent(null);
 594
 1595        UpdateActionsInteractable();
 1596    }
 597
 598    public override void EntityDeselected(BIWEntity entityDeselected)
 599    {
 1600        base.EntityDeselected(entityDeselected);
 1601        if (selectedEntities.Count <= 0)
 602        {
 0603            gizmoManager.HideGizmo();
 0604            UpdateActionsInteractable();
 605        }
 606
 1607        if (isPlacingNewObject)
 1608            outlinerController.SetOutlineCheckActive(true);
 1609        isPlacingNewObject = false;
 1610    }
 611
 612    public override void EntityDoubleClick(BIWEntity entity)
 613    {
 0614        base.EntityDoubleClick(entity);
 0615        if (!entity.isLocked)
 0616            LookAtEntity(entity.rootEntity);
 0617    }
 618
 619    private void UpdateActionsInteractable()
 620    {
 1621        bool areInteratable = selectedEntities.Count > 0;
 1622        if (HUDController.i.builderInWorldMainHud != null)
 0623            HUDController.i.builderInWorldMainHud.SetActionsButtonsInteractable(areInteratable);
 1624    }
 625
 626    public override bool ShouldCancelUndoAction()
 627    {
 1628        if (isPlacingNewObject)
 629        {
 1630            entityHandler.DestroyLastCreatedEntities();
 1631            isPlacingNewObject = false;
 1632            return true;
 633        }
 634
 0635        return false;
 636    }
 637
 638    public override void SetSnapActive(bool isActive)
 639    {
 56640        base.SetSnapActive(isActive);
 641
 56642        if (isSnapActiveValue)
 643        {
 3644            gizmoManager.SetSnapFactor(snapFactor, snapRotationDegresFactor, snapScaleFactor);
 3645        }
 646        else
 647        {
 53648            gizmoManager.SetSnapFactor(0, 0, 0);
 649        }
 53650    }
 651
 652    public void FocusOnSelectedEntitiesInput()
 653    {
 0654        if (isModeActive)
 655        {
 0656            FocusEntities(selectedEntities);
 0657            InputDone();
 658        }
 0659    }
 660
 661    public void TryLookAtEntity(IDCLEntity entity)
 662    {
 1663        if (entity.meshRootGameObject == null
 664            || entity.meshesInfo == null
 665            || BIWUtils.IsBoundInsideCamera(entity.meshesInfo.mergedBounds))
 1666            return;
 667
 0668        LookAtEntity(entity);
 0669    }
 670
 671    public void LookAtEntity(IDCLEntity entity)
 672    {
 1673        Vector3 pointToLook = entity.gameObject.transform.position;
 1674        if (entity.meshesInfo != null && entity.meshesInfo.renderers.Length > 0)
 0675            pointToLook = CalculateEntityMidPoint(entity);
 676
 1677        freeCameraController.SmoothLookAt(pointToLook);
 1678    }
 679
 680    internal Vector3 CalculateEntityMidPoint(IDCLEntity entity)
 681    {
 1682        Vector3 midPointFromEntityMesh = Vector3.zero;
 4683        foreach (Renderer render in entity.renderers)
 684        {
 1685            if (render == null)
 686                continue;
 1687            midPointFromEntityMesh += render.bounds.center;
 688        }
 689
 1690        midPointFromEntityMesh /= entity.renderers.Length;
 1691        return midPointFromEntityMesh;
 692    }
 693
 694    #region Gizmos
 695
 12696    public void TranslateMode() { GizmosMode( BIWSettings.TRANSLATE_GIZMO_NAME); }
 697
 8698    public void RotateMode() { GizmosMode( BIWSettings.ROTATE_GIZMO_NAME); }
 699
 4700    public void ScaleMode() { GizmosMode( BIWSettings.SCALE_GIZMO_NAME); }
 701
 702    private void GizmosMode(string gizmos)
 703    {
 12704        if ((!isModeActive && isPlacingNewObject) || mouseSecondaryBtnPressed)
 0705            return;
 12706        if (gizmoManager.GetSelectedGizmo() != gizmos)
 707        {
 7708            HUDController.i.builderInWorldMainHud?.SetGizmosActive(gizmos);
 7709            gizmoManager.SetGizmoType(gizmos);
 7710            if (selectedEntities.Count > 0 )
 0711                gizmoManager.ShowGizmo();
 712        }
 713        //TODO: Free-Movement tool, This could be re-enabled in the future so let the code there
 714        // else
 715        // {
 716        //     gizmoManager.HideGizmo(true);
 717        //     HUDController.i.builderInWorldMainHud?.SetGizmosActive(BIWSettings.EMPTY_GIZMO_NAME);
 718        // }
 12719    }
 720
 721    internal void OnGizmosTransformStart(string gizmoType)
 722    {
 2723        outlinerController.SetOutlineCheckActive(false);
 8724        foreach (BIWEntity entity in selectedEntities)
 725        {
 2726            TransformActionStarted(entity.rootEntity, gizmoType);
 727        }
 2728    }
 729
 730    internal void OnGizmosTransformEnd(string gizmoType)
 731    {
 1732        outlinerController.SetOutlineCheckActive(true);
 4733        foreach (BIWEntity entity in selectedEntities)
 734        {
 1735            TransformActionEnd(entity.rootEntity, gizmoType);
 736        }
 737
 738        switch (gizmoType)
 739        {
 740            case BIWSettings.TRANSLATE_GIZMO_NAME:
 741
 1742                ActionFinish(BIWCompleteAction.ActionType.MOVE);
 1743                break;
 744            case BIWSettings.ROTATE_GIZMO_NAME:
 0745                ActionFinish(BIWCompleteAction.ActionType.ROTATE);
 0746                break;
 747            case BIWSettings.SCALE_GIZMO_NAME:
 0748                ActionFinish(BIWCompleteAction.ActionType.SCALE);
 749                break;
 750        }
 751
 1752        saveController.TryToSave();
 1753    }
 754
 755    #endregion
 756
 2757    public void FocusEntities(List<BIWEntity> entitiesToFocus) { freeCameraController.FocusOnEntities(entitiesToFocus); 
 758
 759    internal Vector3 GetInitialCameraPosition(IParcelScene parcelScene)
 760    {
 51761        Vector3 middlePoint = BIWUtils.CalculateUnityMiddlePoint(parcelScene);
 51762        Vector3 direction = (parcelScene.GetSceneTransform().position - middlePoint).normalized;
 763
 51764        return parcelScene.GetSceneTransform().position
 765               + direction * initialEagleCameraDistance
 766               + Vector3.up * initialEagleCameraHeight;
 767    }
 768
 769    internal void SetLookAtObject(IParcelScene parcelScene)
 770    {
 51771        Vector3 middlePoint = BIWUtils.CalculateUnityMiddlePoint(parcelScene);
 51772        lookAtTransform.position = middlePoint + Vector3.up * initialEagleCameraLookAtHeight;
 51773    }
 774
 775    internal void SetEditObjectAtMouse()
 776    {
 1777        if (raycastController.RayCastFloor(out Vector3 destination))
 778        {
 1779            if (isSnapActiveValue)
 780            {
 0781                destination.x = Mathf.Round(destination.x / snapDragFactor) * snapDragFactor;
 0782                destination.z = Mathf.Round(destination.z / snapDragFactor) * snapDragFactor;
 783            }
 784
 1785            editionGO.transform.position = destination;
 786
 1787            if (selectedEntities.Count > 0 && selectedEntities[0].isNFT)
 0788                editionGO.transform.position += Vector3.up * 2f;
 789        }
 1790    }
 791
 2792    internal void ResetCamera() { freeCameraController.ResetCameraPosition(); }
 793
 794    internal void TakeSceneScreenshotForPublish()
 795    {
 1796        entityHandler.DeselectEntities();
 797
 1798        freeCameraController.TakeSceneScreenshot((sceneSnapshot) =>
 799        {
 0800            HUDController.i.builderInWorldMainHud?.SetBuilderProjectScreenshot(sceneSnapshot);
 0801        });
 1802    }
 803
 804    public void TakeSceneScreenshotForExit()
 805    {
 2806        entityHandler.DeselectEntities();
 807
 2808        freeCameraController.TakeSceneScreenshotFromResetPosition((sceneSnapshot) =>
 809        {
 0810            HUDController.i.builderInWorldMainHud?.SetBuilderProjectScreenshot(sceneSnapshot);
 0811        });
 2812    }
 813
 814    public void OpenNewProjectDetails()
 815    {
 1816        entityHandler.DeselectEntities();
 817
 1818        freeCameraController.TakeSceneScreenshot((sceneSnapshot) =>
 819        {
 0820            HUDController.i.builderInWorldMainHud?.NewProjectStart(sceneSnapshot);
 0821        });
 1822    }
 823}

Methods/Properties

BIWGodMode()
Init(BIWContext)
Dispose()
Update()
OnGUI()
CheckOutlineEntitiesInSquareSelection(UnityEngine.Vector3)
ChangeSnapTemporaryDeactivated()
ChangeSnapTemporaryActivated()
EntitiesTransfromByGizmos(UnityEngine.Vector3)
UpdateSelectionPosition(UnityEngine.Vector3)
UpdateSelectionRotation(UnityEngine.Vector3)
UpdateSelectionScale(UnityEngine.Vector3)
DragEditionGameObject(UnityEngine.Vector3)
MouseClickDetected()
OnInputMouseDrag(System.Int32, UnityEngine.Vector3, System.Single, System.Single)
GetPositionRoundedToSnapFactor(UnityEngine.Vector3)
OnInputMouseUpOnUi(System.Int32, UnityEngine.Vector3)
OnInputMouseUp(System.Int32, UnityEngine.Vector3)
OnInputMouseDown(System.Int32, UnityEngine.Vector3)
CheckEndBoundMultiselection(UnityEngine.Vector3)
CanCancelAction(UnityEngine.Vector3)
StarDraggingSelectedEntities()
EndDraggingSelectedEntities()
EndBoundMultiSelection(UnityEngine.Vector3)
Activate(DCL.Controllers.IParcelScene)
ActivateCamera(DCL.Controllers.IParcelScene)
OnDeleteEntity(BIWEntity)
OnDeselectedEntities()
Deactivate()
StartMultiSelection()
SetDuplicationOffset(System.Single)
CreatedEntity(BIWEntity)
GetCreatedEntityPoint()
SelectedEntity(BIWEntity)
EntityDeselected(BIWEntity)
EntityDoubleClick(BIWEntity)
UpdateActionsInteractable()
ShouldCancelUndoAction()
SetSnapActive(System.Boolean)
FocusOnSelectedEntitiesInput()
TryLookAtEntity(DCL.Models.IDCLEntity)
LookAtEntity(DCL.Models.IDCLEntity)
CalculateEntityMidPoint(DCL.Models.IDCLEntity)
TranslateMode()
RotateMode()
ScaleMode()
GizmosMode(System.String)
OnGizmosTransformStart(System.String)
OnGizmosTransformEnd(System.String)
FocusEntities(System.Collections.Generic.List[BIWEntity])
GetInitialCameraPosition(DCL.Controllers.IParcelScene)
SetLookAtObject(DCL.Controllers.IParcelScene)
SetEditObjectAtMouse()
ResetCamera()
TakeSceneScreenshotForPublish()
TakeSceneScreenshotForExit()
OpenNewProjectDetails()