private static Designator_Build FindAllowedDesignatorRecursive(Designator designator, BuildableDef buildable, bool mustBeVisible)
        {
            if (!Current.Game.Rules.DesignatorAllowed(designator))
            {
                return(null);
            }
            if (mustBeVisible && !designator.Visible)
            {
                return(null);
            }
            Designator_Build designator_Build = designator as Designator_Build;

            if (designator_Build != null && designator_Build.PlacingDef == buildable)
            {
                return(designator_Build);
            }
            Designator_Dropdown designator_Dropdown = designator as Designator_Dropdown;

            if (designator_Dropdown != null)
            {
                for (int i = 0; i < designator_Dropdown.Elements.Count; i++)
                {
                    Designator_Build designator_Build2 = BuildCopyCommandUtility.FindAllowedDesignatorRecursive(designator_Dropdown.Elements[i], buildable, mustBeVisible);
                    if (designator_Build2 != null)
                    {
                        return(designator_Build2);
                    }
                }
            }
            return(null);
        }
        public static Designator_Build FindAllowedDesignator(BuildableDef buildable, bool mustBeVisible = true)
        {
            List <DesignationCategoryDef> allDefsListForReading = DefDatabase <DesignationCategoryDef> .AllDefsListForReading;

            for (int i = 0; i < allDefsListForReading.Count; i++)
            {
                List <Designator> allResolvedDesignators = allDefsListForReading[i].AllResolvedDesignators;
                for (int j = 0; j < allResolvedDesignators.Count; j++)
                {
                    Designator_Build designator_Build = BuildCopyCommandUtility.FindAllowedDesignatorRecursive(allResolvedDesignators[j], buildable, mustBeVisible);
                    if (designator_Build != null)
                    {
                        return(designator_Build);
                    }
                }
            }
            return(null);
        }