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); }
/// <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); } }
private static void AddSelectNode(TreeNodeCtrl obj, TreeNodeObject treeNodeObject, bool multiple = false) { LazyAddSelectNode.Value(obj, treeNodeObject, multiple); }
private static void DeselectNode(TreeNodeCtrl obj, TreeNodeObject node) { LazyDeselectNode.Value(obj, node); }
public static List <TreeNodeObject> GetTreeNodeObjects(this TreeNodeCtrl treeNodeCtrl) { return(LazyTreeNodeObjectsGetter.Value(treeNodeCtrl)); }
private static void TreeNodeCtrl_SelectMultiple_Postfix(TreeNodeCtrl __instance, TreeNodeObject _start, TreeNodeObject _end) { CharaStudio.GetTreeNodeInfo(_start); }
private static void TreeNodeCtrl_SelectSingle_Postfix(TreeNodeCtrl __instance, TreeNodeObject _node, bool _deselect) { CharaStudio.GetTreeNodeInfo(_node); }
[HarmonyPostfix, HarmonyPatch(typeof(TreeNodeCtrl), "DeleteNode", new[] { typeof(TreeNodeObject) })] //know when objects are deleted public static void DeleteNode(ref TreeNodeCtrl _node) => HarmonyAdd.Counter(false);
private static void TreeNodeCtrl_SelectMultiple_Postfix(TreeNodeCtrl __instance, TreeNodeObject _start, TreeNodeObject _end) { OnSelectSingle?.Invoke(__instance, new TreeNodeEventArgs(_start)); OnSelectMultiple?.Invoke(__instance, null); }
private static void TreeNodeCtrl_SelectSingle_Postfix(TreeNodeCtrl __instance, TreeNodeObject _node, bool _deselect) { OnSelectSingle?.Invoke(__instance, new TreeNodeEventArgs(_node)); }