< Summary

Class:DCL.WorldState
Assembly:DCL.Runtime
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/WorldRuntime/WorldState.cs
Covered lines:102
Uncovered lines:12
Coverable lines:114
Total lines:259
Line coverage:89.4% (102 of 114)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
WorldState()0%110100%
GetCurrentSceneNumber()0%110100%
GetLoadedScenes()0%110100%
GetGlobalScenes()0%2100%
GetScenesSortedByDistance()0%110100%
GetScene(...)0%220100%
GetScene(...)0%110100%
GetPortableExperienceScene(...)0%12300%
ContainsScene(...)0%330100%
TryGetScene(...)0%330100%
TryGetScene[T](...)0%3.033085.71%
GetAllLoadedScenesCoords()0%330100%
GetLoaderForEntity(...)0%4.123050%
GetOrAddLoaderForEntity[T](...)0%220100%
RemoveLoaderForEntity(...)0%330100%
GetSceneNumberByCoords(...)0%2.152066.67%
SortScenesByDistance(...)0%550100%
ForceCurrentScene(...)0%110100%
AddScene(...)0%6.056088.89%
RemoveScene(...)0%550100%
Dispose()0%110100%
Initialize()0%110100%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/WorldRuntime/WorldState.cs

#LineLine coverage
 1using DCL.Controllers;
 2using System.Collections.Generic;
 3using DCL.Configuration;
 4using DCL.Models;
 5using UnityEngine;
 6
 7namespace DCL
 8{
 9    public class WorldState : IWorldState
 10    {
 2153511        private Dictionary<int, IParcelScene> loadedScenes { get; } = new Dictionary<int, IParcelScene>();
 119912        private Dictionary<string, IParcelScene> loadedPortableExperienceScenes { get; } = new Dictionary<string, IParce
 194113        private Dictionary<Vector2Int, int> loadedScenesByCoordinate { get; } = new Dictionary<Vector2Int, int>();
 394614        private List<IParcelScene> scenesSortedByDistance { get; } = new List<IParcelScene>();
 186315        private List<int> globalSceneNumbers { get; } = new List<int>();
 59616        private Vector2Int sortAuxiliaryVector = new Vector2Int(EnvironmentSettings.MORDOR_SCALAR, EnvironmentSettings.M
 59617        private readonly List<IParcelScene> globalScenes = new List<IParcelScene>();
 18        private int currentSceneNumber;
 19
 1784120        public int GetCurrentSceneNumber() => currentSceneNumber;
 21
 52322        public IEnumerable<KeyValuePair<int, IParcelScene>> GetLoadedScenes() => loadedScenes;
 23
 024        public List<IParcelScene> GetGlobalScenes() => globalScenes;
 25
 105826        public List<IParcelScene> GetScenesSortedByDistance() => scenesSortedByDistance;
 27
 28        public IParcelScene GetScene(int sceneNumber)
 29        {
 36830            if (!ContainsScene(sceneNumber))
 7231                return null;
 32
 29633            return loadedScenes[sceneNumber];
 34        }
 35
 36        public IParcelScene GetScene(Vector2Int coords)
 37        {
 7238            return GetScene(GetSceneNumberByCoords(coords));
 39        }
 40
 41        public IParcelScene GetPortableExperienceScene(string sceneId)
 42        {
 043            if (string.IsNullOrEmpty(sceneId) || !loadedPortableExperienceScenes.ContainsKey(sceneId))
 044                return null;
 45
 046            return loadedPortableExperienceScenes[sceneId];
 47        }
 48
 49        public bool ContainsScene(int sceneNumber)
 50        {
 1700451            if (sceneNumber <= 0 || !loadedScenes.ContainsKey(sceneNumber))
 46352                return false;
 53
 1654154            return true;
 55        }
 56
 57        public bool TryGetScene(int sceneNumber, out IParcelScene scene)
 58        {
 37659            scene = null;
 60
 37661            if (sceneNumber <= 0 || !loadedScenes.ContainsKey(sceneNumber))
 1562                return false;
 63
 36164            scene = loadedScenes[sceneNumber];
 36165            return true;
 66        }
 67
 68        public bool TryGetScene<T>(int sceneNumber, out T scene)
 69            where T : class, IParcelScene
 70        {
 28271            scene = default(T);
 28272            bool result = TryGetScene(sceneNumber, out IParcelScene baseScene);
 73
 28274            if (result)
 28275                scene = baseScene as T;
 76
 28277            if (scene == null)
 078                result = false;
 79
 28280            return result;
 81        }
 82
 83        public HashSet<Vector2Int> GetAllLoadedScenesCoords()
 84        {
 52685            HashSet<Vector2Int> allLoadedParcelCoords = new HashSet<Vector2Int>();
 86
 87            // Create fast (hashset) collection of loaded parcels coords
 132688            foreach (var element in loadedScenes)
 89            {
 13790                ParcelScene scene = element.Value as ParcelScene;
 91
 13792                if (!scene.sceneLifecycleHandler.isReady)
 93                    continue;
 94
 995                allLoadedParcelCoords.UnionWith(scene.parcels);
 96            }
 97
 52698            return allLoadedParcelCoords;
 99        }
 100
 596101        private readonly Dictionary<GameObject, LoadWrapper>
 102            attachedLoaders = new Dictionary<GameObject, LoadWrapper>();
 103
 104        public LoadWrapper GetLoaderForEntity(IDCLEntity entity)
 105        {
 354106            if (entity == null)
 107            {
 0108                Debug.LogWarning("NULL entity at GetLoaderForEntity()");
 0109                return null;
 110            }
 354111            if (entity.meshRootGameObject == null)
 112            {
 0113                Debug.LogWarning("NULL meshRootGameObject at GetLoaderForEntity()");
 0114                return null;
 115            }
 116
 354117            attachedLoaders.TryGetValue(entity.meshRootGameObject, out LoadWrapper result);
 354118            return result;
 119        }
 120
 121        public T GetOrAddLoaderForEntity<T>(IDCLEntity entity)
 122            where T : LoadWrapper, new()
 123        {
 75124            if (!attachedLoaders.TryGetValue(entity.meshRootGameObject, out LoadWrapper result))
 125            {
 73126                result = new T();
 73127                attachedLoaders.Add(entity.meshRootGameObject, result);
 128            }
 129
 75130            return result as T;
 131        }
 132
 133        public void RemoveLoaderForEntity(IDCLEntity entity)
 134        {
 54135            if (entity == null || entity.meshRootGameObject == null)
 7136                return;
 137
 47138            attachedLoaders.Remove(entity.meshRootGameObject);
 47139        }
 140
 141        public int GetSceneNumberByCoords(Vector2Int coords)
 142        {
 73143            if (loadedScenesByCoordinate.ContainsKey(coords))
 0144                return loadedScenesByCoordinate[coords];
 145
 73146            return -1;
 147        }
 148
 149        public void SortScenesByDistance(Vector2Int position)
 150        {
 515151            currentSceneNumber = -1;
 515152            scenesSortedByDistance.Sort((sceneA, sceneB) =>
 153            {
 62154                sortAuxiliaryVector = sceneA.sceneData.basePosition - position;
 62155                int dist1 = sortAuxiliaryVector.sqrMagnitude;
 156
 62157                sortAuxiliaryVector = sceneB.sceneData.basePosition - position;
 62158                int dist2 = sortAuxiliaryVector.sqrMagnitude;
 159
 62160                return dist1 - dist2;
 161            });
 162
 515163            using var iterator = scenesSortedByDistance.GetEnumerator();
 164
 545165            while (iterator.MoveNext())
 166            {
 38167                IParcelScene scene = iterator.Current;
 168
 38169                if (scene == null)
 170                    continue;
 171
 38172                bool characterIsInsideScene = WorldStateUtils.IsCharacterInsideScene(scene);
 38173                bool isGlobalScene = globalSceneNumbers.Contains(scene.sceneData.sceneNumber);
 174
 38175                if (isGlobalScene || !characterIsInsideScene)
 176                    continue;
 177
 8178                currentSceneNumber = scene.sceneData.sceneNumber;
 179
 8180                break;
 181            }
 182
 1022183        }
 184
 185        public void ForceCurrentScene(int sceneNumber)
 186        {
 364187            currentSceneNumber = sceneNumber;
 364188        }
 189
 190        public void AddScene(IParcelScene newScene)
 191        {
 384192            int sceneNumber = newScene.sceneData.sceneNumber;
 384193            if (loadedScenes.ContainsKey(sceneNumber))
 194            {
 0195                Debug.LogWarning($"The scene {newScene.sceneData.id} already exists! scene number: {sceneNumber}");
 0196                return;
 197            }
 198
 384199            if (newScene.isPersistent)
 200            {
 351201                globalSceneNumbers.Add(sceneNumber);
 351202                globalScenes.Add(newScene);
 203
 351204                if (newScene.isPortableExperience)
 2205                    loadedPortableExperienceScenes.Add(newScene.sceneData.id, newScene);
 206            }
 207
 384208            loadedScenes.Add(sceneNumber, newScene);
 209
 1546210            foreach (Vector2Int parcelPosition in newScene.GetParcels())
 211            {
 389212                loadedScenesByCoordinate[parcelPosition] = sceneNumber;
 213            }
 214
 384215            scenesSortedByDistance.Add(newScene);
 216
 384217            if (currentSceneNumber <= 0)
 349218                currentSceneNumber = sceneNumber;
 384219        }
 220
 221        public void RemoveScene(int sceneNumber)
 222        {
 282223            IParcelScene loadedScene = loadedScenes[sceneNumber];
 224
 1138225            foreach (Vector2Int sceneParcel in loadedScene.GetParcels())
 226            {
 287227                loadedScenesByCoordinate.Remove(sceneParcel);
 228            }
 229
 282230            scenesSortedByDistance.Remove(loadedScene);
 231
 282232            loadedScenes.Remove(sceneNumber);
 282233            globalSceneNumbers.Remove(sceneNumber);
 234
 282235            if (globalScenes.Contains(loadedScene))
 236            {
 249237                globalScenes.Remove(loadedScene);
 238
 249239                if (!string.IsNullOrEmpty(loadedScene.sceneData.id) && loadedPortableExperienceScenes.ContainsKey(loaded
 2240                    loadedPortableExperienceScenes.Remove(loadedScene.sceneData.id);
 241            }
 282242        }
 243
 244        public void Dispose()
 245        {
 596246            loadedScenes.Clear();
 596247            loadedScenesByCoordinate.Clear();
 596248            scenesSortedByDistance.Clear();
 596249            globalScenes.Clear();
 596250            globalSceneNumbers.Clear();
 596251            loadedPortableExperienceScenes.Clear();
 596252            currentSceneNumber = -1;
 596253        }
 254
 255        public void Initialize()
 256        {
 596257        }
 258    }
 259}