public override void OnInspectorGUI()
    {
        DrawDefaultInspector();

        PartsSpawnManager partsSpawnManager = (PartsSpawnManager)target;

        if (GUILayout.Button("Generate Parts Pool"))
        {
            partsSpawnManager.GenerateAllInitialPartPools();
        }
    }
    public void InitializeHandler()
    {
        startingPartType = partType;
        allAttatchedBasePartTypes.Add(startingPartType);

        justLeftHandPartLayerMask  = LayerMask.GetMask(new string[] { "LeftHandPart" });
        justRightHandPartLayerMask = LayerMask.GetMask(new string[] { "RightHandPart" });

        physicsObjectHandler = GetComponent <GeneralPhysicsObjectHandler>();

        grabInteractableScript = GetComponent <XRGrabInteractable>();
        mainRenderer           = GetComponent <Renderer>();

        mainPartColl = GetComponent <Collider>();

        rb = GetComponent <Rigidbody>();

        generalSoundEffectPlayer = FindObjectOfType <GeneralSoundEffectPlayer>();

        // If it has sub parts to manage...
        if (subPartInfoByObject.Count > 0)
        {
            handGrabbingController = FindObjectOfType <HandGrabbingController>();
            if (handGrabbingController == null)
            {
                Debug.LogError($"ERROR - ({gameObject.name}) - Could not find object of type HandGrabbingController");
                return;
            }

            foreach (GameObject subPart in subPartInfoByObject.Keys)
            {
                Collider subPartBaseColl = subPart.GetComponent <Collider>();
                if (subPartBaseColl != null)
                {
                    subPartBaseColl.enabled = false;
                }
                // Disable the extra colls and renderers
                subPart.transform.GetChild(0).gameObject.SetActive(false);
                Renderer subPartRenderer = subPart.GetComponent <Renderer>();
                if (subPartRenderer != null)
                {
                    subPartRenderer.enabled = false;
                }

                subPart.transform.GetChild(1).GetChild(1).gameObject.SetActive(false);

                DropZoneHandler dropZoneHandler = subPart.transform.GetChild(1).GetChild(0).GetComponent <DropZoneHandler>();
                dropZoneHandler.SetConnectedConveyorBeltHandler(this);
                dropZoneHandler.SetActiveTriggerLayerMask(0);
                // Notify it when an object is released to check if it is under a trigger
                handGrabbingController.AddOnObjectReleasedListener(dropZoneHandler.OnObjectReleased);

                allDropZoneHandlers.Add(dropZoneHandler);
            }
        }

        initialInteractableGrabbableLayerMask = grabInteractableScript.interactionLayerMask;

        partsSpawnManager = FindObjectOfType <PartsSpawnManager>();

        physicsObjectHandler.InitializeHandler();

        // Initialize with all parts disabled
        OnPartDisabled(false);

        hasInitializedOnce = true;
    }