< 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
 40012    public CoreComponentsPlugin()
 13    {
 40014        poolableComponentFactory = Resources.Load<PoolableComponentFactory>("PoolableCoreComponentsFactory");
 40015        IRuntimeComponentFactory factory = Environment.i.world.componentFactory;
 16
 17        // Transform
 40018        factory.RegisterBuilder((int) CLASS_ID_COMPONENT.TRANSFORM, BuildComponent<DCLTransform>);
 40019        factory.RegisterBuilder((int) CLASS_ID_COMPONENT.AVATAR_ATTACH, BuildComponent<AvatarAttachComponent>);
 20
 21        // Shapes
 40022        factory.RegisterBuilder((int) CLASS_ID.BOX_SHAPE, BuildComponent<BoxShape>);
 40023        factory.RegisterBuilder((int) CLASS_ID.SPHERE_SHAPE, BuildComponent<SphereShape>);
 40024        factory.RegisterBuilder((int) CLASS_ID.CYLINDER_SHAPE, BuildComponent<CylinderShape>);
 40025        factory.RegisterBuilder((int) CLASS_ID.CONE_SHAPE, BuildComponent<ConeShape>);
 40026        factory.RegisterBuilder((int) CLASS_ID.PLANE_SHAPE, BuildComponent<PlaneShape>);
 40027        factory.RegisterBuilder((int) CLASS_ID.GLTF_SHAPE, BuildComponent<GLTFShape>);
 40028        factory.RegisterBuilder((int) CLASS_ID.OBJ_SHAPE, BuildComponent<OBJShape>);
 40029        factory.RegisterBuilder((int) CLASS_ID_COMPONENT.TEXT_SHAPE,
 1130            () => BuildPoolableComponent((int) CLASS_ID_COMPONENT.TEXT_SHAPE));
 31        //
 40032        factory.RegisterBuilder((int) CLASS_ID_COMPONENT.BILLBOARD,
 433            () => BuildPoolableComponent((int) CLASS_ID_COMPONENT.BILLBOARD));
 40034        factory.RegisterBuilder((int) CLASS_ID_COMPONENT.SMART_ITEM,
 435            () => BuildPoolableComponent((int) CLASS_ID_COMPONENT.SMART_ITEM));
 36
 37        // Materials
 40038        factory.RegisterBuilder((int) CLASS_ID.BASIC_MATERIAL, BuildComponent<BasicMaterial>);
 40039        factory.RegisterBuilder((int) CLASS_ID.PBR_MATERIAL, BuildComponent<PBRMaterial>);
 40040        factory.RegisterBuilder((int) CLASS_ID.TEXTURE, BuildComponent<DCLTexture>);
 40041        factory.RegisterBuilder((int) CLASS_ID.AVATAR_TEXTURE, BuildComponent<DCLAvatarTexture>);
 42
 43        // Audio
 40044        factory.RegisterBuilder((int) CLASS_ID.AUDIO_CLIP, BuildComponent<DCLAudioClip>);
 40045        factory.RegisterBuilder((int) CLASS_ID_COMPONENT.AUDIO_SOURCE,
 1546            () => BuildPoolableComponent((int) CLASS_ID_COMPONENT.AUDIO_SOURCE));
 40047        factory.RegisterBuilder((int) CLASS_ID_COMPONENT.AUDIO_STREAM,
 448            () => BuildPoolableComponent((int) CLASS_ID_COMPONENT.AUDIO_STREAM));
 49
 50        // Video
 40051        factory.RegisterBuilder((int) CLASS_ID.VIDEO_CLIP, BuildComponent<DCLVideoClip>);
 40052        factory.RegisterBuilder((int) CLASS_ID.VIDEO_TEXTURE, BuildComponent<DCLVideoTexture>);
 53
 54        // Others
 40055        factory.RegisterBuilder((int) CLASS_ID.FONT, BuildComponent<DCLFont>);
 40056        factory.RegisterBuilder((int) CLASS_ID_COMPONENT.AVATAR_SHAPE,
 557            () => BuildPoolableComponent((int) CLASS_ID_COMPONENT.AVATAR_SHAPE));
 40058        factory.RegisterBuilder((int) CLASS_ID_COMPONENT.ANIMATOR,
 859            () => BuildPoolableComponent((int) CLASS_ID_COMPONENT.ANIMATOR));
 40060        factory.RegisterBuilder((int) CLASS_ID_COMPONENT.GIZMOS,
 161            () => BuildPoolableComponent((int) CLASS_ID_COMPONENT.GIZMOS));
 40062        factory.RegisterBuilder((int) CLASS_ID_COMPONENT.AVATAR_MODIFIER_AREA,
 863            () => BuildPoolableComponent((int) CLASS_ID_COMPONENT.AVATAR_MODIFIER_AREA));
 40064        factory.RegisterBuilder((int) CLASS_ID_COMPONENT.QUEST_TRACKING_INFORMATION,
 565            () => BuildPoolableComponent((int) CLASS_ID_COMPONENT.QUEST_TRACKING_INFORMATION));
 40066        factory.RegisterBuilder((int) CLASS_ID_COMPONENT.CAMERA_MODE_AREA, BuildComponent<CameraModeArea>);
 67
 40068        factory.createOverrides.Add((int) CLASS_ID_COMPONENT.TRANSFORM, HandleAvatarAttachExclusivity);
 69
 40070        CoroutineStarter.Start(PrewarmPoolablePools());
 40071    }
 72
 73    IEnumerator PrewarmPoolablePools()
 74    {
 40075        yield return null;
 40076        poolableComponentFactory.PrewarmPools();
 40077    }
 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.
 27883        IParcelScene scene = Environment.i.world.state.GetScene(sceneid);
 27884        IDCLEntity entity = scene.entities[entityid];
 85
 27886        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        }
 27891    }
 92
 93    protected T BuildComponent<T>()
 94        where T : IComponent, new()
 95    {
 66796        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    {
 400106        IRuntimeComponentFactory factory = Environment.i.world.componentFactory;
 107
 400108        if (factory == null)
 3109            return;
 110
 111        // Transform
 397112        factory.UnregisterBuilder((int) CLASS_ID_COMPONENT.TRANSFORM);
 397113        factory.UnregisterBuilder((int) CLASS_ID_COMPONENT.AVATAR_ATTACH);
 114
 115        // Shapes
 397116        factory.UnregisterBuilder((int) CLASS_ID.BOX_SHAPE);
 397117        factory.UnregisterBuilder((int) CLASS_ID.SPHERE_SHAPE);
 397118        factory.UnregisterBuilder((int) CLASS_ID.CYLINDER_SHAPE);
 397119        factory.UnregisterBuilder((int) CLASS_ID.CONE_SHAPE);
 397120        factory.UnregisterBuilder((int) CLASS_ID.PLANE_SHAPE);
 397121        factory.UnregisterBuilder((int) CLASS_ID.GLTF_SHAPE);
 397122        factory.UnregisterBuilder((int) CLASS_ID.OBJ_SHAPE);
 397123        factory.UnregisterBuilder((int) CLASS_ID_COMPONENT.TEXT_SHAPE);
 124        //
 397125        factory.UnregisterBuilder((int) CLASS_ID_COMPONENT.BILLBOARD);
 397126        factory.UnregisterBuilder((int) CLASS_ID_COMPONENT.SMART_ITEM);
 127
 128        // Materials
 397129        factory.UnregisterBuilder((int) CLASS_ID.BASIC_MATERIAL);
 397130        factory.UnregisterBuilder((int) CLASS_ID.PBR_MATERIAL);
 397131        factory.UnregisterBuilder((int) CLASS_ID.TEXTURE);
 397132        factory.UnregisterBuilder((int) CLASS_ID.AVATAR_TEXTURE);
 133
 134        // Audio
 397135        factory.UnregisterBuilder((int) CLASS_ID.AUDIO_CLIP);
 397136        factory.UnregisterBuilder((int) CLASS_ID_COMPONENT.AUDIO_SOURCE);
 397137        factory.UnregisterBuilder((int) CLASS_ID_COMPONENT.AUDIO_STREAM);
 138
 139        // Video
 397140        factory.UnregisterBuilder((int) CLASS_ID.VIDEO_CLIP);
 397141        factory.UnregisterBuilder((int) CLASS_ID.VIDEO_TEXTURE);
 142
 143        // Builder in world
 397144        factory.UnregisterBuilder((int) CLASS_ID.NAME);
 397145        factory.UnregisterBuilder((int) CLASS_ID.LOCKED_ON_EDIT);
 397146        factory.UnregisterBuilder((int) CLASS_ID.VISIBLE_ON_EDIT);
 147
 148        // Others
 397149        factory.UnregisterBuilder((int) CLASS_ID_COMPONENT.AVATAR_SHAPE);
 397150        factory.UnregisterBuilder((int) CLASS_ID_COMPONENT.ANIMATOR);
 397151        factory.UnregisterBuilder((int) CLASS_ID_COMPONENT.GIZMOS);
 397152        factory.UnregisterBuilder((int) CLASS_ID_COMPONENT.AVATAR_MODIFIER_AREA);
 397153        factory.UnregisterBuilder((int) CLASS_ID_COMPONENT.QUEST_TRACKING_INFORMATION);
 397154        factory.UnregisterBuilder((int) CLASS_ID_COMPONENT.CAMERA_MODE_AREA);
 397155        factory.UnregisterBuilder((int) CLASS_ID.FONT);
 156
 157
 397158        factory.createOverrides.Remove((int) CLASS_ID_COMPONENT.TRANSFORM);
 397159    }
 160}