< Summary

Class:ECSSystems.TweenSystem.ECSTweenSystem
Assembly:ECS7Plugin.Systems.ECSTweenSystem
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/DCLPlugins/ECS7/Systems/TweenSystem/ECSTweenSystem.cs
Covered lines:41
Uncovered lines:7
Coverable lines:48
Total lines:113
Line coverage:85.4% (41 of 48)
Covered branches:0
Total branches:0
Covered methods:4
Total methods:4
Method coverage:100% (4 of 4)

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
ECSTweenSystem(...)0%110100%
Update()0%220100%
UpdateTweenComponentModel(...)0%12.8911075%
UpdateTransformComponent(...)0%110100%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/DCLPlugins/ECS7/Systems/TweenSystem/ECSTweenSystem.cs

#LineLine coverage
 1using DCL.Controllers;
 2using DCL.ECS7;
 3using DCL.ECS7.ComponentWrapper.Generic;
 4using DCL.ECS7.InternalComponents;
 5using DCL.ECSComponents;
 6using DCL.ECSRuntime;
 7using DCL.Models;
 8using DG.Tweening;
 9using System.Collections.Generic;
 10using UnityEngine;
 11
 12namespace ECSSystems.TweenSystem
 13{
 14    public class ECSTweenSystem
 15    {
 16        private readonly IInternalECSComponent<InternalTween> tweenInternalComponent;
 17        private readonly IReadOnlyDictionary<int, ComponentWriter> componentsWriter;
 18        private readonly WrappedComponentPool<IWrappedComponent<PBTweenState>> tweenStateComponentPool;
 19        private readonly WrappedComponentPool<IWrappedComponent<ECSTransform>> transformComponentPool;
 20        private readonly Vector3Variable worldOffset;
 21        private readonly IInternalECSComponent<InternalSceneBoundsCheck> sbcInternalComponent;
 22
 423        public ECSTweenSystem(IInternalECSComponent<InternalTween> tweenInternalComponent,
 24            IReadOnlyDictionary<int, ComponentWriter> componentsWriter,
 25            WrappedComponentPool<IWrappedComponent<PBTweenState>> tweenStateComponentPool,
 26            WrappedComponentPool<IWrappedComponent<ECSTransform>> transformComponentPool,
 27            Vector3Variable worldOffset,
 28            IInternalECSComponent<InternalSceneBoundsCheck> sbcInternalComponent)
 29        {
 430            this.tweenInternalComponent = tweenInternalComponent;
 431            this.componentsWriter = componentsWriter;
 432            this.tweenStateComponentPool = tweenStateComponentPool;
 433            this.transformComponentPool = transformComponentPool;
 434            this.worldOffset = worldOffset;
 435            this.sbcInternalComponent = sbcInternalComponent;
 436        }
 37
 38        public void Update()
 39        {
 540            var tweenComponentGroup = tweenInternalComponent.GetForAll();
 41
 2042            for (var i = 0; i < tweenComponentGroup.Count; i++)
 43            {
 544                UpdateTweenComponentModel(tweenComponentGroup[i]);
 45            }
 546        }
 47
 48        private void UpdateTweenComponentModel(KeyValueSetTriplet<IParcelScene, long, ECSComponentData<InternalTween>> t
 49        {
 550            var tweenStatePooledComponent = tweenStateComponentPool.Get();
 551            var tweenStateComponentModel = tweenStatePooledComponent.WrappedComponent.Model;
 552            IParcelScene scene = tweenComponentGroup.key1;
 553            if (!componentsWriter.TryGetValue(scene.sceneData.sceneNumber, out var writer))
 054                return;
 55
 556            long entityId = tweenComponentGroup.key2;
 557            InternalTween model = tweenComponentGroup.value.model;
 558            scene.entities.TryGetValue(entityId, out IDCLEntity entity);
 59
 560            switch (model.tweenMode)
 61            {
 62                case PBTween.ModeOneofCase.Move:
 563                    sbcInternalComponent.SetPosition(scene, entity, model.transform.position);
 564                    break;
 65                case PBTween.ModeOneofCase.Rotate:
 66                case PBTween.ModeOneofCase.Scale:
 067                    sbcInternalComponent.OnTransformScaleRotationChanged(scene, entity);
 68                    break;
 69            }
 70
 571            if (model.removed)
 72            {
 073                writer.Remove(entityId, ComponentID.TWEEN_STATE);
 074                return;
 75            }
 76
 577            float currentTime = model.tweener.ElapsedPercentage();
 578            if (currentTime.Equals(1f) && model.currentTime.Equals(1f))
 079                return;
 80
 581            if (model.playing)
 82            {
 583                tweenStateComponentModel.State = currentTime.Equals(1f) ? TweenStateStatus.TsCompleted : TweenStateStatu
 584                tweenStateComponentModel.CurrentTime = currentTime;
 85            }
 86            else
 87            {
 088                tweenStateComponentModel.State = TweenStateStatus.TsPaused;
 89            }
 90
 591            writer.Put(entityId, ComponentID.TWEEN_STATE, tweenStatePooledComponent);
 92
 593            UpdateTransformComponent(entity, model.transform, writer);
 94
 595            model.currentTime = currentTime;
 596            tweenInternalComponent.PutFor(scene, entityId, model);
 97
 98            // Same AvatarShape interpolation used at DCLTransform from SDK6
 599            entity.OnTransformChange?.Invoke(model.transform.localPosition, model.transform.localRotation);
 0100        }
 101
 102        private void UpdateTransformComponent(IDCLEntity entity, Transform entityTransform, ComponentWriter writer)
 103        {
 5104            var transformComponent = transformComponentPool.Get();
 5105            var transformComponentModel = transformComponent.WrappedComponent.Model;
 5106            transformComponentModel.position = entityTransform.localPosition;
 5107            transformComponentModel.rotation = entityTransform.localRotation;
 5108            transformComponentModel.scale = entityTransform.localScale;
 5109            transformComponentModel.parentId = entity.parentId;
 5110            writer.Put(entity.entityId, ComponentID.TRANSFORM, transformComponent);
 5111        }
 112    }
 113}