< Summary

Class:BIWModeController
Assembly:BuilderInWorld
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/BuilderMode/Controllers/BIWModeController.cs
Covered lines:36
Uncovered lines:56
Coverable lines:92
Total lines:222
Line coverage:39.1% (36 of 92)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
BIWModeController()0%110100%
Start()0%2100%
OnDestroy()0%6200%
Init(...)0%2.042078.57%
IsGodModeActive()0%2100%
GetCurrentEditionPosition()0%220100%
UndoEditionGOLastStep()0%12300%
EnterEditMode(...)0%220100%
ExitEditMode()0%2100%
GetCurrentMode()0%2100%
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%2.52050%
GetMaxDistanceToSelectEntities()0%2100%
EntityDoubleClick(...)0%2100%
GetMousePosition()0%2100%
GetModeCreationEntryPoint()0%2.152066.67%
MouseClickDetected()0%6200%
ChangeSnapMode()0%6200%
SetSnapActive(...)0%2100%
ChangeAdvanceMode()0%6200%
SetBuildMode(...)0%8.78077.78%

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 UnityEngine;
 6
 7public class BIWModeController : BIWController
 8{
 9    public enum EditModeState
 10    {
 11        Inactive = 0,
 12        FirstPerson = 1,
 13        GodMode = 2
 14    }
 15
 16    [Header("Scene References")]
 17    public GameObject cursorGO;
 18    public PlayerAvatarController avatarRenderer;
 19
 20    [Header("References")]
 21    public ActionController actionController;
 22    public BuilderInWorldEntityHandler builderInWorldEntityHandler;
 23
 24    [Header("Build Modes")]
 25    public BuilderInWorldFirstPersonMode firstPersonMode;
 26    public BuilderInWorldGodMode editorMode;
 27
 28    [SerializeField]
 29    internal InputAction_Trigger toggleSnapModeInputAction;
 30
 31    public Action OnInputDone;
 32    public event Action<EditModeState, EditModeState> OnChangedEditModeState;
 33
 34    private EditModeState currentEditModeState = EditModeState.Inactive;
 35
 36    private BuilderInWorldMode currentActiveMode;
 37
 19838    private bool isSnapActive = true;
 39
 40    private InputAction_Trigger.Triggered snapModeDelegate;
 41    private GameObject editionGO;
 42    private GameObject undoGO;
 43
 44    private void Start()
 45    {
 046        snapModeDelegate = (action) => ChangeSnapMode();
 047        toggleSnapModeInputAction.OnTriggered += snapModeDelegate;
 048    }
 49
 50    private void OnDestroy()
 51    {
 052        toggleSnapModeInputAction.OnTriggered -= snapModeDelegate;
 53
 054        firstPersonMode.OnInputDone -= InputDone;
 055        editorMode.OnInputDone -= InputDone;
 56
 057        firstPersonMode.OnActionGenerated -= actionController.AddAction;
 058        editorMode.OnActionGenerated -= actionController.AddAction;
 59
 060        if (HUDController.i.builderInWorldMainHud != null)
 61        {
 062            HUDController.i.builderInWorldMainHud.OnChangeModeAction -= ChangeAdvanceMode;
 063            HUDController.i.builderInWorldMainHud.OnResetAction -= ResetScaleAndRotation;
 64        }
 065    }
 66
 67    public void Init(GameObject editionGO, GameObject undoGO, GameObject snapGO, GameObject freeMovementGO)
 68    {
 969        base.Init();
 970        this.editionGO = editionGO;
 971        this.undoGO = undoGO;
 72
 973        firstPersonMode.Init(editionGO, undoGO, snapGO, freeMovementGO, builderInWorldEntityHandler.GetSelectedEntityLis
 974        editorMode.Init(editionGO, undoGO, snapGO, freeMovementGO, builderInWorldEntityHandler.GetSelectedEntityList());
 75
 976        firstPersonMode.OnInputDone += InputDone;
 977        editorMode.OnInputDone += InputDone;
 78
 979        firstPersonMode.OnActionGenerated += actionController.AddAction;
 980        editorMode.OnActionGenerated += actionController.AddAction;
 81
 982        if (HUDController.i.builderInWorldMainHud != null)
 83        {
 084            HUDController.i.builderInWorldMainHud.OnChangeModeAction += ChangeAdvanceMode;
 085            HUDController.i.builderInWorldMainHud.OnResetAction += ResetScaleAndRotation;
 086            HUDController.i.builderInWorldMainHud.OnChangeSnapModeAction += ChangeSnapMode;
 87        }
 988    }
 89
 090    public bool IsGodModeActive() { return currentEditModeState == EditModeState.GodMode; }
 91
 92    public Vector3 GetCurrentEditionPosition()
 93    {
 1594        if (editionGO != null)
 795            return editionGO.transform.position;
 96        else
 897            return Vector3.zero;
 98    }
 99
 100    public void UndoEditionGOLastStep()
 101    {
 0102        if (undoGO == null || editionGO == null)
 0103            return;
 104
 0105        BuilderInWorldUtils.CopyGameObjectStatus(undoGO, editionGO, false, false);
 0106    }
 107
 108    public override void EnterEditMode(ParcelScene scene)
 109    {
 3110        base.EnterEditMode(scene);
 3111        if (currentActiveMode == null)
 2112            SetBuildMode(EditModeState.GodMode);
 3113    }
 114
 115    public override void ExitEditMode()
 116    {
 0117        base.ExitEditMode();
 0118        SetBuildMode(EditModeState.Inactive);
 0119    }
 120
 0121    public BuilderInWorldMode GetCurrentMode() => currentActiveMode;
 122
 0123    public EditModeState GetCurrentStateMode() => currentEditModeState;
 124
 0125    private void InputDone() { OnInputDone?.Invoke(); }
 126
 0127    public void StartMultiSelection() { currentActiveMode.StartMultiSelection(); }
 128
 0129    public void EndMultiSelection() { currentActiveMode.EndMultiSelection(); }
 130
 0131    public void ResetScaleAndRotation() { currentActiveMode.ResetScaleAndRotation(); }
 132
 0133    public void CheckInput() { currentActiveMode?.CheckInput(); }
 134
 0135    public void CheckInputSelectedEntities() { currentActiveMode.CheckInputSelectedEntities(); }
 136
 0137    public bool ShouldCancelUndoAction() { return currentActiveMode.ShouldCancelUndoAction(); }
 138
 15139    public void CreatedEntity(DCLBuilderInWorldEntity entity) { currentActiveMode?.CreatedEntity(entity); }
 140
 0141    public float GetMaxDistanceToSelectEntities() { return currentActiveMode.maxDistanceToSelectEntities; }
 142
 0143    public void EntityDoubleClick(DCLBuilderInWorldEntity entity) {  currentActiveMode.EntityDoubleClick(entity);}
 144
 0145    public Vector3 GetMousePosition() { return currentActiveMode.GetPointerPosition(); }
 146
 147    public Vector3 GetModeCreationEntryPoint()
 148    {
 8149        if (currentActiveMode != null)
 0150            return currentActiveMode.GetCreatedEntityPoint();
 8151        return Vector3.zero;
 152    }
 153
 0154    public virtual void MouseClickDetected() { currentActiveMode?.MouseClickDetected(); }
 155
 156    private void ChangeSnapMode()
 157    {
 0158        SetSnapActive(!isSnapActive);
 0159        InputDone();
 160
 0161        if (isSnapActive)
 0162            AudioScriptableObjects.enable.Play();
 163        else
 0164            AudioScriptableObjects.disable.Play();
 0165    }
 166
 167    public void SetSnapActive(bool isActive)
 168    {
 0169        isSnapActive = isActive;
 0170        currentActiveMode.SetSnapActive(isActive);
 0171    }
 172
 173    public void ChangeAdvanceMode()
 174    {
 0175        if (currentEditModeState == EditModeState.GodMode)
 176        {
 0177            SetBuildMode(EditModeState.FirstPerson);
 0178        }
 179        else
 180        {
 0181            SetBuildMode(EditModeState.GodMode);
 182        }
 0183        InputDone();
 0184    }
 185
 186    public void SetBuildMode(EditModeState state)
 187    {
 8188        EditModeState previousState = currentEditModeState;
 189
 8190        if (currentActiveMode != null)
 4191            currentActiveMode.Deactivate();
 192
 8193        currentActiveMode = null;
 194        switch (state)
 195        {
 196            case EditModeState.Inactive:
 197                break;
 198            case EditModeState.FirstPerson:
 1199                currentActiveMode = firstPersonMode;
 200
 1201                if (cursorGO != null)
 0202                    cursorGO.SetActive(true);
 0203                break;
 204            case EditModeState.GodMode:
 4205                if (cursorGO != null)
 0206                    cursorGO.SetActive(false);
 4207                currentActiveMode = editorMode;
 208                break;
 209        }
 210
 8211        currentEditModeState = state;
 212
 8213        if (currentActiveMode != null)
 214        {
 5215            currentActiveMode.Activate(sceneToEdit);
 5216            currentActiveMode.SetSnapActive(isSnapActive);
 5217            builderInWorldEntityHandler.SetActiveMode(currentActiveMode);
 218        }
 219
 8220        OnChangedEditModeState?.Invoke(previousState, state);
 0221    }
 222}