Example #1
0
    public bool AddSharedComponentData <T>(Entity entity, T componentData, ManagedComponentStore managedComponentStore) where T : struct, ISharedComponentData
    {
        //TODO: optimize this (no need to move the entity to a new chunk twice)
        var added = AddComponent(entity, ComponentType.ReadWrite <T>());

        SetSharedComponentData(entity, componentData, managedComponentStore);
        return(added);
    }
Example #2
0
    public T GetSharedComponentData <T>(Entity entity, ManagedComponentStore managedComponentStore) where T : struct, ISharedComponentData
    {
        var typeIndex = TypeManager.GetTypeIndex <T>();

        EntityComponentStore->AssertEntityHasComponent(entity, typeIndex);

        var sharedComponentIndex = EntityComponentStore->GetSharedComponentDataIndex(entity, typeIndex);

        return(managedComponentStore.GetSharedComponentData <T>(sharedComponentIndex));
    }
Example #3
0
    public void SetSharedComponentData <T>(Entity entity, T componentData, ManagedComponentStore managedComponentStore) where T : struct, ISharedComponentData
    {
        if (m_IsMainThread)
        {
            BeforeStructuralChange();
        }

        var typeIndex     = TypeManager.GetTypeIndex <T>();
        var componentType = ComponentType.FromTypeIndex(typeIndex);

        EntityComponentStore->AssertEntityHasComponent(entity, typeIndex);

        var newSharedComponentDataIndex = managedComponentStore.InsertSharedComponent(componentData);

        EntityComponentStore->SetSharedComponentDataIndex(entity, componentType, newSharedComponentDataIndex);
        managedComponentStore.Playback(ref EntityComponentStore->ManagedChangesTracker);
        managedComponentStore.RemoveReference(newSharedComponentDataIndex);
    }
Example #4
0
    public static void SetComponentObject(ref EntityDataAccess dataAccess, Entity entity, ComponentType componentType, object componentObject, ManagedComponentStore managedComponentStore)
    {
#if ENABLE_UNITY_COLLECTIONS_CHECKS
        if (!componentType.IsManagedComponent)
        {
            throw new System.ArgumentException($"SetComponentObject must be called with a managed component type.");
        }
#endif
        var ptr = dataAccess.GetManagedComponentIndex(entity, componentType.TypeIndex);
        managedComponentStore.UpdateManagedComponentValue(ptr, componentObject, ref *dataAccess.EntityComponentStore);
    }
Example #5
0
    public void SetSharedComponentDataBoxedDefaultMustBeNull(Entity entity, int typeIndex, int hashCode, object componentData, ManagedComponentStore managedComponentStore)
    {
        if (m_IsMainThread)
        {
            BeforeStructuralChange();
        }

        EntityComponentStore->AssertEntityHasComponent(entity, typeIndex);

        var newSharedComponentDataIndex = 0;

        if (componentData != null) // null means default
        {
            newSharedComponentDataIndex = managedComponentStore.InsertSharedComponentAssumeNonDefault(typeIndex, hashCode, componentData);
        }

        var componentType = ComponentType.FromTypeIndex(typeIndex);

        EntityComponentStore->SetSharedComponentDataIndex(entity, componentType, newSharedComponentDataIndex);
        ManagedComponentStore.Playback(ref EntityComponentStore->ManagedChangesTracker);
        ManagedComponentStore.RemoveReference(newSharedComponentDataIndex);
    }
Example #6
0
    public void AddSharedComponentDataBoxedDefaultMustBeNull(UnsafeMatchingArchetypePtrList archetypeList, EntityQueryFilter filter, int typeIndex, int hashCode, object componentData, ManagedComponentStore managedComponentStore)
    {
        if (!m_IsMainThread)
        {
            throw new InvalidOperationException("Must be called from the main thread");
        }

        ComponentType componentType = ComponentType.FromTypeIndex(typeIndex);

        using (var chunks = ChunkIterationUtility.CreateArchetypeChunkArray(archetypeList, Allocator.TempJob, ref filter, DependencyManager))
        {
            if (chunks.Length == 0)
            {
                return;
            }
            var newSharedComponentDataIndex = 0;
            if (componentData != null) // null means default
            {
                newSharedComponentDataIndex = managedComponentStore.InsertSharedComponentAssumeNonDefault(typeIndex, hashCode, componentData);
            }

            AddSharedComponentData(chunks, newSharedComponentDataIndex, componentType);
            managedComponentStore.RemoveReference(newSharedComponentDataIndex);
        }
    }
Example #7
0
 public void AddSharedComponentDataBoxedDefaultMustBeNull(Entity entity, int typeIndex, int hashCode, object componentData, ManagedComponentStore managedComponentStore)
 {
     //TODO: optimize this (no need to move the entity to a new chunk twice)
     AddComponent(entity, ComponentType.FromTypeIndex(typeIndex));
     SetSharedComponentDataBoxedDefaultMustBeNull(entity, typeIndex, hashCode, componentData, managedComponentStore);
 }