< Summary

Class:BIWModeController
Assembly:BuilderInWorld
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/DCLPlugins/BuilderInWorld/Scripts/Controllers/BIWModeController.cs
Covered lines:77
Uncovered lines:52
Coverable lines:129
Total lines:277
Line coverage:59.6% (77 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%2100%
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%10.378066.67%

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;
 28815    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    {
 3237        base.Initialize(context);
 38
 3239        cursorGO = context.sceneReferences.cursorCanvas;
 3240        cameraParentGO = context.sceneReferences.biwCameraParent;
 3241        InitGameObjects();
 42
 3243        firstPersonMode = new BIWFirstPersonMode();
 3244        godMode = new BIWGodMode();
 45
 3246        firstPersonMode.Init(context);
 3247        godMode.Init(context);
 48
 3249        firstPersonMode.OnInputDone += InputDone;
 3250        godMode.OnInputDone += InputDone;
 51
 3252        if ( context.editorContext.editorHUD != null)
 53        {
 3254            context.editorContext.editorHUD.OnChangeModeAction += ChangeAdvanceMode;
 3255            context.editorContext.editorHUD.OnResetAction += ResetScaleAndRotation;
 3256            context.editorContext.editorHUD.OnChangeSnapModeAction += ChangeSnapMode;
 57        }
 58
 3259        actionController = context.editorContext.actionController;
 3260        entityHandler = context.editorContext.entityHandler;
 3261        toggleSnapModeInputAction = context.inputsReferencesAsset.toggleSnapModeInputAction;
 62
 3263        snapModeDelegate = (action) => ChangeSnapMode();
 3264        toggleSnapModeInputAction.OnTriggered += snapModeDelegate;
 65
 3266        firstPersonMode.OnActionGenerated += actionController.AddAction;
 3267        godMode.OnActionGenerated += actionController.AddAction;
 68
 3269        SetEditorGameObjects();
 3270    }
 71
 72    public override void Dispose()
 73    {
 3274        base.Dispose();
 75
 3276        toggleSnapModeInputAction.OnTriggered -= snapModeDelegate;
 77
 3278        firstPersonMode.OnInputDone -= InputDone;
 3279        godMode.OnInputDone -= InputDone;
 80
 3281        firstPersonMode.OnActionGenerated -= actionController.AddAction;
 3282        godMode.OnActionGenerated -= actionController.AddAction;
 83
 3284        firstPersonMode.Dispose();
 3285        godMode.Dispose();
 86
 3287        if ( context.editorContext.editorHUD != null)
 88        {
 3289            context.editorContext.editorHUD.OnChangeModeAction -= ChangeAdvanceMode;
 3290            context.editorContext.editorHUD.OnResetAction -= ResetScaleAndRotation;
 91        }
 92
 3293        GameObject.Destroy(undoGO);
 3294        GameObject.Destroy(snapGO);
 3295        GameObject.Destroy(editionGO);
 3296        GameObject.Destroy(freeMovementGO);
 3297    }
 98
 99    private void SetEditorGameObjects()
 100    {
 32101        godMode.SetEditorReferences(editionGO, undoGO, snapGO, freeMovementGO, entityHandler.GetSelectedEntityList());
 32102        firstPersonMode.SetEditorReferences(editionGO, undoGO, snapGO, freeMovementGO, entityHandler.GetSelectedEntityLi
 32103    }
 104
 105    private void InitGameObjects()
 106    {
 32107        if (snapGO == null)
 32108            snapGO = new GameObject("SnapGameObject");
 109
 32110        if (freeMovementGO == null)
 32111            freeMovementGO = new GameObject("FreeMovementGO");
 112
 32113        freeMovementGO.transform.SetParent(cameraParentGO.transform);
 114
 32115        if (editionGO == null)
 32116            editionGO = new GameObject("EditionGO");
 117
 32118        editionGO.transform.SetParent(cameraParentGO.transform);
 119
 32120        if (undoGO == null)
 32121            undoGO = new GameObject("UndoGameObject");
 32122    }
 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    {
 32163        base.EnterEditMode(scene);
 32164        if (currentActiveMode == null)
 32165            SetBuildMode(IBIWModeController.EditModeState.GodMode);
 32166    }
 167
 168    public override void ExitEditMode()
 169    {
 0170        base.ExitEditMode();
 0171        SetBuildMode(IBIWModeController.EditModeState.Inactive);
 0172        snapGO.transform.SetParent(null);
 0173    }
 174
 32175    public BIWMode GetCurrentMode() => currentActiveMode;
 176
 0177    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    {
 32243        IBIWModeController.EditModeState previousState = currentEditModeState;
 244
 32245        if (currentActiveMode != null)
 0246            currentActiveMode.Deactivate();
 247
 32248        currentActiveMode = null;
 249        switch (state)
 250        {
 251            case IBIWModeController.EditModeState.Inactive:
 252                break;
 253            case IBIWModeController.EditModeState.FirstPerson:
 0254                currentActiveMode = firstPersonMode;
 255
 0256                if (cursorGO != null)
 0257                    cursorGO.SetActive(true);
 0258                break;
 259            case IBIWModeController.EditModeState.GodMode:
 32260                if (cursorGO != null)
 32261                    cursorGO.SetActive(false);
 32262                currentActiveMode = godMode;
 263                break;
 264        }
 265
 32266        currentEditModeState = state;
 267
 32268        if (currentActiveMode != null)
 269        {
 32270            currentActiveMode.Activate(sceneToEdit);
 32271            currentActiveMode.SetSnapActive(isSnapActive);
 32272            entityHandler.SetActiveMode(currentActiveMode);
 273        }
 274
 32275        OnChangedEditModeState?.Invoke(previousState, state);
 0276    }
 277}