/// <summary>
        ///     Register a prefab with a KitbashConfig to be applied when the vanilla prefabs are available
        /// </summary>
        /// <param name="prefab">Prefab to add kitbashed parts to</param>
        /// <param name="kitbashConfig">KitbashConfig to apply to the prefab</param>
        /// <returns>The KitbashObject container for this prefab</returns>
        public KitbashObject AddKitbash(GameObject prefab, KitbashConfig kitbashConfig)
        {
            if (prefab.transform.parent == null)
            {
                string name = prefab.name;
                prefab      = Object.Instantiate(prefab, PrefabManager.Instance.PrefabContainer.transform);
                prefab.name = name;
            }
            KitbashObject kitbashObject = new KitbashObject
            {
                Config = kitbashConfig,
                Prefab = prefab
            };

            KitbashObjects.Add(kitbashObject);
            return(kitbashObject);
        }
 /// <summary>
 ///     Apply kitbash to a single object.
 /// </summary>
 /// <param name="kitbashObject"></param>
 /// <returns></returns>
 private bool ApplyKitbash(KitbashObject kitbashObject)
 {
     foreach (KitbashSourceConfig config in kitbashObject.Config.KitbashSources)
     {
         if (!Instance.Kitbash(kitbashObject.Prefab, config))
         {
             return(false);
         }
     }
     if (kitbashObject.Config.Layer != null)
     {
         int layer = LayerMask.NameToLayer(kitbashObject.Config.Layer);
         foreach (Transform transform in kitbashObject.Prefab.GetComponentsInChildren <Transform>())
         {
             transform.gameObject.layer = layer;
         }
     }
     kitbashObject.OnKitbashApplied?.SafeInvoke();
     return(true);
 }