< Summary

Class:BuilderInWorldAudioHandler
Assembly:BuilderInWorld
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/BuilderMode/BuilderInWorldAudioHandler.cs
Covered lines:1
Uncovered lines:81
Coverable lines:82
Total lines:222
Line coverage:1.2% (1 of 82)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
BuilderInWorldAudioHandler()0%110100%
Start()0%2100%
OnDestroy()0%2100%
AddListeners()0%2100%
RemoveListeners()0%2100%
EnterEditMode(...)0%6200%
ExitEditMode()0%6200%
OnAssetSpawn()0%2100%
OnAssetDelete(...)0%12300%
OnAssetSelect()0%2100%
OnAssetDeselect(...)0%12300%
OnCatalogItemSelected(...)0%2100%
OnTutorialEnabled()0%6200%
OnTutorialDisabled()0%6200%
StartBuilderMusic()0%20400%
OnChangedEditModeState(...)0%20400%
OnEntityBoundsCheckerStatusChanged(...)0%30500%
UpdateEntityCount()0%2100%
EntityHasBeenAddedSinceLastUpdate()0%2100%

File(s)

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

#LineLine coverage
 1using DCL.Controllers;
 2using System.Collections;
 3using System.Collections.Generic;
 4using UnityEngine;
 5
 6public class BuilderInWorldAudioHandler : BIWController
 7{
 8    const float MUSIC_DELAY_TIME_ON_START = 4f;
 9    const float MUSIC_FADE_OUT_TIME_ON_EXIT = 5f;
 10    const float MUSIC_FADE_OUT_TIME_ON_TUTORIAL = 3f;
 11
 12    [SerializeField]
 13    BIWCreatorController creatorController;
 14
 15    [SerializeField]
 16    GameObject builderInWorldModesParent;
 17
 18    [SerializeField]
 19    BuilderInWorldController inWorldController;
 20
 21    [SerializeField]
 22    BuilderInWorldEntityHandler entityHandler;
 23
 24    [SerializeField]
 25    BIWModeController modeController;
 26
 27    [Header("Audio Events")]
 28    [SerializeField]
 29    AudioEvent eventAssetSpawn;
 30
 31    [SerializeField]
 32    AudioEvent eventAssetPlace;
 33
 34    [SerializeField]
 35    AudioEvent eventAssetSelect;
 36
 37    [SerializeField]
 38    AudioEvent eventAssetDeselect;
 39
 40    [SerializeField]
 41    AudioEvent eventBuilderOutOfBounds;
 42
 43    [SerializeField]
 44    AudioEvent eventBuilderOutOfBoundsPlaced;
 45
 46    [SerializeField]
 47    AudioEvent eventAssetDelete;
 48
 49    [SerializeField]
 50    AudioEvent eventBuilderExit;
 51
 52    [SerializeField]
 53    AudioEvent eventBuilderMusic;
 54
 29755    private List<string> entitiesOutOfBounds = new List<string>();
 56    private int entityCount;
 57    bool playPlacementSoundOnDeselect;
 58    private BIWModeController.EditModeState state = BIWModeController.EditModeState.Inactive;
 59
 60    private void Start()
 61    {
 062        playPlacementSoundOnDeselect = false;
 63
 064        AddListeners();
 065    }
 66
 067    private void OnDestroy() { RemoveListeners(); }
 68
 69    private void AddListeners()
 70    {
 071        creatorController.OnCatalogItemPlaced += OnAssetSpawn;
 072        entityHandler.OnDeleteSelectedEntities += OnAssetDelete;
 073        modeController.OnChangedEditModeState += OnChangedEditModeState;
 074        DCL.Environment.i.world.sceneBoundsChecker.OnEntityBoundsCheckerStatusChanged += OnEntityBoundsCheckerStatusChan
 75
 076        DCL.Tutorial.TutorialController.i.OnTutorialEnabled += OnTutorialEnabled;
 077        DCL.Tutorial.TutorialController.i.OnTutorialDisabled += OnTutorialDisabled;
 78
 079        entityHandler.OnEntityDeselected += OnAssetDeselect;
 080        entityHandler.OnEntitySelected += OnAssetSelect;
 081    }
 82
 83    private void RemoveListeners()
 84    {
 085        creatorController.OnCatalogItemPlaced -= OnAssetSpawn;
 086        entityHandler.OnDeleteSelectedEntities -= OnAssetDelete;
 087        modeController.OnChangedEditModeState -= OnChangedEditModeState;
 088        DCL.Environment.i.world.sceneBoundsChecker.OnEntityBoundsCheckerStatusChanged -= OnEntityBoundsCheckerStatusChan
 89
 090        DCL.Tutorial.TutorialController.i.OnTutorialEnabled -= OnTutorialEnabled;
 091        DCL.Tutorial.TutorialController.i.OnTutorialDisabled -= OnTutorialDisabled;
 92
 093        entityHandler.OnEntityDeselected -= OnAssetDeselect;
 094        entityHandler.OnEntitySelected -= OnAssetSelect;
 095    }
 96
 97    public override void EnterEditMode(ParcelScene scene)
 98    {
 099        base.EnterEditMode(scene);
 100
 0101        UpdateEntityCount();
 0102        CoroutineStarter.Start(StartBuilderMusic());
 0103        if (HUDController.i.builderInWorldMainHud != null)
 0104            HUDController.i.builderInWorldMainHud.OnCatalogItemSelected += OnCatalogItemSelected;
 105
 0106        gameObject.SetActive(true);
 0107    }
 108
 109    public override void ExitEditMode()
 110    {
 0111        base.ExitEditMode();
 112
 0113        eventBuilderExit.Play();
 0114        CoroutineStarter.Start(eventBuilderMusic.FadeOut(MUSIC_FADE_OUT_TIME_ON_EXIT));
 0115        if (HUDController.i.builderInWorldMainHud != null)
 0116            HUDController.i.builderInWorldMainHud.OnCatalogItemSelected -= OnCatalogItemSelected;
 117
 0118        gameObject.SetActive(false);
 0119    }
 120
 0121    private void OnAssetSpawn() { eventAssetSpawn.Play(); }
 122
 123    private void OnAssetDelete(List<DCLBuilderInWorldEntity> entities)
 124    {
 0125        foreach (DCLBuilderInWorldEntity deletedEntity in entities)
 126        {
 0127            if (entitiesOutOfBounds.Contains(deletedEntity.rootEntity.entityId))
 128            {
 0129                entitiesOutOfBounds.Remove(deletedEntity.rootEntity.entityId);
 130            }
 131        }
 132
 0133        eventAssetDelete.Play();
 0134    }
 135
 0136    private void OnAssetSelect() { eventAssetSelect.Play(); }
 137
 138    private void OnAssetDeselect(DCLBuilderInWorldEntity entity)
 139    {
 0140        if (playPlacementSoundOnDeselect)
 141        {
 0142            eventAssetPlace.Play();
 0143            playPlacementSoundOnDeselect = false;
 0144        }
 145        else
 0146            eventAssetDeselect.Play();
 147
 0148        UpdateEntityCount();
 149
 0150        if (entitiesOutOfBounds.Contains(entity.rootEntity.entityId))
 151        {
 0152            eventBuilderOutOfBoundsPlaced.Play();
 153        }
 0154    }
 155
 0156    private void OnCatalogItemSelected(CatalogItem catalogItem) { playPlacementSoundOnDeselect = true; }
 157
 158    private void OnTutorialEnabled()
 159    {
 0160        if (inWorldController.isBuilderInWorldActivated)
 0161            CoroutineStarter.Start(eventBuilderMusic.FadeOut(MUSIC_FADE_OUT_TIME_ON_TUTORIAL));
 0162    }
 163
 164    private void OnTutorialDisabled()
 165    {
 0166        if (inWorldController.isBuilderInWorldActivated)
 0167            CoroutineStarter.Start(StartBuilderMusic());
 0168    }
 169
 170    private IEnumerator StartBuilderMusic()
 171    {
 0172        yield return new WaitForSeconds(MUSIC_DELAY_TIME_ON_START);
 173
 0174        if (inWorldController.isBuilderInWorldActivated)
 0175            eventBuilderMusic.Play();
 0176    }
 177
 178    private void OnChangedEditModeState(BIWModeController.EditModeState previous, BIWModeController.EditModeState curren
 179    {
 0180        state = current;
 0181        if (previous != BIWModeController.EditModeState.Inactive)
 182        {
 183            switch (current)
 184            {
 185                case BIWModeController.EditModeState.FirstPerson:
 0186                    AudioScriptableObjects.cameraFadeIn.Play();
 0187                    break;
 188                case BIWModeController.EditModeState.GodMode:
 0189                    AudioScriptableObjects.cameraFadeOut.Play();
 190                    break;
 191                default:
 192                    break;
 193            }
 194        }
 0195    }
 196
 197    private void OnEntityBoundsCheckerStatusChanged(DCL.Models.IDCLEntity entity, bool isInsideBoundaries)
 198    {
 0199        if (state == BIWModeController.EditModeState.Inactive)
 0200            return;
 201
 0202        if (!isInsideBoundaries)
 203        {
 0204            if (!entitiesOutOfBounds.Contains(entity.entityId))
 205            {
 0206                entitiesOutOfBounds.Add(entity.entityId);
 0207                eventBuilderOutOfBounds.Play();
 208            }
 0209        }
 210        else
 211        {
 0212            if (entitiesOutOfBounds.Contains(entity.entityId))
 213            {
 0214                entitiesOutOfBounds.Remove(entity.entityId);
 215            }
 216        }
 0217    }
 218
 0219    private void UpdateEntityCount() { entityCount = entityHandler.GetCurrentSceneEntityCount(); }
 220
 0221    private bool EntityHasBeenAddedSinceLastUpdate() { return (entityHandler.GetCurrentSceneEntityCount() > entityCount)
 222}