< Summary

Class:ECSSystems.PlayerSystem.ECSPlayerTransformSystem
Assembly:ECS7Plugin.Systems.Player
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/DCLPlugins/ECS7/Systems/PlayerSystem/ECSPlayerTransformSystem.cs
Covered lines:33
Uncovered lines:14
Coverable lines:47
Total lines:110
Line coverage:70.2% (33 of 47)
Covered branches:0
Total branches:0
Covered methods:3
Total methods:5
Method coverage:60% (3 of 5)

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
ECSPlayerTransformSystem(...)0%110100%
Dispose()0%110100%
Update()0%12.711075.86%
OnSceneLoaded(...)0%2100%
SetInSceneOffset(...)0%2100%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/DCLPlugins/ECS7/Systems/PlayerSystem/ECSPlayerTransformSystem.cs

#LineLine coverage
 1using DCL.Configuration;
 2using DCL.Controllers;
 3using DCL.ECS7;
 4using DCL.ECS7.ComponentWrapper.Generic;
 5using DCL.ECSComponents;
 6using DCL.ECSRuntime;
 7using DCL.Models;
 8using System;
 9using System.Collections.Generic;
 10using UnityEngine;
 11
 12namespace ECSSystems.PlayerSystem
 13{
 14    public class ECSPlayerTransformSystem : IDisposable
 15    {
 16        private readonly BaseList<IParcelScene> loadedScenes;
 17        private readonly BaseVariable<Transform> avatarTransform;
 18        private readonly Vector3Variable worldOffset;
 19        private readonly IReadOnlyDictionary<int, ComponentWriter> componentsWriter;
 20        private readonly WrappedComponentPool<IWrappedComponent<ECSTransform>> transformPool;
 21        private readonly ECSComponent<ECSTransform> transformComponent;
 22
 323        private Vector3 lastAvatarPosition = Vector3.zero;
 324        private Quaternion lastAvatarRotation = Quaternion.identity;
 25        private bool newSceneAdded = false;
 26
 327        public ECSPlayerTransformSystem(IReadOnlyDictionary<int, ComponentWriter> componentsWriter,
 28            WrappedComponentPool<IWrappedComponent<ECSTransform>> transformPool,
 29            ECSComponent<ECSTransform> transformComponent,
 30            BaseList<IParcelScene> sdk7Scenes, BaseVariable<Transform> avatarTransform, Vector3Variable worldOffset)
 31        {
 332            loadedScenes = sdk7Scenes;
 333            this.avatarTransform = avatarTransform;
 334            this.worldOffset = worldOffset;
 335            this.componentsWriter = componentsWriter;
 336            this.transformPool = transformPool;
 337            this.transformComponent = transformComponent;
 38
 339            loadedScenes.OnAdded += OnSceneLoaded;
 340        }
 41
 42        public void Dispose()
 43        {
 344            loadedScenes.OnAdded -= OnSceneLoaded;
 345        }
 46
 47        public void Update()
 48        {
 449            var currentAvatarTransform = avatarTransform.Get();
 50
 451            if (currentAvatarTransform == null)
 052                return;
 53
 454            Vector3 avatarPosition = currentAvatarTransform.position;
 455            Quaternion avatarRotation = currentAvatarTransform.rotation;
 56
 457            if (!newSceneAdded && lastAvatarPosition == avatarPosition && lastAvatarRotation == avatarRotation)
 58            {
 159                return;
 60            }
 61
 362            newSceneAdded = false;
 63
 364            lastAvatarPosition = avatarPosition;
 365            lastAvatarRotation = avatarRotation;
 366            Vector3 currentWorldOffset = this.worldOffset.Get();
 67
 68            IParcelScene scene;
 69
 1270            for (int i = 0; i < loadedScenes.Count; i++)
 71            {
 372                scene = loadedScenes[i];
 73
 374                if (!componentsWriter.TryGetValue(scene.sceneData.sceneNumber, out var writer))
 75                    continue;
 76
 377                var pooledTransform = transformPool.Get();
 378                var transform = pooledTransform.WrappedComponent.Model;
 379                transform.position = UtilsScene.GlobalToScenePosition(ref scene.sceneData.basePosition, ref avatarPositi
 380                transform.rotation = avatarRotation;
 81
 382                writer.Put(SpecialEntityId.PLAYER_ENTITY, ComponentID.TRANSFORM, pooledTransform);
 83
 384                if (scene.entities.TryGetValue(SpecialEntityId.PLAYER_ENTITY, out var entity))
 85                {
 086                    ECSTransform stored = transformComponent.Get(scene, entity.entityId)?.model ?? new ECSTransform();
 087                    stored.position = transform.position;
 088                    stored.rotation = transform.rotation;
 089                    stored.scale = transform.scale;
 090                    stored.parentId = transform.parentId;
 091                    transformComponent.SetModel(scene, entity, stored);
 92                }
 93            }
 394        }
 95
 96        private void OnSceneLoaded(IParcelScene obj)
 97        {
 098            newSceneAdded = true;
 099        }
 100
 101        private static Vector3 SetInSceneOffset(IParcelScene scene, ref Vector3 position, ref Vector3 worldOffset)
 102        {
 0103            Vector3 offsetposition = new Vector3();
 0104            offsetposition.x = (position.x + worldOffset.x) - scene.sceneData.basePosition.x * ParcelSettings.PARCEL_SIZ
 0105            offsetposition.y = (position.y + worldOffset.y);
 0106            offsetposition.z = (position.z + worldOffset.z) - scene.sceneData.basePosition.y * ParcelSettings.PARCEL_SIZ
 0107            return offsetposition;
 108        }
 109    }
 110}