< Summary

Class:DCL.ECS7.SceneStateHandler
Assembly:ECS7Plugin.SceneStateHandler
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/DCLPlugins/ECS7/SceneStateHandler/SceneStateHandler.cs
Covered lines:27
Uncovered lines:14
Coverable lines:41
Total lines:105
Line coverage:65.8% (27 of 41)
Covered branches:0
Total branches:0
Covered methods:5
Total methods:7
Method coverage:71.4% (5 of 7)

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
SceneStateHandler(...)0%110100%
Dispose()0%110100%
InitializeEngineInfoComponent(...)0%2.062075%
GetSceneTick(...)0%3.333066.67%
IncreaseSceneTick(...)0%20400%
IsSceneGltfLoadingFinished(...)0%770100%
IsSceneRestrictedActionEnabled(...)0%12300%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/DCLPlugins/ECS7/SceneStateHandler/SceneStateHandler.cs

#LineLine coverage
 1using DCL.Controllers;
 2using DCL.ECS7.InternalComponents;
 3using DCL.ECSComponents;
 4using DCL.Models;
 5using RPC.Context;
 6using System;
 7using System.Collections.Generic;
 8using UnityEngine;
 9
 10namespace DCL.ECS7
 11{
 12    public class SceneStateHandler : IDisposable
 13    {
 14        private readonly IInternalECSComponent<InternalEngineInfo> engineInfoComponent;
 15        private readonly IInternalECSComponent<InternalGltfContainerLoadingState> gltfContainerLoadingState;
 16        private readonly CRDTServiceContext rpcCrdtContext;
 17        private readonly IReadOnlyDictionary<int, IParcelScene> scenes;
 18
 419        public SceneStateHandler(
 20            CRDTServiceContext rpcCrdtContext,
 21            RestrictedActionsContext rpcRestrictedActionContext,
 22            IReadOnlyDictionary<int, IParcelScene> scenes,
 23            IInternalECSComponent<InternalEngineInfo> engineInfoComponent,
 24            IInternalECSComponent<InternalGltfContainerLoadingState> gltfContainerLoadingState)
 25        {
 426            this.rpcCrdtContext = rpcCrdtContext;
 427            this.scenes = scenes;
 428            this.engineInfoComponent = engineInfoComponent;
 429            this.gltfContainerLoadingState = gltfContainerLoadingState;
 30
 431            rpcCrdtContext.GetSceneTick += GetSceneTick;
 432            rpcCrdtContext.IncreaseSceneTick += IncreaseSceneTick;
 433            rpcCrdtContext.IsSceneGltfLoadingFinished += IsSceneGltfLoadingFinished;
 434            rpcRestrictedActionContext.IsSceneRestrictedActionEnabled = IsSceneRestrictedActionEnabled;
 435        }
 36
 37        public void Dispose()
 38        {
 139            rpcCrdtContext.GetSceneTick -= GetSceneTick;
 140            rpcCrdtContext.IncreaseSceneTick -= IncreaseSceneTick;
 141            rpcCrdtContext.IsSceneGltfLoadingFinished -= IsSceneGltfLoadingFinished;
 142        }
 43
 44        public void InitializeEngineInfoComponent(int sceneNumber)
 45        {
 246            if (!scenes.TryGetValue(sceneNumber, out var scene)) return;
 47
 248            engineInfoComponent.PutFor(scene, SpecialEntityId.SCENE_ROOT_ENTITY,
 49                new InternalEngineInfo(0, Time.realtimeSinceStartup));
 250        }
 51
 52        internal uint GetSceneTick(int sceneNumber)
 53        {
 254            if (scenes.TryGetValue(sceneNumber, out var scene))
 255                return engineInfoComponent.GetFor(scene, SpecialEntityId.SCENE_ROOT_ENTITY)?.model.SceneTick ?? 0;
 56
 057            return 0;
 58        }
 59
 60        internal void IncreaseSceneTick(int sceneNumber)
 61        {
 062            if (!scenes.TryGetValue(sceneNumber, out var scene)) return;
 63
 064            var model = engineInfoComponent.GetFor(scene, SpecialEntityId.SCENE_ROOT_ENTITY)?.model;
 65
 066            InternalEngineInfo finalModel = model.Value;
 067            finalModel.SceneTick++;
 68
 069            engineInfoComponent.PutFor(scene, SpecialEntityId.SCENE_ROOT_ENTITY, finalModel);
 070        }
 71
 72        internal bool IsSceneGltfLoadingFinished(int sceneNumber)
 73        {
 374            if (scenes.TryGetValue(sceneNumber, out var scene))
 75            {
 376                var keys = scene.entities.Keys;
 77
 978                foreach (long entityId in keys)
 79                {
 280                    var model = gltfContainerLoadingState.GetFor(scene, entityId)?.model;
 81
 282                    if (model != null && model.Value.LoadingState == LoadingState.Loading)
 183                        return false;
 84                }
 85            }
 86
 287            return true;
 188        }
 89
 90        internal bool IsSceneRestrictedActionEnabled(int sceneNumber)
 91        {
 092            if (scenes == null)
 093                return false;
 94
 095            if (scenes.TryGetValue(sceneNumber, out var scene))
 96            {
 097                InternalEngineInfo engineInfo = engineInfoComponent.GetFor(scene, SpecialEntityId.SCENE_ROOT_ENTITY)!.Va
 098                uint sceneTick = engineInfo.SceneTick;
 099                return sceneTick != 0;
 100            }
 101
 0102            return false;
 103        }
 104    }
 105}