< Summary

Class:BIWModeController
Assembly:BuilderInWorld
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/BuilderMode/Controllers/BIWModeController.cs
Covered lines:101
Uncovered lines:31
Coverable lines:132
Total lines:319
Line coverage:76.5% (101 of 132)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
Init(...)0%220100%
Dispose()0%220100%
ActivateCamera(...)0%110100%
TakeSceneScreenshotForExit()0%110100%
OpenNewProjectDetails()0%2100%
SetEditorGameObjects()0%110100%
InitGameObjects()0%550100%
IsGodModeActive()0%110100%
GetCurrentEditionPosition()0%2.152066.67%
UndoEditionGOLastStep()0%12300%
OnGUI()0%110100%
Update()0%110100%
LateUpdate()0%110100%
EnterEditMode(...)0%220100%
ExitEditMode()0%110100%
GetCurrentMode()0%2100%
GetCurrentStateMode()0%2100%
InputDone()0%6200%
StartMultiSelection()0%2100%
EndMultiSelection()0%2100%
ResetScaleAndRotation()0%2100%
CheckInput()0%220100%
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%880100%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/BuilderMode/Controllers/BIWModeController.cs

#LineLine coverage
 1using DCL.Controllers;
 2using System;
 3using System.Collections;
 4using System.Collections.Generic;
 5using DCL;
 6using UnityEngine;
 7
 8public interface IBIWModeController
 9{
 10    event Action<BIWModeController.EditModeState, BIWModeController.EditModeState> OnChangedEditModeState;
 11    event Action OnInputDone;
 12    Vector3 GetCurrentEditionPosition();
 13    void CreatedEntity(BIWEntity entity);
 14
 15    float GetMaxDistanceToSelectEntities() ;
 16
 17    void EntityDoubleClick(BIWEntity entity);
 18
 19    Vector3 GetMousePosition();
 20
 21    Vector3 GetModeCreationEntryPoint();
 22    bool IsGodModeActive();
 23    void UndoEditionGOLastStep();
 24    void StartMultiSelection();
 25
 26    void EndMultiSelection();
 27    void CheckInput();
 28
 29    void CheckInputSelectedEntities();
 30
 31    bool ShouldCancelUndoAction();
 32    void MouseClickDetected();
 33    void TakeSceneScreenshotForExit();
 34}
 35
 36public class BIWModeController : BIWController, IBIWModeController
 37{
 38    public enum EditModeState
 39    {
 40        Inactive = 0,
 41        FirstPerson = 1,
 42        GodMode = 2
 43    }
 44
 45    private GameObject cursorGO;
 46    private GameObject cameraParentGO;
 47
 48    private IBIWActionController actionController;
 49    private IBIWEntityHandler entityHandler;
 50
 51    private BIWFirstPersonMode firstPersonMode;
 52    internal BIWGodMode godMode;
 53
 54    private InputAction_Trigger toggleSnapModeInputAction;
 55
 56    public event Action OnInputDone;
 57    public event Action<EditModeState, EditModeState> OnChangedEditModeState;
 58
 59    private EditModeState currentEditModeState = EditModeState.Inactive;
 60
 61    private BIWMode currentActiveMode;
 62
 63    private bool isSnapActive = false;
 64
 65    private InputAction_Trigger.Triggered snapModeDelegate;
 66
 67    private GameObject editionGO;
 68    private GameObject undoGO;
 69    private GameObject snapGO;
 70    private GameObject freeMovementGO;
 71
 72    public override void Init(BIWContext context)
 73    {
 6474        base.Init(context);
 75
 6476        cursorGO = context.sceneReferences.cursorCanvas;
 6477        cameraParentGO = context.sceneReferences.cameraParent;
 6478        InitGameObjects();
 79
 6480        firstPersonMode = new BIWFirstPersonMode();
 6481        godMode = new BIWGodMode();
 82
 6483        firstPersonMode.Init(context);
 6484        godMode.Init(context);
 85
 6486        firstPersonMode.OnInputDone += InputDone;
 6487        godMode.OnInputDone += InputDone;
 88
 6489        if (HUDController.i.builderInWorldMainHud != null)
 90        {
 2691            HUDController.i.builderInWorldMainHud.OnChangeModeAction += ChangeAdvanceMode;
 2692            HUDController.i.builderInWorldMainHud.OnResetAction += ResetScaleAndRotation;
 2693            HUDController.i.builderInWorldMainHud.OnChangeSnapModeAction += ChangeSnapMode;
 94        }
 95
 6496        actionController = context.actionController;
 6497        entityHandler = context.entityHandler;
 6498        toggleSnapModeInputAction = context.inputsReferencesAsset.toggleSnapModeInputAction;
 99
 64100        snapModeDelegate = (action) => ChangeSnapMode();
 64101        toggleSnapModeInputAction.OnTriggered += snapModeDelegate;
 102
 64103        firstPersonMode.OnActionGenerated += actionController.AddAction;
 64104        godMode.OnActionGenerated += actionController.AddAction;
 105
 64106        SetEditorGameObjects();
 64107    }
 108
 109    public override void Dispose()
 110    {
 65111        base.Dispose();
 112
 65113        toggleSnapModeInputAction.OnTriggered -= snapModeDelegate;
 114
 65115        firstPersonMode.OnInputDone -= InputDone;
 65116        godMode.OnInputDone -= InputDone;
 117
 65118        firstPersonMode.OnActionGenerated -= actionController.AddAction;
 65119        godMode.OnActionGenerated -= actionController.AddAction;
 120
 65121        firstPersonMode.Dispose();
 65122        godMode.Dispose();
 123
 65124        if (HUDController.i.builderInWorldMainHud != null)
 125        {
 27126            HUDController.i.builderInWorldMainHud.OnChangeModeAction -= ChangeAdvanceMode;
 27127            HUDController.i.builderInWorldMainHud.OnResetAction -= ResetScaleAndRotation;
 128        }
 129
 65130        GameObject.Destroy(undoGO);
 65131        GameObject.Destroy(snapGO);
 65132        GameObject.Destroy(editionGO);
 65133        GameObject.Destroy(freeMovementGO);
 65134    }
 135
 2136    public void ActivateCamera(ParcelScene sceneToLook) { godMode.ActivateCamera(sceneToLook); }
 137
 2138    public void TakeSceneScreenshotForExit() { godMode.TakeSceneScreenshotForExit(); }
 139
 0140    public void OpenNewProjectDetails() { godMode.OpenNewProjectDetails(); }
 141
 142    private void SetEditorGameObjects()
 143    {
 64144        godMode.SetEditorReferences(editionGO, undoGO, snapGO, freeMovementGO, entityHandler.GetSelectedEntityList());
 64145        firstPersonMode.SetEditorReferences(editionGO, undoGO, snapGO, freeMovementGO, entityHandler.GetSelectedEntityLi
 64146    }
 147
 148    private void InitGameObjects()
 149    {
 64150        if (snapGO == null)
 64151            snapGO = new GameObject("SnapGameObject");
 152
 64153        if (freeMovementGO == null)
 64154            freeMovementGO = new GameObject("FreeMovementGO");
 155
 64156        freeMovementGO.transform.SetParent(cameraParentGO.transform);
 157
 64158        if (editionGO == null)
 64159            editionGO = new GameObject("EditionGO");
 160
 64161        editionGO.transform.SetParent(cameraParentGO.transform);
 162
 64163        if (undoGO == null)
 64164            undoGO = new GameObject("UndoGameObject");
 64165    }
 166
 2167    public bool IsGodModeActive() { return currentEditModeState == EditModeState.GodMode; }
 168
 169    public Vector3 GetCurrentEditionPosition()
 170    {
 1171        if (editionGO != null)
 1172            return editionGO.transform.position;
 173        else
 0174            return Vector3.zero;
 175    }
 176
 177    public void UndoEditionGOLastStep()
 178    {
 0179        if (undoGO == null || editionGO == null)
 0180            return;
 181
 0182        BIWUtils.CopyGameObjectStatus(undoGO, editionGO, false, false);
 0183    }
 184
 185    public override void OnGUI()
 186    {
 1187        base.OnGUI();
 1188        godMode.OnGUI();
 1189    }
 190
 191    public override void Update()
 192    {
 2193        base.Update();
 2194        godMode.Update();
 2195        firstPersonMode.Update();
 2196    }
 197
 198    public override void LateUpdate()
 199    {
 1200        base.LateUpdate();
 1201        firstPersonMode.LateUpdate();
 1202    }
 203
 204    public override void EnterEditMode(ParcelScene scene)
 205    {
 45206        base.EnterEditMode(scene);
 45207        if (currentActiveMode == null)
 45208            SetBuildMode(EditModeState.GodMode);
 45209    }
 210
 211    public override void ExitEditMode()
 212    {
 4213        base.ExitEditMode();
 4214        SetBuildMode(EditModeState.Inactive);
 4215        snapGO.transform.SetParent(null);
 4216    }
 217
 0218    public BIWMode GetCurrentMode() => currentActiveMode;
 219
 0220    public EditModeState GetCurrentStateMode() => currentEditModeState;
 221
 0222    private void InputDone() { OnInputDone?.Invoke(); }
 223
 0224    public void StartMultiSelection() { currentActiveMode.StartMultiSelection(); }
 225
 0226    public void EndMultiSelection() { currentActiveMode.EndMultiSelection(); }
 227
 0228    public void ResetScaleAndRotation() { currentActiveMode.ResetScaleAndRotation(); }
 229
 3230    public void CheckInput() { currentActiveMode?.CheckInput(); }
 231
 0232    public void CheckInputSelectedEntities() { currentActiveMode.CheckInputSelectedEntities(); }
 233
 0234    public bool ShouldCancelUndoAction() { return currentActiveMode.ShouldCancelUndoAction(); }
 235
 3236    public void CreatedEntity(BIWEntity entity) { currentActiveMode?.CreatedEntity(entity); }
 237
 1238    public float GetMaxDistanceToSelectEntities() { return currentActiveMode.maxDistanceToSelectEntities; }
 239
 0240    public void EntityDoubleClick(BIWEntity entity) {  currentActiveMode.EntityDoubleClick(entity); }
 241
 1242    public Vector3 GetMousePosition() { return currentActiveMode.GetPointerPosition(); }
 243
 244    public Vector3 GetModeCreationEntryPoint()
 245    {
 0246        if (currentActiveMode != null)
 0247            return currentActiveMode.GetCreatedEntityPoint();
 0248        return Vector3.zero;
 249    }
 250
 0251    public void MouseClickDetected() { currentActiveMode?.MouseClickDetected(); }
 252
 253    private void ChangeSnapMode()
 254    {
 0255        SetSnapActive(!isSnapActive);
 0256        InputDone();
 257
 0258        if (isSnapActive)
 0259            AudioScriptableObjects.enable.Play();
 260        else
 0261            AudioScriptableObjects.disable.Play();
 0262    }
 263
 264    public void SetSnapActive(bool isActive)
 265    {
 2266        isSnapActive = isActive;
 2267        currentActiveMode.SetSnapActive(isActive);
 2268    }
 269
 270    public void ChangeAdvanceMode()
 271    {
 0272        if (currentEditModeState == EditModeState.GodMode)
 273        {
 0274            SetBuildMode(EditModeState.FirstPerson);
 0275        }
 276        else
 277        {
 0278            SetBuildMode(EditModeState.GodMode);
 279        }
 0280        InputDone();
 0281    }
 282
 283    public void SetBuildMode(EditModeState state)
 284    {
 55285        EditModeState previousState = currentEditModeState;
 286
 55287        if (currentActiveMode != null)
 6288            currentActiveMode.Deactivate();
 289
 55290        currentActiveMode = null;
 291        switch (state)
 292        {
 293            case EditModeState.Inactive:
 294                break;
 295            case EditModeState.FirstPerson:
 1296                currentActiveMode = firstPersonMode;
 297
 1298                if (cursorGO != null)
 1299                    cursorGO.SetActive(true);
 1300                break;
 301            case EditModeState.GodMode:
 47302                if (cursorGO != null)
 47303                    cursorGO.SetActive(false);
 47304                currentActiveMode = godMode;
 305                break;
 306        }
 307
 55308        currentEditModeState = state;
 309
 55310        if (currentActiveMode != null)
 311        {
 48312            currentActiveMode.Activate(sceneToEdit);
 48313            currentActiveMode.SetSnapActive(isSnapActive);
 48314            entityHandler.SetActiveMode(currentActiveMode);
 315        }
 316
 55317        OnChangedEditModeState?.Invoke(previousState, state);
 11318    }
 319}