internal static bool TreeNodeCtrl_DeleteAllNode(TreeNodeCtrl __instance, ref List <TreeNodeObject> ___m_TreeNodeObject, ref ScrollRect ___scrollRect, ref HashSet <TreeNodeObject> ___hashSelectNode)
            {
                if (IsStudio)
                {
                    return(true);
                }

                for (int i = 0; i < ___m_TreeNodeObject.Count; i++)
                {
                    Traverse.Create(__instance).Method("DeleteNodeLoop", ___m_TreeNodeObject[i]).GetValue();
                }
                ___m_TreeNodeObject.Clear();
                ___hashSelectNode.Clear();
                //Added null check
                if (___scrollRect != null)
                {
                    ___scrollRect.verticalNormalizedPosition   = 1f;
                    ___scrollRect.horizontalNormalizedPosition = 0f;
                }
                return(false);
            }
            private static bool TreeNodeCtrl_AddNode(TreeNodeCtrl __instance, TreeNodeObject _parent, ref TreeNodeObject __result, ref List <TreeNodeObject> ___m_TreeNodeObject)
            {
                if (IsStudio)
                {
                    return(true);
                }

                GameObject     gob = new GameObject();
                TreeNodeObject com = gob.AddComponent <TreeNodeObject>();

                Traverse.Create(com).Field("m_TreeNodeCtrl").SetValue(__instance);
                if (_parent != null)
                {
                    com.SetParent(_parent);
                }
                else
                {
                    ___m_TreeNodeObject.Add(com);
                }

                __result = com;
                return(false);
            }
            private static bool TreeNodeCtrl_DeleteNode(TreeNodeCtrl __instance, TreeNodeObject _node, ref List <TreeNodeObject> ___m_TreeNodeObject, ref ScrollRect ___scrollRect)
            {
                if (IsStudio)
                {
                    return(true);
                }

                if (_node.enableDelete)
                {
                    _node.SetParent(null);
                    ___m_TreeNodeObject.Remove(_node);
                    _node.onDelete?.Invoke();
                    Traverse.Create(__instance).Method("DeleteNodeLoop").GetValue(_node);
                    if (___m_TreeNodeObject.Count == 0)
                    {
                        //Added null check
                        if (___scrollRect != null)
                        {
                            ___scrollRect.verticalNormalizedPosition = 1f;
                        }
                    }
                }
                return(false);
            }
            private static bool TreeNodeCtrl_SetParent(TreeNodeObject _node, TreeNodeObject _parent, TreeNodeCtrl __instance, ref GUITree.TreeRoot ___m_TreeRoot, ref Action <TreeNodeObject, TreeNodeObject> ___onParentage)
            {
                if (IsStudio)
                {
                    return(true);
                }

                if (_node != null && _node.enableChangeParent && (!(bool)Traverse.Create(__instance).Method("RefreshHierachy").GetValue(_node) || !(_parent == null)) && _node.SetParent(_parent))
                {
                    Traverse.Create(__instance).Method("RefreshHierachy").GetValue();
                    //Added null check
                    if (___m_TreeRoot != null)
                    {
                        ___m_TreeRoot.Invoke("SetDirty", 0f);
                    }
                    ___onParentage?.Invoke(_parent, _node);
                }
                return(false);
            }
Пример #5
0
        /// <summary>
        /// 創建設定資料夾結構,或是變更設定中的特定項目
        /// </summary>
        /// <param name="textTreeNodeObject">要變更的OCIFolder.treeNodeObject</param>
        /// <param name="config">要設定的項目</param>
        public static void MakeAndSetConfigStructure(TreeNodeObject textTreeNodeObject, Config config = Config.All)
        {
            Patches.isCreatingTextStructure = true;
            OCIFolder    textOCIFolder = Studio.Studio.GetCtrlInfo(textTreeNodeObject) as OCIFolder;
            TextMesh     t             = textOCIFolder.objectItem.GetComponentInChildren <TextMesh>(true);
            MeshRenderer m             = textOCIFolder.objectItem.GetComponentInChildren <MeshRenderer>(true);
            TreeNodeCtrl treeNodeCtrl  = Singleton <Studio.Studio> .Instance.treeNodeCtrl;

            TreeNodeObject nConfig = doMain(Patches.TextConfigPrefix, "", textTreeNodeObject);

            if (config == Config.Font || config == Config.All)
            {
                doMain(Patches.TextConfigFontPrefix, t.font.name, nConfig);
            }
            if (config == Config.FontSize || config == Config.All)
            {
                doMain(Patches.TextConfigFontSizePrefix, (t.characterSize * 500).ToString(), nConfig);
            }
            if (config == Config.FontStyle || config == Config.All)
            {
                doMain(Patches.TextConfigFontStylePrefix, t.fontStyle.ToString(), nConfig);
            }
            if (config == Config.Color || config == Config.All)
            {
                doMain(Patches.TextConfigColorPrefix, '#' + ColorUtility.ToHtmlStringRGBA(m.material.color), nConfig);
            }
            if (config == Config.Anchor || config == Config.All)
            {
                doMain(Patches.TextConfigAnchorPrefix, t.anchor.ToString(), nConfig);
            }
            if (config == Config.Align || config == Config.All)
            {
                doMain(Patches.TextConfigAlignPrefix, t.alignment.ToString(), nConfig);
            }

            Patches.isCreatingTextStructure = false;

            TreeNodeObject doMain(string prefix, string value, TreeNodeObject nRoot)
            {
                TreeNodeObject node = nRoot.child?.Where((x) =>
                                                         Studio.Studio.GetCtrlInfo(x).objectInfo.kind == 3 &&
                                                         (Studio.Studio.GetCtrlInfo(x) is OCIFolder y) &&
                                                         y.name.Contains(prefix)
                                                         ).FirstOrDefault();
                OCIFolder folder;

                if (null == node)
                {
                    //沒有找到就創建
                    folder = AddObjectFolder.Add();
                    treeNodeCtrl.SetParent(folder.treeNodeObject, nRoot);
                    folder.objectInfo.changeAmount.Reset();
                    node = folder.treeNodeObject;
                }
                else
                {
                    folder = Studio.Studio.GetCtrlInfo(node) as OCIFolder;
                }
                folder.name = folder.objectItem.name = prefix + value;
                return(node);
            }
        }
Пример #6
0
 private static void AddSelectNode(TreeNodeCtrl obj, TreeNodeObject treeNodeObject, bool multiple = false)
 {
     LazyAddSelectNode.Value(obj, treeNodeObject, multiple);
 }
Пример #7
0
 private static void DeselectNode(TreeNodeCtrl obj, TreeNodeObject node)
 {
     LazyDeselectNode.Value(obj, node);
 }
Пример #8
0
 public static List <TreeNodeObject> GetTreeNodeObjects(this TreeNodeCtrl treeNodeCtrl)
 {
     return(LazyTreeNodeObjectsGetter.Value(treeNodeCtrl));
 }
Пример #9
0
 private static void TreeNodeCtrl_SelectMultiple_Postfix(TreeNodeCtrl __instance, TreeNodeObject _start, TreeNodeObject _end)
 {
     CharaStudio.GetTreeNodeInfo(_start);
 }
Пример #10
0
 private static void TreeNodeCtrl_SelectSingle_Postfix(TreeNodeCtrl __instance, TreeNodeObject _node, bool _deselect)
 {
     CharaStudio.GetTreeNodeInfo(_node);
 }
Пример #11
0
 [HarmonyPostfix, HarmonyPatch(typeof(TreeNodeCtrl), "DeleteNode", new[] { typeof(TreeNodeObject) })] //know when objects are deleted
 public static void DeleteNode(ref TreeNodeCtrl _node) => HarmonyAdd.Counter(false);
Пример #12
0
 private static void TreeNodeCtrl_SelectMultiple_Postfix(TreeNodeCtrl __instance, TreeNodeObject _start, TreeNodeObject _end)
 {
     OnSelectSingle?.Invoke(__instance, new TreeNodeEventArgs(_start));
     OnSelectMultiple?.Invoke(__instance, null);
 }
Пример #13
0
 private static void TreeNodeCtrl_SelectSingle_Postfix(TreeNodeCtrl __instance, TreeNodeObject _node, bool _deselect)
 {
     OnSelectSingle?.Invoke(__instance, new TreeNodeEventArgs(_node));
 }