public void Apply(LevelDescription levelDescription, EntityManager entityManager) { var entities = entityManager.GetAllEntities(); for (int i = 0; i < entities.Length; i++) { if (entityManager.HasComponent <Slot>(entities[i])) { var slotPosition = entityManager.GetComponentData <SlotPosition>(entities[i]); var x = slotPosition.Value.x; var y = slotPosition.Value.y; var position = entityManager.GetComponentData <Position>(entities[i]).Value; var slot = entities[i]; entityManager.AddComponentData(slot, new PossibleNeighbours() { Value = FieldUtils.GetNeighbour(x, y, levelDescription.Width, levelDescription.Height) }); var chipDescription = levelDescription.GetChipDescription(slotPosition.Value); if (chipDescription.ChipType == ChipType.None) { continue; } var colorsCount = Mathf.Min(_chipsPrefabs.Length, levelDescription.ColorCount); var color = (chipDescription.Color == ChipColor.Random) ? (ChipColor)Random.Range(0, colorsCount) : chipDescription.Color; var chip = CreateChip(entityManager, slot, position, color); entityManager.AddComponentData(slot, new ChipReference() { Value = chip }); } } entities.Dispose(); }