< Summary

Class:CoreComponentsPlugin
Assembly:DCL.Plugins.CoreComponents
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/DCLPlugins/CoreComponentsPlugin/CoreComponentsPlugin.cs
Covered lines:89
Uncovered lines:2
Coverable lines:91
Total lines:160
Line coverage:97.8% (89 of 91)
Covered branches:0
Total branches:0

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
 39712    public CoreComponentsPlugin()
 13    {
 39714        poolableComponentFactory = Resources.Load<PoolableComponentFactory>("PoolableCoreComponentsFactory");
 39715        IRuntimeComponentFactory factory = Environment.i.world.componentFactory;
 16
 17        // Transform
 39718        factory.RegisterBuilder((int) CLASS_ID_COMPONENT.TRANSFORM, BuildComponent<DCLTransform>);
 39719        factory.RegisterBuilder((int) CLASS_ID_COMPONENT.AVATAR_ATTACH, BuildComponent<AvatarAttachComponent>);
 20
 21        // Shapes
 39722        factory.RegisterBuilder((int) CLASS_ID.BOX_SHAPE, BuildComponent<BoxShape>);
 39723        factory.RegisterBuilder((int) CLASS_ID.SPHERE_SHAPE, BuildComponent<SphereShape>);
 39724        factory.RegisterBuilder((int) CLASS_ID.CYLINDER_SHAPE, BuildComponent<CylinderShape>);
 39725        factory.RegisterBuilder((int) CLASS_ID.CONE_SHAPE, BuildComponent<ConeShape>);
 39726        factory.RegisterBuilder((int) CLASS_ID.PLANE_SHAPE, BuildComponent<PlaneShape>);
 39727        factory.RegisterBuilder((int) CLASS_ID.GLTF_SHAPE, BuildComponent<GLTFShape>);
 39728        factory.RegisterBuilder((int) CLASS_ID.OBJ_SHAPE, BuildComponent<OBJShape>);
 39729        factory.RegisterBuilder((int) CLASS_ID_COMPONENT.TEXT_SHAPE,
 1130            () => BuildPoolableComponent((int) CLASS_ID_COMPONENT.TEXT_SHAPE));
 31        //
 39732        factory.RegisterBuilder((int) CLASS_ID_COMPONENT.BILLBOARD,
 433            () => BuildPoolableComponent((int) CLASS_ID_COMPONENT.BILLBOARD));
 39734        factory.RegisterBuilder((int) CLASS_ID_COMPONENT.SMART_ITEM,
 435            () => BuildPoolableComponent((int) CLASS_ID_COMPONENT.SMART_ITEM));
 36
 37        // Materials
 39738        factory.RegisterBuilder((int) CLASS_ID.BASIC_MATERIAL, BuildComponent<BasicMaterial>);
 39739        factory.RegisterBuilder((int) CLASS_ID.PBR_MATERIAL, BuildComponent<PBRMaterial>);
 39740        factory.RegisterBuilder((int) CLASS_ID.TEXTURE, BuildComponent<DCLTexture>);
 39741        factory.RegisterBuilder((int) CLASS_ID.AVATAR_TEXTURE, BuildComponent<DCLAvatarTexture>);
 42
 43        // Audio
 39744        factory.RegisterBuilder((int) CLASS_ID.AUDIO_CLIP, BuildComponent<DCLAudioClip>);
 39745        factory.RegisterBuilder((int) CLASS_ID_COMPONENT.AUDIO_SOURCE,
 1546            () => BuildPoolableComponent((int) CLASS_ID_COMPONENT.AUDIO_SOURCE));
 39747        factory.RegisterBuilder((int) CLASS_ID_COMPONENT.AUDIO_STREAM,
 448            () => BuildPoolableComponent((int) CLASS_ID_COMPONENT.AUDIO_STREAM));
 49
 50        // Video
 39751        factory.RegisterBuilder((int) CLASS_ID.VIDEO_CLIP, BuildComponent<DCLVideoClip>);
 39752        factory.RegisterBuilder((int) CLASS_ID.VIDEO_TEXTURE, BuildComponent<DCLVideoTexture>);
 53
 54        // Others
 39755        factory.RegisterBuilder((int) CLASS_ID.FONT, BuildComponent<DCLFont>);
 39756        factory.RegisterBuilder((int) CLASS_ID_COMPONENT.AVATAR_SHAPE,
 557            () => BuildPoolableComponent((int) CLASS_ID_COMPONENT.AVATAR_SHAPE));
 39758        factory.RegisterBuilder((int) CLASS_ID_COMPONENT.ANIMATOR,
 859            () => BuildPoolableComponent((int) CLASS_ID_COMPONENT.ANIMATOR));
 39760        factory.RegisterBuilder((int) CLASS_ID_COMPONENT.GIZMOS,
 161            () => BuildPoolableComponent((int) CLASS_ID_COMPONENT.GIZMOS));
 39762        factory.RegisterBuilder((int) CLASS_ID_COMPONENT.AVATAR_MODIFIER_AREA,
 863            () => BuildPoolableComponent((int) CLASS_ID_COMPONENT.AVATAR_MODIFIER_AREA));
 39764        factory.RegisterBuilder((int) CLASS_ID_COMPONENT.QUEST_TRACKING_INFORMATION,
 565            () => BuildPoolableComponent((int) CLASS_ID_COMPONENT.QUEST_TRACKING_INFORMATION));
 39766        factory.RegisterBuilder((int) CLASS_ID_COMPONENT.CAMERA_MODE_AREA, BuildComponent<CameraModeArea>);
 67
 39768        factory.createOverrides.Add((int) CLASS_ID_COMPONENT.TRANSFORM, HandleAvatarAttachExclusivity);
 69
 39770        CoroutineStarter.Start(PrewarmPoolablePools());
 39771    }
 72
 73    IEnumerator PrewarmPoolablePools()
 74    {
 39775        yield return null;
 39776        poolableComponentFactory.PrewarmPools();
 39777    }
 78
 79    private void HandleAvatarAttachExclusivity(string sceneid, long entityid, ref int classid, object data)
 80    {
 81        // NOTE: TRANSFORM and AVATAR_ATTACH can't be used in the same Entity at the same time.
 82        // so we remove AVATAR_ATTACH (if exists) when a TRANSFORM is created.
 27483        IParcelScene scene = Environment.i.world.state.GetScene(sceneid);
 27484        IDCLEntity entity = scene.entities[entityid];
 85
 27486        if (scene.componentsManagerLegacy.TryGetBaseComponent(entity, CLASS_ID_COMPONENT.AVATAR_ATTACH, out IEntityCompo
 87        {
 088            component.Cleanup();
 089            scene.componentsManagerLegacy.RemoveComponent(entity, CLASS_ID_COMPONENT.AVATAR_ATTACH);
 90        }
 27491    }
 92
 93    protected T BuildComponent<T>()
 94        where T : IComponent, new()
 95    {
 66296        return new T();
 97    }
 98
 99    private IComponent BuildPoolableComponent(int classId)
 100    {
 65101        return poolableComponentFactory.CreateItemFromId<BaseComponent>((CLASS_ID_COMPONENT) classId);
 102    }
 103
 104    public void Dispose()
 105    {
 397106        IRuntimeComponentFactory factory = Environment.i.world.componentFactory;
 107
 397108        if (factory == null)
 3109            return;
 110
 111        // Transform
 394112        factory.UnregisterBuilder((int) CLASS_ID_COMPONENT.TRANSFORM);
 394113        factory.UnregisterBuilder((int) CLASS_ID_COMPONENT.AVATAR_ATTACH);
 114
 115        // Shapes
 394116        factory.UnregisterBuilder((int) CLASS_ID.BOX_SHAPE);
 394117        factory.UnregisterBuilder((int) CLASS_ID.SPHERE_SHAPE);
 394118        factory.UnregisterBuilder((int) CLASS_ID.CYLINDER_SHAPE);
 394119        factory.UnregisterBuilder((int) CLASS_ID.CONE_SHAPE);
 394120        factory.UnregisterBuilder((int) CLASS_ID.PLANE_SHAPE);
 394121        factory.UnregisterBuilder((int) CLASS_ID.GLTF_SHAPE);
 394122        factory.UnregisterBuilder((int) CLASS_ID.OBJ_SHAPE);
 394123        factory.UnregisterBuilder((int) CLASS_ID_COMPONENT.TEXT_SHAPE);
 124        //
 394125        factory.UnregisterBuilder((int) CLASS_ID_COMPONENT.BILLBOARD);
 394126        factory.UnregisterBuilder((int) CLASS_ID_COMPONENT.SMART_ITEM);
 127
 128        // Materials
 394129        factory.UnregisterBuilder((int) CLASS_ID.BASIC_MATERIAL);
 394130        factory.UnregisterBuilder((int) CLASS_ID.PBR_MATERIAL);
 394131        factory.UnregisterBuilder((int) CLASS_ID.TEXTURE);
 394132        factory.UnregisterBuilder((int) CLASS_ID.AVATAR_TEXTURE);
 133
 134        // Audio
 394135        factory.UnregisterBuilder((int) CLASS_ID.AUDIO_CLIP);
 394136        factory.UnregisterBuilder((int) CLASS_ID_COMPONENT.AUDIO_SOURCE);
 394137        factory.UnregisterBuilder((int) CLASS_ID_COMPONENT.AUDIO_STREAM);
 138
 139        // Video
 394140        factory.UnregisterBuilder((int) CLASS_ID.VIDEO_CLIP);
 394141        factory.UnregisterBuilder((int) CLASS_ID.VIDEO_TEXTURE);
 142
 143        // Builder in world
 394144        factory.UnregisterBuilder((int) CLASS_ID.NAME);
 394145        factory.UnregisterBuilder((int) CLASS_ID.LOCKED_ON_EDIT);
 394146        factory.UnregisterBuilder((int) CLASS_ID.VISIBLE_ON_EDIT);
 147
 148        // Others
 394149        factory.UnregisterBuilder((int) CLASS_ID_COMPONENT.AVATAR_SHAPE);
 394150        factory.UnregisterBuilder((int) CLASS_ID_COMPONENT.ANIMATOR);
 394151        factory.UnregisterBuilder((int) CLASS_ID_COMPONENT.GIZMOS);
 394152        factory.UnregisterBuilder((int) CLASS_ID_COMPONENT.AVATAR_MODIFIER_AREA);
 394153        factory.UnregisterBuilder((int) CLASS_ID_COMPONENT.QUEST_TRACKING_INFORMATION);
 394154        factory.UnregisterBuilder((int) CLASS_ID_COMPONENT.CAMERA_MODE_AREA);
 394155        factory.UnregisterBuilder((int) CLASS_ID.FONT);
 156
 157
 394158        factory.createOverrides.Remove((int) CLASS_ID_COMPONENT.TRANSFORM);
 394159    }
 160}