public virtual void OnCalculateGlobalRect(bool recursive, Rect clipRect) { if (!Visible) { cliped = true; return; } GlobalScale = 1; PaintElement p = Parent; while (p != null) { GlobalScale *= p.LocalScale; p = p.Parent; } GlobalRect.size = LocalRect.size * GlobalScale; if (Parent == null) { GlobalRect.position = LocalRect.position; } else { GlobalRect.position = LocalRect.position * GlobalScale + Parent.GlobalCentroid; } cliped = !(DontClip || GlobalRect.Overlaps(clipRect)); }
public BehaviourNodeGUI AddChild(PaintElement parent, BehaviourMeta meta, Vector2 localPos) { if (parent != null && parent.Parent != TreeCanvas) { return(null); } BehaviourNodeGUI node = new BehaviourNodeGUI(this); node.Self = new BehaviourNodeGUI.Decorator(GenerateId, meta); node.Self.UpdatePropertiesInfo(); Rect r = new Rect(); r.size = node.CalculateLocalSize(); r.position = localPos - Vector2.right * r.size.x * 0.5f; node.LocalRect = r; TreeCanvas.AddElement(node); TreeGraph.AddNode(node); if (parent != null) { TreeGraph.AddPath(0, parent, node); } RebuildExecutionOrder(); return(node); }
public PaintElement GetNodeBTParent(PaintElement node) { TreeGraph.GetAllParent(0, node, mCache); PaintElement parent = mCache.Count > 0 ? mCache[0] : null; mCache.Clear(); return(parent); }
public void RemoveElement(PaintElement ele) { if (ele.Parent == this) { ele.Parent = null; //Elements.Remove(ele); } }
public void RemoveElement(PaintElement ele) { if (ele.Parent == this) { ele.Parent = null; ele.IsActive = false; //Elements.Remove(ele); } }
public void AddElement(PaintElement ele) { if (ele.Parent != null || Elements.Contains(ele)) { return; } Elements.Add(ele); ele.Parent = this; }
public void BeginEditNode(PaintElement target, ENodeEditMode mode) { if (target == null && mode != ENodeEditMode.none || EditorApplication.isPlaying) { return; } EditMode = mode; EditTarget = target; }
public override bool InteractKeyUp(KeyCode key) { for (int i = Elements.Count - 1; i >= 0; i--) { PaintElement ele = Elements[i]; if (ele.InteractKeyUp(key)) { return(true); } } return(OnKeyUp == null ? false : OnKeyUp(key)); }
public override bool InteractMouseClick(EMouseButton button, Vector2 mousePosition) { for (int i = Elements.Count - 1; i >= 0; i--) { PaintElement ele = Elements[i]; if (ele.GlobalRect.Contains(mousePosition) && ele.InteractMouseClick(button, mousePosition)) { return(true); } } return(OnMouseClick == null ? false : OnMouseClick(button, mousePosition)); }
void ModifyThisAsParent() { PaintElement ele = mWindow.GetNodeBTParent(mWindow.EditTarget); if (ele != null) { mWindow.TreeGraph.RemovePath(0, ele, mWindow.EditTarget); } mWindow.TreeGraph.AddPath(0, this, mWindow.EditTarget); mWindow.BeginEditNode(null, BehaviourTreeDesignerWindow.ENodeEditMode.none); mWindow.RebuildExecutionOrder(); }
public override bool InteractDragBegin(EMouseButton button, Vector2 mousePosition) { for (int i = Elements.Count - 1; i >= 0; i--) { PaintElement ele = Elements[i]; if (ele.Visible && ele.GlobalRect.Contains(mousePosition) && ele.InteractDragBegin(button, mousePosition)) { mDragTarget = ele; return(true); } } mOnSelfDrag = OnDragBegin == null ? false : OnDragBegin(button, mousePosition); return(mOnSelfDrag); }
public override bool InteractDragEnd(EMouseButton button, Vector2 mousePosition) { if (mOnSelfDrag) { mOnSelfDrag = false; return(OnDragEnd == null ? false : OnDragEnd(button, mousePosition)); } if (mDragTarget != null) { bool ret = mDragTarget.InteractDragEnd(button, mousePosition); mDragTarget = null; return(ret); } return(false); }
public void Resort(bool recursive) { GlobalUtil.Sort(Elements, (x, y) => x.SortOrder > y.SortOrder ? 1 : -1); if (recursive) { for (int i = 0; i < Elements.Count; i++) { PaintElement can = Elements[i]; if (can is EditorGUICanvas) { ((EditorGUICanvas)can).Resort(recursive); } } } }
public virtual void CalculateGlobalRect(bool recursive) { GlobalScale = 1; PaintElement p = Parent; while (p != null) { GlobalScale *= p.LocalScale; p = p.Parent; } GlobalRect.size = LocalRect.size * GlobalScale; if (Parent == null) { GlobalRect.position = LocalRect.position; } else { GlobalRect.position = LocalRect.position * GlobalScale + Parent.GlobalCentroid; } }
public override void OnGUI(Rect clipRect) { float gsize = GridSize * GlobalScale; if (GlobalScale > 0 && ShowGridLine && GridSize > 1) { OnDrawGridLine(clipRect, gsize); } bool clean = false; if (LocalScale > 0) { for (int i = 0; i < Elements.Count; i++) { PaintElement ele = Elements[i]; if (ele.Parent != this) { clean = true; } if (ele.cliped) { continue; } ele.OnGUI(clipRect); } } if (clean) { for (int i = Elements.Count - 1; i >= 0; i--) { PaintElement ele = Elements[i]; if (ele.Parent != this) { Elements.RemoveAt(i); ele.OnRemoved(); } } } }
void OnTaskList() { mRaycastMeta = null; Installizer.contentStyle.alignment = TextAnchor.MiddleCenter; Vector2 tsize = new Vector2(mMinTaskWidth * GlobalScale, 30 * GlobalScale); Vector2 dsize = new Vector2(mMinTaskWidth * GlobalScale, 20 * GlobalScale); PaintElement node = Context; Rect r = new Rect(); float delta = 0; r.size = new Vector2(tsize.x, 22); r.position = new Vector2(GlobalRect.xMax - tsize.x, GlobalRect.yMin + 2); if (OnSearchFieldGUI(r)) { delta += 22; } bool search = !string.IsNullOrEmpty(mSearchContext); r.size = new Vector2(tsize.x, GlobalRect.height - delta); r.position = new Vector2(GlobalRect.xMax - tsize.x, GlobalRect.yMin + 20); OnMetaList(mTaskList, r, search, false); }
public void NewNode(PaintElement context) { if (EditorApplication.isPlaying) { return; } if (mTaskList.Count < 2 || !BehaviourModuleManager.GetOrNewInstance().Composites.Contains(mTaskList[1].BTMeta)) { mTaskList.Clear(); mMinTaskWidth = 200; List <BehaviourMeta> lst; lst = BehaviourModuleManager.GetOrNewInstance().Composites; string category = null; for (int i = 0; i < lst.Count; i++) { MetaUI m = new MetaUI(lst[i]); if (m.BTMeta.Category != category) { category = m.BTMeta.Category; mDropDownMeta = new MetaUI(category); mTaskList.Add(mDropDownMeta); } mTaskList.Add(m); mMinTaskWidth = Mathf.Max(mMinTaskWidth, m.Width); } } Mode = EMode.new_node; Visible = true; Context = context; Rect rect = new Rect(); rect.size = new Vector2(mMinTaskWidth, 270); // 170 + 200 rect.position = Parent.CalculateLocalPosition(mWindow.GlobalMousePosition) - new Vector2(mMinTaskWidth * 0.5f, 0); LocalRect = rect; mDragEnd = true; }
protected virtual void OnSocketGUI() { Rect rect = new Rect(); rect.size = new Vector2(LocalRect.width - 30, 15) * GlobalScale; if (rect.size.y > 3) { bool editmode = !EditorApplication.isPlayingOrWillChangePlaymode && !mWindow.ContextMenu.Visible && mWindow.EditMode == BehaviourTreeDesignerWindow.ENodeEditMode.none; rect.center = new Vector2(GlobalRect.center.x, GlobalRect.yMax - rect.size.y * 0.5f); bool inrect = rect.Contains(mWindow.GlobalMousePosition); if (mWindow.EditTarget == this && mWindow.EditMode == BehaviourTreeDesignerWindow.ENodeEditMode.modify_child) { GUI.Label(rect, "", "flow node 0 on"); } else if (mWindow.EditMode == BehaviourTreeDesignerWindow.ENodeEditMode.modify_parent && inrect && CanLinkBetween(this, mWindow.EditTarget as BehaviourNodeGUI)) { if (GUI.Button(rect, "", "flow node 0 on")) { ModifyThisAsParent(); } } else if (editmode) { if (GUI.Button(rect, "", inrect ? "flow node 0 on" : "textarea")) { mWindow.BeginEditNode(this, BehaviourTreeDesignerWindow.ENodeEditMode.modify_child); } } else { GUI.Label(rect, "", "textarea"); } rect.center = new Vector2(GlobalRect.center.x, GlobalRect.yMin + rect.size.y * 0.5f); inrect = rect.Contains(mWindow.GlobalMousePosition); if (mWindow.EditTarget == this && mWindow.EditMode == BehaviourTreeDesignerWindow.ENodeEditMode.modify_parent) { GUI.Label(rect, "", "flow node 0 on"); } else if (mWindow.EditMode == BehaviourTreeDesignerWindow.ENodeEditMode.modify_child && inrect && mWindow.TreeGraph.GetParentCount(0, this) == 0) { if (GUI.Button(rect, "", "flow node 0 on")) { ModifyThisAsChild(); } } else if (editmode) { if (GUI.Button(rect, "", inrect ? "flow node 0 on" : "textarea")) { mWindow.BeginEditNode(this, BehaviourTreeDesignerWindow.ENodeEditMode.modify_parent); } } else { GUI.Label(rect, "", "textarea"); } Rect btn = new Rect(); btn.size = new Vector2(20, 20); btn.center = new Vector2(rect.center.x, rect.yMin - 10); if (editmode && (rect.Contains(mWindow.GlobalMousePosition) || btn.Contains(mWindow.GlobalMousePosition))) { PaintElement parent = mWindow.GetNodeBTParent(this); if (parent != null && GUI.Button(btn, "", "WinBtnCloseActiveMac")) { mWindow.TreeGraph.RemovePath(0, parent, this); mWindow.RebuildExecutionOrder(); } } } }
public override void OnGUI(Rect clipRect) { mRaycastElement = null; float gsize = GridSize * GlobalScale; if (GlobalScale > 0 && ShowGridLine && GridSize > 1) { OnDrawGridLine(clipRect, gsize); } bool clean = false; if (LocalScale > 0) { bool style = !string.IsNullOrEmpty(Style); if (style) { GUI.Label(GlobalRect, "", Style); } float title = OnTitleRect(clipRect); GUI.BeginClip(new Rect(GlobalRect.x, GlobalRect.y + title, GlobalRect.width, GlobalRect.height - title)); clipRect.position = Vector2.zero; clipRect.size = new Vector2(GlobalRect.width, GlobalRect.height - title); Vector2 offset = mScrollPos - new Vector2(GlobalRect.x, GlobalRect.y + title); mLocalSize = Vector2.zero; for (int i = 0; i < Elements.Count; i++) { PaintElement ele = Elements[i]; if (!ele.Visible) { continue; } Rect rect = ele.GlobalRect; rect.position += offset; ele.GlobalRect = rect; mLocalSize.x = Math.Max(ele.LocalRect.xMax, mLocalSize.x); mLocalSize.y = Math.Max(ele.LocalRect.yMax, mLocalSize.y); if (ele.DontClip || clipRect.Overlaps(ele.GlobalRect)) { ele.OnGUI(clipRect); if (ele.GlobalRect.Contains(Event.current.mousePosition)) { mRaycastElement = ele; } } if (ele.Parent != this) { clean = true; } } GUI.EndClip(); if (!mDrag) { Vector2 scroll = new Vector2(); scroll.x = Mathf.Clamp(mScrollPos.x, Mathf.Min(10, LocalRect.width - mLocalSize.x), 10); scroll.y = Mathf.Clamp(mScrollPos.y, Mathf.Min(10, LocalRect.height - mLocalSize.y), 10); if (Vector2.SqrMagnitude(scroll - mScrollPos) > 1) { mScrollPos = Vector2.Lerp(mScrollPos, scroll, 0.1f); } else { mScrollPos = scroll; } } } if (clean) { for (int i = Elements.Count - 1; i >= 0; i--) { PaintElement ele = Elements[i]; if (ele.Parent != this) { Elements.RemoveAt(i); ele.OnRemoved(); } } } }