예제 #1
0
        public static void ManMenuAdd(PhotoManEditManager self)
        {
            if (ManMenuAdd_run)
            {
                return;
            }
            ManMenuAdd_run = true;

            FieldInfo        menu_file_name_list_    = typeof(PhotoManEditManager).GetField("menu_file_name_list_", BindingFlags.Static | BindingFlags.NonPublic);
            HashSet <string> menu_filename_list_val  = (HashSet <string>)menu_file_name_list_.GetValue(null);
            FieldInfo        man_body_menu_list_self = self.GetType().GetField("man_body_menu_list_", BindingFlags.NonPublic | BindingFlags.Instance);
            FieldInfo        man_head_menu_list_self = self.GetType().GetField("man_head_menu_list_", BindingFlags.NonPublic | BindingFlags.Instance);


            HashSet <string>           menu_list = new HashSet <string>();
            List <SceneEdit.SMenuItem> head_list = new List <SceneEdit.SMenuItem>();
            List <SceneEdit.SMenuItem> body_list = new List <SceneEdit.SMenuItem>();
            MPN body = (MPN)Enum.Parse(typeof(MPN), "body");

            foreach (string filename in GameUty.ModOnlysMenuFiles)
            {
                if (filename.Contains("mhead") || filename.Contains("mbody"))
                {
                    menu_list.Add(filename);
                }
            }

            Debug.Log($"menu list pre union{ menu_list}");
            if (menu_filename_list_val != null)
            {
                menu_list.UnionWith(menu_filename_list_val);
            }
            Debug.Log($"menu list post union{ menu_list}");
            foreach (string filename in menu_list)

            {
                SceneEdit.SMenuItem smenuItem = new SceneEdit.SMenuItem();
                if (SceneEdit.GetMenuItemSetUP(smenuItem, filename, true))
                {
                    if (smenuItem.m_mpn == body)
                    {
                        body_list.Add(smenuItem);
                    }
                    else
                    {
                        head_list.Add(smenuItem);
                    }
                }
            }


            menu_file_name_list_.SetValue(null, menu_list);
            man_body_menu_list_self.SetValue(self, body_list);
            man_head_menu_list_self.SetValue(self, head_list);
        }
예제 #2
0
        private static IEnumerator InitMenuNative()
        {
            while (GameMain.Instance.CharacterMgr.IsBusy())
            {
                yield return(null);
            }
            MenuDataBase menuDataBase = GameMain.Instance.MenuDataBase;

            while (!menuDataBase.JobFinished())
            {
                yield return(null);
            }

            Stopwatch watch1 = new Stopwatch();

            Debug.Log("Vanilla menu file load has now begun.");

            watch1.Start();

            AccessTools.Method(typeof(SceneEdit), "InitCategoryList").Invoke(@this, null);
            int fileCount = menuDataBase.GetDataSize();
            List <SceneEdit.SMenuItem> menuList = new List <SceneEdit.SMenuItem>(fileCount);

            @this.m_menuRidDic = new Dictionary <int, SceneEdit.SMenuItem>(fileCount);
            Dictionary <int, List <int> > menuGroupMemberDic = new Dictionary <int, List <int> >();
            float time = Time.realtimeSinceStartup;

            for (int i = 0; i < fileCount; i++)
            {
                menuDataBase.SetIndex(i);
                string fileName        = menuDataBase.GetMenuFileName();
                string parent_filename = menuDataBase.GetParentMenuFileName();
                if (GameMain.Instance.CharacterMgr.status.IsHavePartsItem(fileName))
                {
                    SceneEdit.SMenuItem mi = new SceneEdit.SMenuItem();
                    mi.m_strMenuFileName = fileName;
                    mi.m_nMenuFileRID    = fileName.GetHashCode();
                    try
                    {
                        SceneEdit.ReadMenuItemDataFromNative(mi, i);
                    }
                    catch (Exception ex)
                    {
                        Debug.LogError(string.Concat(new string[]
                        {
                            "ReadMenuItemDataFromNative 例外/",
                            fileName,
                            "/",
                            ex.Message,
                            " StackTrace/",
                            ex.StackTrace
                        }));
                    }
                    if (!mi.m_bMan && @this.editItemTextureCache.IsRegister(mi.m_nMenuFileRID))
                    {
                        AccessTools.Method(typeof(SceneEdit), "AddMenuItemToList").Invoke(@this, new object[] { mi });
                        menuList.Add(mi);
                        if ([email protected]_menuRidDic.ContainsKey(mi.m_nMenuFileRID))
                        {
                            @this.m_menuRidDic.Add(mi.m_nMenuFileRID, mi);
                        }
                        string parentMenuName = AccessTools.Method(typeof(SceneEdit), "GetParentMenuFileName").Invoke(@this, new object[] { mi }) as string;
                        if (!string.IsNullOrEmpty(parentMenuName))
                        {
                            int hashCode = parentMenuName.GetHashCode();
                            if (!menuGroupMemberDic.ContainsKey(hashCode))
                            {
                                menuGroupMemberDic.Add(hashCode, new List <int>());
                            }
                            menuGroupMemberDic[hashCode].Add(mi.m_strMenuFileName.ToLower().GetHashCode());
                        }
                        else if (mi.m_strCateName.IndexOf("set_") != -1 && mi.m_strMenuFileName.IndexOf("_del") == -1)
                        {
                            mi.m_bGroupLeader = true;
                            mi.m_listMember   = new List <SceneEdit.SMenuItem>();
                            mi.m_listMember.Add(mi);
                        }
                        if (0.5f < Time.realtimeSinceStartup - time)
                        {
                            yield return(null);

                            time = Time.realtimeSinceStartup;
                        }
                    }
                }
            }
            foreach (string strFileName in GameUty.ModOnlysMenuFiles)
            {
                SceneEdit.SMenuItem mi2 = new SceneEdit.SMenuItem();
                if (SceneEdit.GetMenuItemSetUP(mi2, strFileName, false))
                {
                    if (!mi2.m_bMan && !(mi2.m_texIconRef == null))
                    {
                        AccessTools.Method(typeof(SceneEdit), "AddMenuItemToList").Invoke(@this, new object[] { mi2 });
                        menuList.Add(mi2);
                        if ([email protected]_menuRidDic.ContainsKey(mi2.m_nMenuFileRID))
                        {
                            @this.m_menuRidDic.Add(mi2.m_nMenuFileRID, mi2);
                        }
                        string parentMenuName2 = AccessTools.Method(typeof(SceneEdit), "GetParentMenuFileName").Invoke(@this, new object[] { mi2 }) as string;
                        if (!string.IsNullOrEmpty(parentMenuName2))
                        {
                            int hashCode2 = parentMenuName2.GetHashCode();
                            if (!menuGroupMemberDic.ContainsKey(hashCode2))
                            {
                                menuGroupMemberDic.Add(hashCode2, new List <int>());
                            }
                            menuGroupMemberDic[hashCode2].Add(mi2.m_strMenuFileName.ToLower().GetHashCode());
                        }
                        else if (mi2.m_strCateName.IndexOf("set_") != -1 && mi2.m_strMenuFileName.IndexOf("_del") == -1)
                        {
                            mi2.m_bGroupLeader = true;
                            mi2.m_listMember   = new List <SceneEdit.SMenuItem>();
                            mi2.m_listMember.Add(mi2);
                        }
                        if (0.5f < Time.realtimeSinceStartup - time)
                        {
                            yield return(null);

                            time = Time.realtimeSinceStartup;
                        }
                    }
                }
            }

            yield return(@this.StartCoroutine(AccessTools.Method(typeof(SceneEdit), "FixedInitMenu").Invoke(@this, new object[] { menuList, @this.m_menuRidDic, menuGroupMemberDic }) as IEnumerator));

            yield return(@this.StartCoroutine(AccessTools.Method(typeof(SceneEdit), "CoLoadWait").Invoke(@this, null) as IEnumerator));

            watch1.Stop();

            Debug.LogError($"Vanilla menu file load finished in: {watch1.Elapsed}");

            yield break;
        }