< Summary

Class:BIWModeController
Assembly:BuilderInWorld
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/DCLPlugins/BuilderInWorld/Scripts/Controllers/BIWModeController.cs
Covered lines:83
Uncovered lines:46
Coverable lines:129
Total lines:277
Line coverage:64.3% (83 of 129)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
Initialize(...)0%220100%
Dispose()0%220100%
SetEditorGameObjects()0%110100%
InitGameObjects()0%550100%
IsGodModeActive()0%2100%
GetCurrentEditionPosition()0%6200%
UndoEditionGOLastStep()0%12300%
OnGUI()0%2100%
Update()0%2100%
LateUpdate()0%2100%
EnterEditMode(...)0%220100%
ExitEditMode()0%2100%
GetCurrentMode()0%110100%
GetCurrentStateMode()0%110100%
InputDone()0%6200%
StartMultiSelection()0%2100%
EndMultiSelection()0%2100%
ResetScaleAndRotation()0%2100%
CheckInput()0%6200%
CheckInputSelectedEntities()0%2100%
ShouldCancelUndoAction()0%2100%
CreatedEntity(...)0%220100%
GetMaxDistanceToSelectEntities()0%110100%
EntityDoubleClick(...)0%2100%
GetMousePosition()0%110100%
GetModeCreationEntryPoint()0%6200%
MouseClickDetected()0%6200%
ChangeSnapMode()0%6200%
SetSnapActive(...)0%110100%
ChangeAdvanceMode()0%6200%
SetBuildMode(...)0%8.018094.44%

File(s)

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

#LineLine coverage
 1using System;
 2using DCL.Builder;
 3using UnityEngine;
 4
 5public class BIWModeController : BIWController, IBIWModeController
 6{
 7
 8    private GameObject cursorGO;
 9    private GameObject cameraParentGO;
 10
 11    private IBIWActionController actionController;
 12    private IBIWEntityHandler entityHandler;
 13
 14    private BIWFirstPersonMode firstPersonMode;
 31715    public BIWGodMode godMode { get; set; }
 16
 17    private InputAction_Trigger toggleSnapModeInputAction;
 18
 19    public event Action OnInputDone;
 20    public event Action<IBIWModeController.EditModeState, IBIWModeController.EditModeState> OnChangedEditModeState;
 21
 22    private IBIWModeController.EditModeState currentEditModeState = IBIWModeController.EditModeState.Inactive;
 23
 24    private BIWMode currentActiveMode;
 25
 26    private bool isSnapActive = false;
 27
 28    private InputAction_Trigger.Triggered snapModeDelegate;
 29
 30    private GameObject editionGO;
 31    private GameObject undoGO;
 32    private GameObject snapGO;
 33    private GameObject freeMovementGO;
 34
 35    public override void Initialize(IContext context)
 36    {
 3537        base.Initialize(context);
 38
 3539        cursorGO = context.sceneReferences.cursorCanvas;
 3540        cameraParentGO = context.sceneReferences.biwCameraParent;
 3541        InitGameObjects();
 42
 3543        firstPersonMode = new BIWFirstPersonMode();
 3544        godMode = new BIWGodMode();
 45
 3546        firstPersonMode.Init(context);
 3547        godMode.Init(context);
 48
 3549        firstPersonMode.OnInputDone += InputDone;
 3550        godMode.OnInputDone += InputDone;
 51
 3552        if ( context.editorContext.editorHUD != null)
 53        {
 3554            context.editorContext.editorHUD.OnChangeModeAction += ChangeAdvanceMode;
 3555            context.editorContext.editorHUD.OnResetAction += ResetScaleAndRotation;
 3556            context.editorContext.editorHUD.OnChangeSnapModeAction += ChangeSnapMode;
 57        }
 58
 3559        actionController = context.editorContext.actionController;
 3560        entityHandler = context.editorContext.entityHandler;
 3561        toggleSnapModeInputAction = context.inputsReferencesAsset.toggleSnapModeInputAction;
 62
 3563        snapModeDelegate = (action) => ChangeSnapMode();
 3564        toggleSnapModeInputAction.OnTriggered += snapModeDelegate;
 65
 3566        firstPersonMode.OnActionGenerated += actionController.AddAction;
 3567        godMode.OnActionGenerated += actionController.AddAction;
 68
 3569        SetEditorGameObjects();
 3570    }
 71
 72    public override void Dispose()
 73    {
 3574        base.Dispose();
 75
 3576        toggleSnapModeInputAction.OnTriggered -= snapModeDelegate;
 77
 3578        firstPersonMode.OnInputDone -= InputDone;
 3579        godMode.OnInputDone -= InputDone;
 80
 3581        firstPersonMode.OnActionGenerated -= actionController.AddAction;
 3582        godMode.OnActionGenerated -= actionController.AddAction;
 83
 3584        firstPersonMode.Dispose();
 3585        godMode.Dispose();
 86
 3587        if ( context.editorContext.editorHUD != null)
 88        {
 3589            context.editorContext.editorHUD.OnChangeModeAction -= ChangeAdvanceMode;
 3590            context.editorContext.editorHUD.OnResetAction -= ResetScaleAndRotation;
 91        }
 92
 3593        GameObject.Destroy(undoGO);
 3594        GameObject.Destroy(snapGO);
 3595        GameObject.Destroy(editionGO);
 3596        GameObject.Destroy(freeMovementGO);
 3597    }
 98
 99    private void SetEditorGameObjects()
 100    {
 35101        godMode.SetEditorReferences(editionGO, undoGO, snapGO, freeMovementGO, entityHandler.GetSelectedEntityList());
 35102        firstPersonMode.SetEditorReferences(editionGO, undoGO, snapGO, freeMovementGO, entityHandler.GetSelectedEntityLi
 35103    }
 104
 105    private void InitGameObjects()
 106    {
 35107        if (snapGO == null)
 35108            snapGO = new GameObject("SnapGameObject");
 109
 35110        if (freeMovementGO == null)
 35111            freeMovementGO = new GameObject("FreeMovementGO");
 112
 35113        freeMovementGO.transform.SetParent(cameraParentGO.transform);
 114
 35115        if (editionGO == null)
 35116            editionGO = new GameObject("EditionGO");
 117
 35118        editionGO.transform.SetParent(cameraParentGO.transform);
 119
 35120        if (undoGO == null)
 35121            undoGO = new GameObject("UndoGameObject");
 35122    }
 123
 0124    public bool IsGodModeActive() { return currentEditModeState == IBIWModeController.EditModeState.GodMode; }
 125
 126    public Vector3 GetCurrentEditionPosition()
 127    {
 0128        if (editionGO != null)
 0129            return editionGO.transform.position;
 130        else
 0131            return Vector3.zero;
 132    }
 133
 134    public void UndoEditionGOLastStep()
 135    {
 0136        if (undoGO == null || editionGO == null)
 0137            return;
 138
 0139        BIWUtils.CopyGameObjectStatus(undoGO, editionGO, false, false);
 0140    }
 141
 142    public override void OnGUI()
 143    {
 0144        base.OnGUI();
 0145        godMode.OnGUI();
 0146    }
 147
 148    public override void Update()
 149    {
 0150        base.Update();
 0151        godMode.Update();
 0152        firstPersonMode.Update();
 0153    }
 154
 155    public override void LateUpdate()
 156    {
 0157        base.LateUpdate();
 0158        firstPersonMode.LateUpdate();
 0159    }
 160
 161    public override void EnterEditMode(IBuilderScene scene)
 162    {
 35163        base.EnterEditMode(scene);
 35164        if (currentActiveMode == null)
 35165            SetBuildMode(IBIWModeController.EditModeState.GodMode);
 35166    }
 167
 168    public override void ExitEditMode()
 169    {
 0170        base.ExitEditMode();
 0171        SetBuildMode(IBIWModeController.EditModeState.Inactive);
 0172        snapGO.transform.SetParent(null);
 0173    }
 174
 35175    public BIWMode GetCurrentMode() => currentActiveMode;
 176
 3177    public IBIWModeController.EditModeState GetCurrentStateMode() => currentEditModeState;
 178
 0179    private void InputDone() { OnInputDone?.Invoke(); }
 180
 0181    public void StartMultiSelection() { currentActiveMode.StartMultiSelection(); }
 182
 0183    public void EndMultiSelection() { currentActiveMode.EndMultiSelection(); }
 184
 0185    public void ResetScaleAndRotation() { currentActiveMode.ResetScaleAndRotation(); }
 186
 0187    public void CheckInput() { currentActiveMode?.CheckInput(); }
 188
 0189    public void CheckInputSelectedEntities() { currentActiveMode.CheckInputSelectedEntities(); }
 190
 0191    public bool ShouldCancelUndoAction() { return currentActiveMode.ShouldCancelUndoAction(); }
 192
 2193    public void CreatedEntity(BIWEntity entity) { currentActiveMode?.CreatedEntity(entity); }
 194
 1195    public float GetMaxDistanceToSelectEntities() { return currentActiveMode.maxDistanceToSelectEntities; }
 196
 0197    public void EntityDoubleClick(BIWEntity entity) {  currentActiveMode.EntityDoubleClick(entity); }
 198
 1199    public Vector3 GetMousePosition() { return currentActiveMode.GetPointerPosition(); }
 200
 201    public Vector3 GetModeCreationEntryPoint()
 202    {
 0203        if (currentActiveMode != null)
 0204            return currentActiveMode.GetCreatedEntityPoint();
 0205        return Vector3.zero;
 206    }
 207
 0208    public void MouseClickDetected() { currentActiveMode?.MouseClickDetected(); }
 209
 210    private void ChangeSnapMode()
 211    {
 0212        SetSnapActive(!isSnapActive);
 0213        InputDone();
 214
 0215        if (isSnapActive)
 0216            AudioScriptableObjects.enable.Play();
 217        else
 0218            AudioScriptableObjects.disable.Play();
 0219    }
 220
 221    public void SetSnapActive(bool isActive)
 222    {
 2223        isSnapActive = isActive;
 2224        currentActiveMode.SetSnapActive(isActive);
 2225    }
 226
 227    public void ChangeAdvanceMode()
 228    {
 0229        if (currentEditModeState == IBIWModeController.EditModeState.GodMode)
 230        {
 0231            SetBuildMode(IBIWModeController.EditModeState.FirstPerson);
 232        }
 233        else
 234        {
 0235            SetBuildMode(IBIWModeController.EditModeState.GodMode);
 236        }
 237
 0238        InputDone();
 0239    }
 240
 241    public void SetBuildMode(IBIWModeController.EditModeState state)
 242    {
 41243        IBIWModeController.EditModeState previousState = currentEditModeState;
 244
 41245        if (currentActiveMode != null)
 4246            currentActiveMode.Deactivate();
 247
 41248        currentActiveMode = null;
 249        switch (state)
 250        {
 251            case IBIWModeController.EditModeState.Inactive:
 252                break;
 253            case IBIWModeController.EditModeState.FirstPerson:
 1254                currentActiveMode = firstPersonMode;
 255
 1256                if (cursorGO != null)
 1257                    cursorGO.SetActive(true);
 1258                break;
 259            case IBIWModeController.EditModeState.GodMode:
 37260                if (cursorGO != null)
 37261                    cursorGO.SetActive(false);
 37262                currentActiveMode = godMode;
 263                break;
 264        }
 265
 41266        currentEditModeState = state;
 267
 41268        if (currentActiveMode != null)
 269        {
 38270            currentActiveMode.Activate(sceneToEdit);
 38271            currentActiveMode.SetSnapActive(isSnapActive);
 38272            entityHandler.SetActiveMode(currentActiveMode);
 273        }
 274
 41275        OnChangedEditModeState?.Invoke(previousState, state);
 0276    }
 277}