короче есть такая система поэтапной сборки блюпринта, давай сделай так чтобы в ui еще отображалось сколько этапов, какой сейчас этап, сколько деталей на этом этапе выполнено и осталось. и типо это все включалось по туглу этот ui вот тут SubscribeAllBlueprints(List<DronePart> droneParts) будет еще булл надо ли отображать этот ui . вот код using System.Collections.Generic;
using AYellowpaper.SerializedCollections;
using UnityEngine;
using UnityEngine.Events;

public class BlueprintManager : StaticInstance<BlueprintManager>
{
    public List<Blueprint> blueprints;
    public UnityEvent onAllBlueprintsFilled;
    
    public int currentStageIndex = 0;

    public SerializedDictionary<int, List<Blueprint>> blueprintsByStage = new SerializedDictionary<int, List<Blueprint>>();
    
    public void SubscribeAllBlueprints(List<DronePart> droneParts)
    {
        blueprints.Clear();
        blueprintsByStage.Clear();
        
        // Подписываемся на события заполнения каждого блюпринта
        foreach (var dronePart in droneParts)
        {
            if (dronePart.TryGetComponent(out Blueprint blueprint))
            {
                if (!blueprintsByStage.ContainsKey(blueprint.stageIndex))
                {
                    blueprintsByStage[blueprint.stageIndex] = new List<Blueprint>();
                }

                blueprintsByStage[blueprint.stageIndex].Add(blueprint);

                // Подписываемся на событие заполнения блюпринта
                blueprint.OnBlueprintFilled += OnBlueprintFilled;

                // Устанавливаем видимость блюпринта в зависимости от текущего этапа
                if (blueprint.stageIndex == currentStageIndex)
                {
                    blueprint.gameObject.SetActive(true);
                }
                else
                {
                    blueprint.gameObject.SetActive(false);
                }
                blueprints.Add(blueprint);
            }
        }
    }
    
    
    private void OnBlueprintFilled(Blueprint bp)
    {
        NotifyExamManager();
        // Проверяем, заполнены ли все блюпринты текущего этапа
        bool stageCompleted = true;
        foreach (Blueprint blueprint in blueprintsByStage[currentStageIndex])
        {
            if (!blueprint.IsFilled)
            {
                stageCompleted = false;
                break;
            }
        }

        if (stageCompleted)
        {
            ProceedToNextStage();
        }
    }

    private void ProceedToNextStage()
    {
        // Скрываем блюпринты предыдущего этапа
        foreach (Blueprint bp in blueprintsByStage[currentStageIndex])
        {
            bp.gameObject.SetActive(false);
        }

        currentStageIndex++;

        // Проверяем, есть ли следующий этап
        if (blueprintsByStage.ContainsKey(currentStageIndex))
        {
            // Показываем блюпринты нового этапа
            foreach (Blueprint bp in blueprintsByStage[currentStageIndex])
            {
                bp.gameObject.SetActive(true);
            }
        }
        else
        {
            Debug.Log("Сборка завершена!");
            onAllBlueprintsFilled.Invoke();
        }
    }

    private void NotifyExamManager()
    {
        ExamManager.Instance?.IncrementDetailCount();
    }

    private void Start()
    {
        onAllBlueprintsFilled.AddListener(OnAllBlueprintsFilled);
    }

    private void OnAllBlueprintsFilled()
    {
        ExamManager.Instance?.EndExam();
    }
}using EasyButtons;
using UnityEngine;

[RequireComponent(typeof(DronePart))]
public class Blueprint : MonoBehaviour
{
    [HideInInspector] public DronePart dronePart;
    public bool IsFilled { get; private set; }

    public int stageIndex; // Этап, к которому относится блюпринт

    public delegate void BlueprintFilledHandler(Blueprint blueprint);
    public event BlueprintFilledHandler OnBlueprintFilled;

    public void Fill()
    {
        if (!IsFilled)
        {
            IsFilled = true;
            OnBlueprintFilled?.Invoke(this); // Передаем ссылку на себя для использования в обработчике
        }
    }
    
    void Start()
    {
        dronePart = GetComponent<DronePart>();
    }
}