public static Transform AddNewSubCategory(UI_ToggleGroupCtrl mainCategory, MakerCategory subCategory)
        {
            KoikatuAPI.Logger.LogDebug($"Adding custom subcategory {subCategory.SubCategoryName} to {mainCategory.transform.name}");

            var tr = Object.Instantiate(SubCategoryCopy.gameObject, mainCategory.transform, true).transform;

            tr.name = subCategory.SubCategoryName;
            var trTop = tr.Find("CustomSubcategoryTop");

            trTop.name = subCategory.SubCategoryName + "Top";

            foreach (Transform oldObj in trTop.transform)
            {
                Object.Destroy(oldObj.gameObject);
            }

            tr.GetComponentInChildren <TextMeshProUGUI>().text = GetSubcategoryDisplayName(subCategory);

            var tgl = tr.GetComponent <Toggle>();

            tgl.group = mainCategory.transform.GetComponent <ToggleGroup>();

            var cgroup = trTop.GetComponent <CanvasGroup>();

            mainCategory.items = mainCategory.items.AddToArray(new UI_ToggleGroupCtrl.ItemInfo {
                tglItem = tgl, cgItem = cgroup
            });

            KoikatuAPI.Instance.StartCoroutine(FinishInit(trTop));

            tr.gameObject.SetActive(true);

            return(tr);
        }
Esempio n. 2
0
        /// <summary>
        /// Needs to run before UI_ToggleGroupCtrl.Start of the category runs, or it won't get added properly
        /// </summary>
        internal static void AddMissingSubCategories(UI_ToggleGroupCtrl mainCategory)
        {
            var categoryTransfrom = mainCategory.transform;

            // Can break stuff, 06_SystemTop might be fine but needs testing
            if (categoryTransfrom.name == "04_AccessoryTop" || categoryTransfrom.name == "06_SystemTop")
            {
                return;
            }

            // Sorting breaks hair selector layout, too lazy to fix
            var noSorting = categoryTransfrom.name == "02_HairTop";

            var transformsToSort = new List <KeyValuePair <Transform, int> >();

            foreach (var category in _categories)
            {
                if (categoryTransfrom.name != category.CategoryName)
                {
                    continue;
                }

                var categorySubTransform = categoryTransfrom.Find(category.SubCategoryName)
                                           ?? SubCategoryCreator.AddNewSubCategory(mainCategory, category);

                transformsToSort.Add(new KeyValuePair <Transform, int>(categorySubTransform, category.Position));
            }

            if (noSorting)
            {
                return;
            }

            foreach (Transform subTransform in categoryTransfrom)
            {
                if (transformsToSort.Any(x => x.Key == subTransform))
                {
                    continue;
                }

                var builtInCategory = MakerConstants.GetBuiltInCategory(categoryTransfrom.name, subTransform.name);
                if (builtInCategory != null)
                {
                    transformsToSort.Add(new KeyValuePair <Transform, int>(subTransform, builtInCategory.Position));
                }
                else
                {
                    KoikatuAPI.Logger.LogWarning($"Missing MakerCategory for existing transfrom {categoryTransfrom.name} / {subTransform.name}");
                }
            }

            var index = 0;

            foreach (var tuple in transformsToSort.OrderBy(x => x.Value))
            {
                tuple.Key.SetSiblingIndex(index++);
            }

            KoikatuAPI.Instance.StartCoroutine(FixCategoryContentOffsets(mainCategory));
        }
Esempio n. 3
0
            public static void HBeforeToggleGroupStart(UI_ToggleGroupCtrl __instance)
            {
                var categoryTransfrom = __instance.transform;

                if (categoryTransfrom?.parent != null && categoryTransfrom.parent.name == "CvsMenuTree")
                {
                    if (!_makerStarting)
                    {
                        InsideMaker    = true;
                        _makerStarting = true;
                        OnRegisterCustomSubCategories();
                        KoikatuAPI.Instance.StartCoroutine(OnMakerLoadingCo());
                    }

                    // Have to add missing subcategories now, before UI_ToggleGroupCtrl.Start runs
                    MakerInterfaceCreator.AddMissingSubCategories(__instance);
                }
            }
Esempio n. 4
0
        private static IEnumerator FixCategoryContentOffsets(UI_ToggleGroupCtrl mainCategory)
        {
            yield return(null);

            const int padding = 40;
            var       index   = 0;

            foreach (Transform tab in mainCategory.transform)
            {
                if (!tab.gameObject.activeSelf)
                {
                    continue;
                }

                var contents = tab.Cast <Transform>().First(x => !x.name.Equals("imgOff"));
                var p        = contents.localPosition;
                p.y = padding * index;
                contents.localPosition = p;
                index++;
            }
        }
        public static Transform AddNewSubCategory(UI_ToggleGroupCtrl mainCategory, MakerCategory subCategory)
        {
            KoikatuAPI.Logger.LogDebug($"Adding custom subcategory {subCategory.SubCategoryName} to {mainCategory.transform.name}");

            var tr = Object.Instantiate(SubCategoryCopy.gameObject, mainCategory.transform, true).transform;

            tr.name = subCategory.SubCategoryName;
            var trTop = tr.Find("CustomSubcategoryTop");

            trTop.name = subCategory.SubCategoryName + "Top";

            foreach (Transform oldObj in trTop.transform)
            {
                Object.Destroy(oldObj.gameObject);
            }

            tr.GetComponentInChildren <TextMeshProUGUI>().text = GetSubcategoryDisplayName(subCategory);

            var tgl = tr.GetComponent <Toggle>();

            tgl.group = mainCategory.transform.GetComponent <ToggleGroup>();

            var cgroup = trTop.GetComponent <CanvasGroup>();

            // There's an item with null contents in body tab that makes UI code crash when switching tabs when custom page is selected
            // it looks useless so remove it
            mainCategory.items = mainCategory.items.Where(x => x.tglItem != null).AddItem(new UI_ToggleGroupCtrl.ItemInfo {
                tglItem = tgl, cgItem = cgroup
            }).ToArray();

            KoikatuAPI.Instance.StartCoroutine(FinishInit(trTop));

            tr.gameObject.SetActive(true);

            return(tr);
        }