< Summary

Class:InternalComponentWriteData
Assembly:ECS7Plugin.InternalECSComponents
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/DCLPlugins/ECS7/InternalECSComponents/InternalECSComponent.cs
Covered lines:5
Uncovered lines:0
Coverable lines:5
Total lines:95
Line coverage:100% (5 of 5)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
InternalComponentWriteData(...)0%110100%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/DCLPlugins/ECS7/InternalECSComponents/InternalECSComponent.cs

#LineLine coverage
 1using System;
 2using System.Collections.Generic;
 3using DCL.Controllers;
 4using DCL.ECS7.InternalComponents;
 5using DCL.ECSRuntime;
 6using DCL.Models;
 7
 8public readonly struct InternalComponentWriteData
 9{
 10    public readonly IParcelScene scene;
 11    public readonly long entityId;
 12    public readonly int componentId;
 13    public readonly InternalComponent data;
 14
 15    public InternalComponentWriteData(IParcelScene scene, long entityId, int componentId, InternalComponent data)
 16    {
 34217        this.scene = scene;
 34218        this.entityId = entityId;
 34219        this.componentId = componentId;
 34220        this.data = data;
 34221    }
 22}
 23
 24public class InternalECSComponent<T> : IInternalECSComponent<T> where T : InternalComponent
 25{
 26    private readonly ECSComponentsFactory componentsFactory;
 27    private readonly int componentId;
 28    private readonly ECSComponent<T> component;
 29    private readonly IList<InternalComponentWriteData> scheduledWrite;
 30
 31    public InternalECSComponent(InternalECSComponentsId id,
 32        ECSComponentsManager componentsManager,
 33        ECSComponentsFactory componentsFactory,
 34        Func<IECSComponentHandler<T>> handlerBuilder,
 35        IList<InternalComponentWriteData> scheduledWrite)
 36    {
 37        this.componentId = (int)id;
 38        this.componentsFactory = componentsFactory;
 39        this.scheduledWrite = scheduledWrite;
 40
 41        componentsFactory.AddOrReplaceComponent<T>(componentId, x => (T)x, handlerBuilder);
 42        component = (ECSComponent<T>)componentsManager.GetOrCreateComponent(componentId);
 43    }
 44
 45    public void PutFor(IParcelScene scene, IDCLEntity entity, T model)
 46    {
 47        PutFor(scene, entity.entityId, model);
 48    }
 49
 50    public void PutFor(IParcelScene scene, long entityId, T model)
 51    {
 52        model._dirty = true;
 53        scene.crdtExecutor.ExecuteWithoutStoringState(entityId, componentId, model);
 54        scheduledWrite.Add(new InternalComponentWriteData(scene, entityId, componentId, model));
 55    }
 56
 57    public void RemoveFor(IParcelScene scene, IDCLEntity entity, T defaultModel = null)
 58    {
 59        RemoveFor(scene, entity.entityId, defaultModel);
 60    }
 61
 62    public void RemoveFor(IParcelScene scene, long entityId, T defaultModel = null)
 63    {
 64        if (defaultModel != null)
 65        {
 66            defaultModel._dirty = true;
 67            scene.crdtExecutor.ExecuteWithoutStoringState(entityId, componentId, defaultModel);
 68            scheduledWrite.Add(new InternalComponentWriteData(scene, entityId, componentId, null));
 69        }
 70        else
 71        {
 72            scene.crdtExecutor.ExecuteWithoutStoringState(entityId, componentId, null);
 73        }
 74    }
 75
 76    public IECSReadOnlyComponentData<T> GetFor(IParcelScene scene, IDCLEntity entity)
 77    {
 78        return component.Get(scene, entity);
 79    }
 80
 81    public IECSReadOnlyComponentData<T> GetFor(IParcelScene scene, long entityId)
 82    {
 83        return component.Get(scene, entityId);
 84    }
 85
 86    public IReadOnlyList<KeyValueSetTriplet<IParcelScene, long, ECSComponentData<T>>> GetForAll()
 87    {
 88        return component.Get();
 89    }
 90
 91    public void Dispose()
 92    {
 93        componentsFactory.RemoveComponent(componentId);
 94    }
 95}