< Summary

Class:AvatarSystem.WearableRetriever
Assembly:AvatarSystem
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/AvatarSystem/Loader/WearableRetriever.cs
Covered lines:26
Uncovered lines:10
Coverable lines:36
Total lines:82
Line coverage:72.2% (26 of 36)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
Retrieve()0%9.589080.77%
CheckGLTFastFeature()0%110100%
Dispose()0%2.52050%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/AvatarSystem/Loader/WearableRetriever.cs

#LineLine coverage
 1using System;
 2using System.Threading;
 3using Cysharp.Threading.Tasks;
 4using DCL;
 5using DCL.Components;
 6using DCL.Helpers;
 7using UnityEngine;
 8
 9namespace AvatarSystem
 10{
 11    public class WearableRetriever : IWearableRetriever
 12    {
 13        private const string FEATURE_GLTFAST = "gltfast";
 4814        public Rendereable rendereable { get; private set; }
 15
 16        private RendereableAssetLoadHelper loaderAssetHelper;
 17
 18
 19
 20        public async UniTask<Rendereable> Retrieve(GameObject container, ContentProvider contentProvider, string baseUrl
 21        {
 822            ct.ThrowIfCancellationRequested();
 23
 24            try
 25            {
 826                loaderAssetHelper?.Unload();
 27
 828                loaderAssetHelper = new RendereableAssetLoadHelper(contentProvider, baseUrl, CheckGLTFastFeature);
 29
 830                loaderAssetHelper.settings.forceNewInstance = false;
 31                // TODO Review this hardcoded offset and try to solve it by offseting the Avatar container
 832                loaderAssetHelper.settings.initialLocalPosition = Vector3.up * AvatarSystemUtils.AVATAR_Y_OFFSET;
 833                loaderAssetHelper.settings.cachingFlags = MaterialCachingHelper.Mode.CACHE_SHADERS;
 834                loaderAssetHelper.settings.visibleFlags = AssetPromiseSettings_Rendering.VisibleFlags.INVISIBLE;
 835                loaderAssetHelper.settings.parent = container.transform;
 836                loaderAssetHelper.settings.layer = container.layer;
 37
 838                bool done = false;
 839                Exception exception = null;
 40
 41                void OnSuccessWrapper(Rendereable rendereable)
 42                {
 843                    loaderAssetHelper?.ClearEvents();
 844                    done = true;
 845                    this.rendereable = rendereable;
 846                }
 47
 48                void OnFailEventWrapper(Exception e)
 49                {
 050                    exception = e;
 051                    loaderAssetHelper?.ClearEvents();
 052                    done = true;
 053                    rendereable = null;
 054                }
 55
 856                loaderAssetHelper.OnSuccessEvent += OnSuccessWrapper;
 857                loaderAssetHelper.OnFailEvent += OnFailEventWrapper;
 858                loaderAssetHelper.Load(mainFile, AvatarSystemUtils.UseAssetBundles() ? RendereableAssetLoadHelper.Loadin
 59
 60                // AttachExternalCancellation is needed because a cancelled WaitUntil UniTask requires a frame
 17061                await UniTask.WaitUntil(() => done, cancellationToken: ct).AttachExternalCancellation(ct);
 62
 863                if (exception != null)
 064                    throw exception;
 65
 866                if (rendereable == null)
 067                    throw new Exception($"Couldnt retrieve Wearable assets at: {mainFile}");
 68
 869                return rendereable;
 70            }
 071            catch (OperationCanceledException e)
 72            {
 073                Dispose();
 074                throw;
 75            }
 876        }
 77        private bool CheckGLTFastFeature() =>
 878            DataStore.i.featureFlags.flags.Get().IsFeatureEnabled(FEATURE_GLTFAST);
 79
 880        public void Dispose() { loaderAssetHelper?.Unload(); }
 81    }
 82}