Пример #1
0
 public static void CharaMigrateUI_OnBeforeStart_AddElements(CharaMigrateUI __instance) => AddElements(null, null, __instance);
Пример #2
0
        private static void AddElements(CharaChangeUI change, CharaLookEditUI lookedit, CharaMigrateUI migrate)
        {
            Traverse trav;

            if (change != null)
            {
                trav = Traverse.Create(change);
            }
            else if (lookedit != null)
            {
                trav = Traverse.Create(lookedit);
            }
            else if (migrate != null)
            {
                trav = Traverse.Create(migrate);
            }
            else
            {
                return;
            }

            trav.Field("_infos").SetValue(new GameLoadCharaFileSystem.GameCharaFileInfo[girlCount]);

            var oldelements = trav.Field("_elements").GetValue <RectTransform[]>();
            List <RectTransform> newelements = new List <RectTransform>();

            newelements.AddRange(oldelements);

            var           oldcharaButtons = trav.Field("_charaButtons").GetValue <Button[]>();
            List <Button> newCharaButtons = new List <Button>();

            newCharaButtons.AddRange(oldcharaButtons);

            var         oldcharaTexts = trav.Field("_charaTexts").GetValue <Text[]>();
            List <Text> newCharaTexts = new List <Text>();

            newCharaTexts.AddRange(oldcharaTexts);

            List <Button> newCharaArrowButtons = new List <Button>();

            if (migrate != null)
            {
                var oldcharaArrowButtons = trav.Field("_charaArrowButtons").GetValue <Button[]>();
                newCharaArrowButtons.AddRange(oldcharaArrowButtons);
            }

            int oldElementsLength = oldelements.Length;

            for (int i = 0; i < girlCount - oldElementsLength; i++)
            {
                var copy = Instantiate(oldelements[oldElementsLength - 1], oldelements[oldElementsLength - 1].transform.parent);
                copy.name = $"Element_{i+oldElementsLength:00}";

                newelements.Add(copy);
                newCharaButtons.Add(copy.transform.Find("Button").GetComponent <Button>());
                newCharaTexts.Add(copy.transform.Find("Button/Text").GetComponent <Text>());

                if (migrate != null)
                {
                    newCharaArrowButtons.Add(copy.transform.Find("arrow").GetComponent <Button>());
                }
            }

            trav.Field("_elements").SetValue(newelements.ToArray());
            trav.Field("_charaButtons").SetValue(newCharaButtons.ToArray());
            trav.Field("_charaTexts").SetValue(newCharaTexts.ToArray());

            if (migrate != null)
            {
                trav.Field("_charaArrowButtons").SetValue(newCharaArrowButtons.ToArray());
            }
        }