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); }
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)); }
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); }
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); }
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); }
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); } }
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); }