< Summary

Class:BIWModeController
Assembly:BuilderInWorld
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/BuilderMode/Controllers/BIWModeController.cs
Covered lines:99
Uncovered lines:34
Coverable lines:133
Total lines:322
Line coverage:74.4% (99 of 133)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
Initialize(...)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%6200%
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 : IBIWController
 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    void ActivateCamera(ParcelScene sceneToEdit);
 35    void OpenNewProjectDetails();
 36}
 37
 38public class BIWModeController : BIWController, IBIWModeController
 39{
 40    public enum EditModeState
 41    {
 42        Inactive = 0,
 43        FirstPerson = 1,
 44        GodMode = 2
 45    }
 46
 47    private GameObject cursorGO;
 48    private GameObject cameraParentGO;
 49
 50    private IBIWActionController actionController;
 51    private IBIWEntityHandler entityHandler;
 52
 53    private BIWFirstPersonMode firstPersonMode;
 054    public BIWGodMode godMode { get; set; }
 55
 56    private InputAction_Trigger toggleSnapModeInputAction;
 57
 58    public event Action OnInputDone;
 59    public event Action<EditModeState, EditModeState> OnChangedEditModeState;
 60
 61    private EditModeState currentEditModeState = EditModeState.Inactive;
 62
 63    private BIWMode currentActiveMode;
 64
 65    private bool isSnapActive = false;
 66
 67    private InputAction_Trigger.Triggered snapModeDelegate;
 68
 69    private GameObject editionGO;
 70    private GameObject undoGO;
 71    private GameObject snapGO;
 72    private GameObject freeMovementGO;
 73
 74    public override void Initialize(BIWContext context)
 75    {
 6376        base.Initialize(context);
 77
 6378        cursorGO = context.sceneReferences.cursorCanvas;
 6379        cameraParentGO = context.sceneReferences.cameraParent;
 6380        InitGameObjects();
 81
 6382        firstPersonMode = new BIWFirstPersonMode();
 6383        godMode = new BIWGodMode();
 84
 6385        firstPersonMode.Init(context);
 6386        godMode.Init(context);
 87
 6388        firstPersonMode.OnInputDone += InputDone;
 6389        godMode.OnInputDone += InputDone;
 90
 6391        if (HUDController.i.builderInWorldMainHud != null)
 92        {
 2593            HUDController.i.builderInWorldMainHud.OnChangeModeAction += ChangeAdvanceMode;
 2594            HUDController.i.builderInWorldMainHud.OnResetAction += ResetScaleAndRotation;
 2595            HUDController.i.builderInWorldMainHud.OnChangeSnapModeAction += ChangeSnapMode;
 96        }
 97
 6398        actionController = context.actionController;
 6399        entityHandler = context.entityHandler;
 63100        toggleSnapModeInputAction = context.inputsReferencesAsset.toggleSnapModeInputAction;
 101
 63102        snapModeDelegate = (action) => ChangeSnapMode();
 63103        toggleSnapModeInputAction.OnTriggered += snapModeDelegate;
 104
 63105        firstPersonMode.OnActionGenerated += actionController.AddAction;
 63106        godMode.OnActionGenerated += actionController.AddAction;
 107
 63108        SetEditorGameObjects();
 63109    }
 110
 111    public override void Dispose()
 112    {
 63113        base.Dispose();
 114
 63115        toggleSnapModeInputAction.OnTriggered -= snapModeDelegate;
 116
 63117        firstPersonMode.OnInputDone -= InputDone;
 63118        godMode.OnInputDone -= InputDone;
 119
 63120        firstPersonMode.OnActionGenerated -= actionController.AddAction;
 63121        godMode.OnActionGenerated -= actionController.AddAction;
 122
 63123        firstPersonMode.Dispose();
 63124        godMode.Dispose();
 125
 63126        if (HUDController.i.builderInWorldMainHud != null)
 127        {
 25128            HUDController.i.builderInWorldMainHud.OnChangeModeAction -= ChangeAdvanceMode;
 25129            HUDController.i.builderInWorldMainHud.OnResetAction -= ResetScaleAndRotation;
 130        }
 131
 63132        GameObject.Destroy(undoGO);
 63133        GameObject.Destroy(snapGO);
 63134        GameObject.Destroy(editionGO);
 63135        GameObject.Destroy(freeMovementGO);
 63136    }
 137
 2138    public void ActivateCamera(ParcelScene sceneToLook) { godMode.ActivateCamera(sceneToLook); }
 139
 2140    public void TakeSceneScreenshotForExit() { godMode.TakeSceneScreenshotForExit(); }
 141
 0142    public void OpenNewProjectDetails() { godMode.OpenNewProjectDetails(); }
 143
 144    private void SetEditorGameObjects()
 145    {
 63146        godMode.SetEditorReferences(editionGO, undoGO, snapGO, freeMovementGO, entityHandler.GetSelectedEntityList());
 63147        firstPersonMode.SetEditorReferences(editionGO, undoGO, snapGO, freeMovementGO, entityHandler.GetSelectedEntityLi
 63148    }
 149
 150    private void InitGameObjects()
 151    {
 63152        if (snapGO == null)
 63153            snapGO = new GameObject("SnapGameObject");
 154
 63155        if (freeMovementGO == null)
 63156            freeMovementGO = new GameObject("FreeMovementGO");
 157
 63158        freeMovementGO.transform.SetParent(cameraParentGO.transform);
 159
 63160        if (editionGO == null)
 63161            editionGO = new GameObject("EditionGO");
 162
 63163        editionGO.transform.SetParent(cameraParentGO.transform);
 164
 63165        if (undoGO == null)
 63166            undoGO = new GameObject("UndoGameObject");
 63167    }
 168
 2169    public bool IsGodModeActive() { return currentEditModeState == EditModeState.GodMode; }
 170
 171    public Vector3 GetCurrentEditionPosition()
 172    {
 0173        if (editionGO != null)
 0174            return editionGO.transform.position;
 175        else
 0176            return Vector3.zero;
 177    }
 178
 179    public void UndoEditionGOLastStep()
 180    {
 0181        if (undoGO == null || editionGO == null)
 0182            return;
 183
 0184        BIWUtils.CopyGameObjectStatus(undoGO, editionGO, false, false);
 0185    }
 186
 187    public override void OnGUI()
 188    {
 1189        base.OnGUI();
 1190        godMode.OnGUI();
 1191    }
 192
 193    public override void Update()
 194    {
 2195        base.Update();
 2196        godMode.Update();
 2197        firstPersonMode.Update();
 2198    }
 199
 200    public override void LateUpdate()
 201    {
 1202        base.LateUpdate();
 1203        firstPersonMode.LateUpdate();
 1204    }
 205
 206    public override void EnterEditMode(IParcelScene scene)
 207    {
 46208        base.EnterEditMode(scene);
 46209        if (currentActiveMode == null)
 46210            SetBuildMode(EditModeState.GodMode);
 46211    }
 212
 213    public override void ExitEditMode()
 214    {
 4215        base.ExitEditMode();
 4216        SetBuildMode(EditModeState.Inactive);
 4217        snapGO.transform.SetParent(null);
 4218    }
 219
 0220    public BIWMode GetCurrentMode() => currentActiveMode;
 221
 0222    public EditModeState GetCurrentStateMode() => currentEditModeState;
 223
 0224    private void InputDone() { OnInputDone?.Invoke(); }
 225
 0226    public void StartMultiSelection() { currentActiveMode.StartMultiSelection(); }
 227
 0228    public void EndMultiSelection() { currentActiveMode.EndMultiSelection(); }
 229
 0230    public void ResetScaleAndRotation() { currentActiveMode.ResetScaleAndRotation(); }
 231
 3232    public void CheckInput() { currentActiveMode?.CheckInput(); }
 233
 0234    public void CheckInputSelectedEntities() { currentActiveMode.CheckInputSelectedEntities(); }
 235
 0236    public bool ShouldCancelUndoAction() { return currentActiveMode.ShouldCancelUndoAction(); }
 237
 2238    public void CreatedEntity(BIWEntity entity) { currentActiveMode?.CreatedEntity(entity); }
 239
 1240    public float GetMaxDistanceToSelectEntities() { return currentActiveMode.maxDistanceToSelectEntities; }
 241
 0242    public void EntityDoubleClick(BIWEntity entity) {  currentActiveMode.EntityDoubleClick(entity); }
 243
 1244    public Vector3 GetMousePosition() { return currentActiveMode.GetPointerPosition(); }
 245
 246    public Vector3 GetModeCreationEntryPoint()
 247    {
 0248        if (currentActiveMode != null)
 0249            return currentActiveMode.GetCreatedEntityPoint();
 0250        return Vector3.zero;
 251    }
 252
 0253    public void MouseClickDetected() { currentActiveMode?.MouseClickDetected(); }
 254
 255    private void ChangeSnapMode()
 256    {
 0257        SetSnapActive(!isSnapActive);
 0258        InputDone();
 259
 0260        if (isSnapActive)
 0261            AudioScriptableObjects.enable.Play();
 262        else
 0263            AudioScriptableObjects.disable.Play();
 0264    }
 265
 266    public void SetSnapActive(bool isActive)
 267    {
 2268        isSnapActive = isActive;
 2269        currentActiveMode.SetSnapActive(isActive);
 2270    }
 271
 272    public void ChangeAdvanceMode()
 273    {
 0274        if (currentEditModeState == EditModeState.GodMode)
 275        {
 0276            SetBuildMode(EditModeState.FirstPerson);
 0277        }
 278        else
 279        {
 0280            SetBuildMode(EditModeState.GodMode);
 281        }
 282
 0283        InputDone();
 0284    }
 285
 286    public void SetBuildMode(EditModeState state)
 287    {
 56288        EditModeState previousState = currentEditModeState;
 289
 56290        if (currentActiveMode != null)
 6291            currentActiveMode.Deactivate();
 292
 56293        currentActiveMode = null;
 294        switch (state)
 295        {
 296            case EditModeState.Inactive:
 297                break;
 298            case EditModeState.FirstPerson:
 1299                currentActiveMode = firstPersonMode;
 300
 1301                if (cursorGO != null)
 1302                    cursorGO.SetActive(true);
 1303                break;
 304            case EditModeState.GodMode:
 48305                if (cursorGO != null)
 48306                    cursorGO.SetActive(false);
 48307                currentActiveMode = godMode;
 308                break;
 309        }
 310
 56311        currentEditModeState = state;
 312
 56313        if (currentActiveMode != null)
 314        {
 49315            currentActiveMode.Activate(sceneToEdit);
 49316            currentActiveMode.SetSnapActive(isSnapActive);
 49317            entityHandler.SetActiveMode(currentActiveMode);
 318        }
 319
 56320        OnChangedEditModeState?.Invoke(previousState, state);
 12321    }
 322}