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); } }
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); } }