Esempio n. 1
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);
            }
        }
Esempio n. 2
0
        public static void LoadParts()
        {
            if (MODManager.fileSystem == null)
            {
                return;
            }

            var baseMenuDic = MODManager.fileSystem.loadFilePathList.Where(x =>
            {
                var fileNmae = x.Key.Replace("_i_.menu", ".menu");
                if (Path.GetExtension(fileNmae) == ".menu")
                {
                    if (fileNmae.IndexOf("zurashi") == -1 && fileNmae.IndexOf("mekure") == -1 && fileNmae.IndexOf("porori") == -1)
                    {
                        return(!Regex.IsMatch(fileNmae, childRegex));
                    }
                }
                return(false);
            }
                                                                           );

            List <EditMenuItemData> editMenuDataList = new List <EditMenuItemData>();
            Dictionary <EditMenuItemData, string>         childMenuDataDictionary    = new Dictionary <EditMenuItemData, string>();
            Dictionary <EditMenuItemData, List <string> > parentInChildMenuFileNames = new Dictionary <EditMenuItemData, List <string> >();
            Dictionary <String, List <string> >           parentInDiffFileNames      = new Dictionary <String, List <string> >();
            Dictionary <String, EditMenuItemData>         parentInDiffData           = new Dictionary <string, EditMenuItemData>();

            foreach (var item in baseMenuDic)
            {
                using (var stream = new FileStream(item.Value, FileMode.Open))
                {
                    using (var binaryReader = new BinaryReader(stream))
                    {
                        var displayMenuFilesName = item.Key;


                        GetChildMenu(item.Key.Replace("_i_.menu", ".menu").Replace(".menu", ""), ref displayMenuFilesName);
                        var menuData = ReadMenuFile(binaryReader, item.Key);
                        if (menuData != null)
                        {
                            AddMenuItem(menuData, displayMenuFilesName, "", ref editMenuDataList, childMenuDataDictionary, parentInChildMenuFileNames, parentInDiffFileNames);
                            LoadChildMenu(item.Key.Replace("_i_.menu", ".menu").Replace(".menu", ""), item.Key, ref editMenuDataList, childMenuDataDictionary, parentInChildMenuFileNames, parentInDiffFileNames);
                            if (!String.IsNullOrEmpty(menuData.zurashiMenuFileName) || !String.IsNullOrEmpty(menuData.mekureMenuFileName) || !String.IsNullOrEmpty(menuData.mekureBackMenuFileName) || menuData.pororiMenuFilesName.Count > 0)
                            {
                                LoadDiffMenu(parentInDiffFileNames, parentInDiffData, ref editMenuDataList, childMenuDataDictionary, parentInChildMenuFileNames);
                            }
                        }
                    }
                }
            }

            EditMenuItemData.SortPriority(ref editMenuDataList, true);
            foreach (EditMenuItemData editMenuItemData2 in editMenuDataList)
            {
                if (childMenuDataDictionary.ContainsKey(editMenuItemData2))
                {
                    Util.invokePrivateSetter(typeof(EditMenuItemData), editMenuItemData2, "ParentMenu", EditMenuItemData.ItemFileNameDic[childMenuDataDictionary[editMenuItemData2]]);
                }
                if (parentInChildMenuFileNames.ContainsKey(editMenuItemData2))
                {
                    foreach (string key in parentInChildMenuFileNames[editMenuItemData2])
                    {
                        editMenuItemData2.ChildlenMenuList.Add(EditMenuItemData.ItemFileNameDic[key]);
                    }
                    EditMenuItemData.SortPriority(ref editMenuItemData2.m_childlenMenuList, true);
                }
            }
            foreach (EditMenuItemData editMenuItemData3 in editMenuDataList)
            {
                if (!EditMenuItemData.ItemMenuDic.ContainsKey(editMenuItemData3.Mpn))
                {
                    EditMenuItemData.ItemMenuDic.Add(editMenuItemData3.Mpn, new List <EditMenuItemData>());
                }
                EditMenuItemData.ItemMenuDic[editMenuItemData3.Mpn].Add(editMenuItemData3);
            }

            foreach (var item in parentInDiffFileNames)
            {
                foreach (var value in item.Value)
                {
                    EditMenuItemData.ItemFileNameDic[item.Key].ChildlenMenuList.Add(parentInDiffData[value]);
                }
            }
        }