< Summary

Class:CoreComponentsPlugin
Assembly:DCL.Plugins.CoreComponents
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/DCLPlugins/CoreComponentsPlugin/CoreComponentsPlugin.cs
Covered lines:86
Uncovered lines:2
Coverable lines:88
Total lines:152
Line coverage:97.7% (86 of 88)
Covered branches:0
Total branches:0
Covered methods:6
Total methods:6
Method coverage:100% (6 of 6)

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
CoreComponentsPlugin()0%110100%
PrewarmPoolablePools()0%330100%
HandleAvatarAttachExclusivity(...)0%2.152066.67%
BuildComponent[T]()0%110100%
BuildPoolableComponent(...)0%110100%
Dispose()0%220100%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/DCLPlugins/CoreComponentsPlugin/CoreComponentsPlugin.cs

#LineLine coverage
 1using System.Collections;
 2using DCL;
 3using DCL.Components;
 4using DCL.Controllers;
 5using DCL.Models;
 6using UnityEngine;
 7
 8public class CoreComponentsPlugin : IPlugin
 9{
 10    private PoolableComponentFactory poolableComponentFactory;
 11
 30712    public CoreComponentsPlugin()
 13    {
 30714        poolableComponentFactory = Resources.Load<PoolableComponentFactory>("PoolableCoreComponentsFactory");
 30715        IRuntimeComponentFactory factory = Environment.i.world.componentFactory;
 16
 17        // Transform
 30718        factory.RegisterBuilder((int) CLASS_ID_COMPONENT.TRANSFORM, BuildComponent<DCLTransform>);
 30719        factory.RegisterBuilder((int) CLASS_ID_COMPONENT.AVATAR_ATTACH, BuildComponent<AvatarAttachComponent>);
 20
 21        // Shapes
 30722        factory.RegisterBuilder((int) CLASS_ID.BOX_SHAPE, BuildComponent<BoxShape>);
 30723        factory.RegisterBuilder((int) CLASS_ID.SPHERE_SHAPE, BuildComponent<SphereShape>);
 30724        factory.RegisterBuilder((int) CLASS_ID.CYLINDER_SHAPE, BuildComponent<CylinderShape>);
 30725        factory.RegisterBuilder((int) CLASS_ID.CONE_SHAPE, BuildComponent<ConeShape>);
 30726        factory.RegisterBuilder((int) CLASS_ID.PLANE_SHAPE, BuildComponent<PlaneShape>);
 30727        factory.RegisterBuilder((int) CLASS_ID.GLTF_SHAPE, BuildComponent<GLTFShape>);
 30728        factory.RegisterBuilder((int) CLASS_ID.OBJ_SHAPE, BuildComponent<OBJShape>);
 30729        factory.RegisterBuilder((int) CLASS_ID_COMPONENT.TEXT_SHAPE,
 1130            () => BuildPoolableComponent((int) CLASS_ID_COMPONENT.TEXT_SHAPE));
 31        //
 30732        factory.RegisterBuilder((int) CLASS_ID_COMPONENT.BILLBOARD,
 433            () => BuildPoolableComponent((int) CLASS_ID_COMPONENT.BILLBOARD));
 30734        factory.RegisterBuilder((int) CLASS_ID_COMPONENT.SMART_ITEM,
 135            () => BuildPoolableComponent((int) CLASS_ID_COMPONENT.SMART_ITEM));
 36
 37        // Materials
 30738        factory.RegisterBuilder((int) CLASS_ID.BASIC_MATERIAL, BuildComponent<BasicMaterial>);
 30739        factory.RegisterBuilder((int) CLASS_ID.PBR_MATERIAL, BuildComponent<PBRMaterial>);
 30740        factory.RegisterBuilder((int) CLASS_ID.TEXTURE, BuildComponent<DCLTexture>);
 30741        factory.RegisterBuilder((int) CLASS_ID.AVATAR_TEXTURE, BuildComponent<DCLAvatarTexture>);
 42
 43        // Audio
 30744        factory.RegisterBuilder((int) CLASS_ID.AUDIO_CLIP, BuildComponent<DCLAudioClip>);
 30745        factory.RegisterBuilder((int) CLASS_ID_COMPONENT.AUDIO_SOURCE,
 1546            () => BuildPoolableComponent((int) CLASS_ID_COMPONENT.AUDIO_SOURCE));
 30747        factory.RegisterBuilder((int) CLASS_ID_COMPONENT.AUDIO_STREAM,
 448            () => BuildPoolableComponent((int) CLASS_ID_COMPONENT.AUDIO_STREAM));
 49
 50        // Video
 30751        factory.RegisterBuilder((int) CLASS_ID.VIDEO_CLIP, BuildComponent<DCLVideoClip>);
 30752        factory.RegisterBuilder((int) CLASS_ID.VIDEO_TEXTURE, BuildComponent<DCLVideoTexture>);
 53
 54        // Others
 30755        factory.RegisterBuilder((int) CLASS_ID.FONT, BuildComponent<DCLFont>);
 30756        factory.RegisterBuilder((int) CLASS_ID_COMPONENT.AVATAR_SHAPE,
 157            () => BuildPoolableComponent((int) CLASS_ID_COMPONENT.AVATAR_SHAPE));
 30758        factory.RegisterBuilder((int) CLASS_ID_COMPONENT.ANIMATOR,
 859            () => BuildPoolableComponent((int) CLASS_ID_COMPONENT.ANIMATOR));
 30760        factory.RegisterBuilder((int) CLASS_ID_COMPONENT.GIZMOS,
 161            () => BuildPoolableComponent((int) CLASS_ID_COMPONENT.GIZMOS));
 30762        factory.RegisterBuilder((int) CLASS_ID_COMPONENT.AVATAR_MODIFIER_AREA,
 863            () => BuildPoolableComponent((int) CLASS_ID_COMPONENT.AVATAR_MODIFIER_AREA));
 30764        factory.RegisterBuilder((int) CLASS_ID_COMPONENT.CAMERA_MODE_AREA, BuildComponent<CameraModeArea>);
 65
 30766        factory.createOverrides.Add((int) CLASS_ID_COMPONENT.TRANSFORM, HandleAvatarAttachExclusivity);
 67
 30768        CoroutineStarter.Start(PrewarmPoolablePools());
 30769    }
 70
 71    private IEnumerator PrewarmPoolablePools()
 72    {
 30773        yield return null;
 30774        poolableComponentFactory.PrewarmPools();
 30775    }
 76
 77    private void HandleAvatarAttachExclusivity(int sceneNumber, long entityid, ref int classid, object data)
 78    {
 79        // NOTE: TRANSFORM and AVATAR_ATTACH can't be used in the same Entity at the same time.
 80        // so we remove AVATAR_ATTACH (if exists) when a TRANSFORM is created.
 22981        IParcelScene scene = Environment.i.world.state.GetScene(sceneNumber);
 22982        IDCLEntity entity = scene.entities[entityid];
 83
 22984        if (scene.componentsManagerLegacy.TryGetBaseComponent(entity, CLASS_ID_COMPONENT.AVATAR_ATTACH, out IEntityCompo
 85        {
 086            component.Cleanup();
 087            scene.componentsManagerLegacy.RemoveComponent(entity, CLASS_ID_COMPONENT.AVATAR_ATTACH);
 88        }
 22989    }
 90
 91    private static T BuildComponent<T>() where T: IComponent, new() =>
 61392        new ();
 93
 94    private IComponent BuildPoolableComponent(int classId) =>
 5395        poolableComponentFactory.CreateItemFromId<BaseComponent>((CLASS_ID_COMPONENT)classId);
 96
 97    public void Dispose()
 98    {
 30799        IRuntimeComponentFactory factory = Environment.i.world.componentFactory;
 100
 307101        if (factory == null)
 3102            return;
 103
 104        // Transform
 304105        factory.UnregisterBuilder((int) CLASS_ID_COMPONENT.TRANSFORM);
 304106        factory.UnregisterBuilder((int) CLASS_ID_COMPONENT.AVATAR_ATTACH);
 107
 108        // Shapes
 304109        factory.UnregisterBuilder((int) CLASS_ID.BOX_SHAPE);
 304110        factory.UnregisterBuilder((int) CLASS_ID.SPHERE_SHAPE);
 304111        factory.UnregisterBuilder((int) CLASS_ID.CYLINDER_SHAPE);
 304112        factory.UnregisterBuilder((int) CLASS_ID.CONE_SHAPE);
 304113        factory.UnregisterBuilder((int) CLASS_ID.PLANE_SHAPE);
 304114        factory.UnregisterBuilder((int) CLASS_ID.GLTF_SHAPE);
 304115        factory.UnregisterBuilder((int) CLASS_ID.OBJ_SHAPE);
 304116        factory.UnregisterBuilder((int) CLASS_ID_COMPONENT.TEXT_SHAPE);
 117        //
 304118        factory.UnregisterBuilder((int) CLASS_ID_COMPONENT.BILLBOARD);
 304119        factory.UnregisterBuilder((int) CLASS_ID_COMPONENT.SMART_ITEM);
 120
 121        // Materials
 304122        factory.UnregisterBuilder((int) CLASS_ID.BASIC_MATERIAL);
 304123        factory.UnregisterBuilder((int) CLASS_ID.PBR_MATERIAL);
 304124        factory.UnregisterBuilder((int) CLASS_ID.TEXTURE);
 304125        factory.UnregisterBuilder((int) CLASS_ID.AVATAR_TEXTURE);
 126
 127        // Audio
 304128        factory.UnregisterBuilder((int) CLASS_ID.AUDIO_CLIP);
 304129        factory.UnregisterBuilder((int) CLASS_ID_COMPONENT.AUDIO_SOURCE);
 304130        factory.UnregisterBuilder((int) CLASS_ID_COMPONENT.AUDIO_STREAM);
 131
 132        // Video
 304133        factory.UnregisterBuilder((int) CLASS_ID.VIDEO_CLIP);
 304134        factory.UnregisterBuilder((int) CLASS_ID.VIDEO_TEXTURE);
 135
 136        // Builder in world
 304137        factory.UnregisterBuilder((int) CLASS_ID.NAME);
 304138        factory.UnregisterBuilder((int) CLASS_ID.LOCKED_ON_EDIT);
 304139        factory.UnregisterBuilder((int) CLASS_ID.VISIBLE_ON_EDIT);
 140
 141        // Others
 304142        factory.UnregisterBuilder((int) CLASS_ID_COMPONENT.AVATAR_SHAPE);
 304143        factory.UnregisterBuilder((int) CLASS_ID_COMPONENT.ANIMATOR);
 304144        factory.UnregisterBuilder((int) CLASS_ID_COMPONENT.GIZMOS);
 304145        factory.UnregisterBuilder((int) CLASS_ID_COMPONENT.AVATAR_MODIFIER_AREA);
 304146        factory.UnregisterBuilder((int) CLASS_ID_COMPONENT.CAMERA_MODE_AREA);
 304147        factory.UnregisterBuilder((int) CLASS_ID.FONT);
 148
 149
 304150        factory.createOverrides.Remove((int) CLASS_ID_COMPONENT.TRANSFORM);
 304151    }
 152}