Пример #1
0
        public static void AddMenuItem(
            EditMenuItemDataPlus editMenuItemDataPlus, String displayMenuFiles, String parentMenuFileName,
            ref List <EditMenuItemData> editMenuDataList, Dictionary <EditMenuItemData, string> childMenuDataDictionary, Dictionary <EditMenuItemData, List <string> > parentInChildMenuFileNames,
            Dictionary <String, List <String> > parentInDiffFileNames, bool isDiffParts = false, Dictionary <String, EditMenuItemData> parentInDiffData = null)
        {
            if (!string.IsNullOrEmpty(parentMenuFileName))
            {
                childMenuDataDictionary.Add(editMenuItemDataPlus.editMenuItemData, editMenuItemDataPlus.editMenuItemData.MenuFileName);
            }
            string[] array2 = displayMenuFiles.Split(new char[]
            {
                '|'
            });
            List <string> list2 = new List <string>();

            foreach (string text2 in array2)
            {
                if (!string.IsNullOrEmpty(text2))
                {
                    list2.Add(text2);
                }
            }
            if (list2.Count > 0)
            {
                parentInChildMenuFileNames.Add(editMenuItemDataPlus.editMenuItemData, list2);
            }

            if (String.IsNullOrEmpty(parentMenuFileName))
            {
                parentMenuFileName = editMenuItemDataPlus.editMenuItemData.MenuFileName;
            }

            if (!String.IsNullOrEmpty(editMenuItemDataPlus.zurashiMenuFileName))
            {
                AddDiffFile(parentMenuFileName, editMenuItemDataPlus.zurashiMenuFileName, parentInDiffFileNames);
            }

            if (!String.IsNullOrEmpty(editMenuItemDataPlus.mekureMenuFileName))
            {
                AddDiffFile(parentMenuFileName, editMenuItemDataPlus.mekureMenuFileName, parentInDiffFileNames);
            }

            if (!String.IsNullOrEmpty(editMenuItemDataPlus.mekureBackMenuFileName))
            {
                AddDiffFile(parentMenuFileName, editMenuItemDataPlus.mekureBackMenuFileName, parentInDiffFileNames);
            }

            if (editMenuItemDataPlus.pororiMenuFilesName != null)
            {
                if (editMenuItemDataPlus.pororiMenuFilesName.Count() > 0)
                {
                    foreach (var item in editMenuItemDataPlus.pororiMenuFilesName)
                    {
                        AddDiffFile(parentMenuFileName, item, parentInDiffFileNames);
                    }
                }
            }

            if (isDiffParts && parentInDiffData != null)
            {
                if (!parentInDiffData.ContainsKey(editMenuItemDataPlus.editMenuItemData.MenuFileName))
                {
                    parentInDiffData.Add(editMenuItemDataPlus.editMenuItemData.MenuFileName, editMenuItemDataPlus.editMenuItemData);
                }
            }

            editMenuDataList.Add(editMenuItemDataPlus.editMenuItemData);
            if (!EditMenuItemData.ItemFileNameDic.ContainsKey(editMenuItemDataPlus.editMenuItemData.MenuFileName))
            {
                EditMenuItemData.ItemFileNameDic.Add(editMenuItemDataPlus.editMenuItemData.MenuFileName, editMenuItemDataPlus.editMenuItemData);
            }
        }
Пример #2
0
        public static EditMenuItemDataPlus ReadMenuFile(BinaryReader binaryReader, String menuFileName)
        {
            var menuSignature = binaryReader.ReadString();

            if (menuSignature == "CM3D2_MENU")
            {
                var editMenuItemDataPlus = new EditMenuItemDataPlus();
                var menuVersion          = binaryReader.ReadInt32();
                var txtPath          = binaryReader.ReadString();
                var partsName        = binaryReader.ReadString();
                var partsCategory    = binaryReader.ReadString();
                var partsDescription = binaryReader.ReadString();
                binaryReader.ReadInt32();
                var iconFileName      = "";
                var priority          = 0F;
                var mpnColorSet       = "null_mpn";
                var colorSetFilesName = "";
                var menuId            = UnityEngine.Random.Range(int.MinValue, int.MaxValue);
                var isDelete          = false;
                var multiColorID      = "NONE";

                var isNotEnd = true;
                while (isNotEnd)
                {
                    var num  = binaryReader.ReadByte();
                    var text = "";
                    for (int i = 0; i < num; i++)
                    {
                        text = text + "\"" + binaryReader.ReadString() + "\" ";
                    }

                    if (text != string.Empty)
                    {
                        var stringCom  = UTY.GetStringCom(text);
                        var stringList = UTY.GetStringList(text);
                        switch (stringCom)
                        {
                        case "icons":
                            iconFileName = stringList[1];
                            break;

                        case "priority":
                            priority = float.Parse(stringList[1]);
                            break;

                        case "color_set":
                            mpnColorSet       = stringList[1];
                            colorSetFilesName = stringList[2];
                            break;

                        case "リソース参照":
                            switch (stringList[1])
                            {
                            case "パンツずらし":
                                editMenuItemDataPlus.zurashiMenuFileName = stringList[2];
                                break;

                            case "めくれスカート":
                                editMenuItemDataPlus.mekureMenuFileName = stringList[2];
                                break;

                            case "めくれスカート後ろ":
                                editMenuItemDataPlus.mekureBackMenuFileName = stringList[2];
                                break;
                            }
                            break;
                        }
                    }
                    else
                    {
                        isNotEnd = false;
                    }
                }

                var editMenuItemData     = new EditMenuItemData();
                var editMenuItemDataType = typeof(EditMenuItemData);
                Util.invokePrivateSetter(editMenuItemDataType, editMenuItemData, "MenuRID", menuId);
                Util.invokePrivateSetter(editMenuItemDataType, editMenuItemData, "MenuFileName", menuFileName);
                if (!MODManager.fileSystem.loadFilePathList.ContainsKey(iconFileName))
                {
                    iconFileName = iconFileName.Replace("_I_", "_i_");
                }

                if (!MODManager.fileSystem.loadFilePathList.ContainsKey(iconFileName))
                {
                    iconFileName = iconFileName.ToLower();
                }

                Util.invokePrivateSetter(editMenuItemDataType, editMenuItemData, "IconFileName", iconFileName);
                Util.invokePrivateSetter(editMenuItemDataType, editMenuItemData, "ItemName", partsName);
                Util.invokePrivateSetter(editMenuItemDataType, editMenuItemData, "Mpn", (MPN)Enum.Parse(typeof(MPN), partsCategory));
                Util.invokePrivateSetter(editMenuItemDataType, editMenuItemData, "MpnColorSet", (MPN)Enum.Parse(typeof(MPN), mpnColorSet));
                Util.invokePrivateSetter(editMenuItemDataType, editMenuItemData, "ColorSetFilesName", colorSetFilesName);
                Util.invokePrivateSetter(editMenuItemDataType, editMenuItemData, "Priority", priority);
                Util.invokePrivateSetter(editMenuItemDataType, editMenuItemData, "ParentMenu", null);
                Util.invokePrivateSetter(editMenuItemDataType, editMenuItemData, "IsDelete", isDelete);
                Util.invokePrivateSetter(editMenuItemDataType, editMenuItemData, "MultiColorID", (MaidParts.PARTS_COLOR)Enum.Parse(typeof(MaidParts.PARTS_COLOR), multiColorID));
                editMenuItemDataPlus.editMenuItemData = editMenuItemData;

                var baseMenuFileName = menuFileName.Replace("_i_.menu", ".menu").Replace(".menu", "");
                if (baseMenuFileName.IndexOf("zurashi") == -1 && baseMenuFileName.IndexOf("mekure") == -1 && baseMenuFileName.IndexOf("porori") == -1)
                {
                    var pororiMenuDic = MODManager.fileSystem.loadFilePathList.Where(x => {
                        var fileNmae = x.Key.Replace("_i_.menu", ".menu").Replace("_i_", "");
                        if (Regex.IsMatch(fileNmae, baseMenuFileName + pororiRegex))
                        {
                            if (Path.GetExtension(fileNmae) == ".menu")
                            {
                                return(true);
                            }
                        }
                        return(false);
                    });

                    var pororiListKeyValue = pororiMenuDic.ToList();
                    var pororiList         = new List <String>();
                    foreach (var item in pororiListKeyValue)
                    {
                        pororiList.Add(item.Key);
                    }
                    editMenuItemDataPlus.pororiMenuFilesName = pororiList;
                }

                return(editMenuItemDataPlus);
            }
            else
            {
                return(null);
            }
        }