protected void generateWindowData(NodeCanvasData windowData) { windowList = new List <BaseWindow>(); fixedWindow = new FixedWindow(windowData.shareData); foreach (var item in windowData.nodelist) { windowList.Add(new NodeWindow(item, windowList)); } foreach (var item in windowData.routerlist) { windowList.Add(new RouterWindow(item, windowList)); } //set next Node foreach (var item in windowList) { DataBase itemdata = windowData.Get(item.Id); if (itemdata.type == NodeType.Node) { NodeData edata = itemdata as NodeData; if (edata.next >= 0) { BaseWindow next = FindWindow(edata.next); (item as NodeWindow).SetNext(next); } } else { RouterData edata = itemdata as RouterData; RouterWindow win = item as RouterWindow; //set default if (edata.defaultEntity >= 0) { NodeWindow def = FindWindow <NodeWindow>(edata.defaultEntity); win.SetDefault(def); } //set conditions List <RouterWindowCondition> conditions = new List <RouterWindowCondition>(); foreach (var con in edata.conditions) { RouterWindowCondition rcon = new RouterWindowCondition(); rcon.className = con.className; rcon.entity = FindWindow <NodeWindow>(con.entity); conditions.Add(rcon); } win.SetConditions(conditions); } } }
public void SetDefault(NodeWindow defEntity) { defaultEntity = defEntity; }
void drawDefualt() { GUILayout.BeginHorizontal(); GUILayout.Label("default", defaultLabel); //连接选择 GUI.color = EditorGUIUtility.isProSkin ? Color.green : Color.grey; if (MyEditorLayout.Button("L", defaultLButton, out rect)) { GenericMenu menu = new GenericMenu(); menu.AddItem(newNode, false, () => { var tempWindow = new NodeWindow(new Vector2(50, 50) + position, windowList); windowList.Add(tempWindow); defaultEntity = tempWindow; }); List <BaseWindow> selectionList = new List <BaseWindow>(); foreach (var item in windowList) { if (item is NodeWindow) { selectionList.Add(item); } } foreach (var item in selectionList) { bool select = (defaultEntity != null) && defaultEntity.Id == item.Id; menu.AddItem(new GUIContent(item.Id + " " + item.Name), select, () => { if (select) { defaultEntity = null; } else { defaultEntity = item as NodeWindow; } }); } menu.ShowAsContext(); } if (defaultEntity == null) { linkStyle.normal.textColor = Color.gray; } else { linkStyle.normal.textColor = EditorGUIUtility.isProSkin ? Color.green : Color.grey; } MyEditorLayout.Label("o", linkStyle, out rect); //有的时候 rect会为0,0,1,1 if (rect.position != Vector2.zero) { defaultPos.x = rect.position.x + rect.width; defaultPos.y = rect.position.y + rect.height / 2; } GUI.color = Color.white; GUILayout.EndHorizontal(); }
void drawConditions() { for (int i = 0; i < conditions.Count; i++) { RouterWindowCondition rc = conditions[i]; GUILayout.BeginHorizontal(); string c = rc.className; int selectindex = allConditionClass.IndexOf(c); selectindex = EditorGUILayout.Popup(selectindex, allConditionClass.ToArray(), popupStyle); if (selectindex >= 0) { conditions[i].className = allConditionClass[selectindex]; } //删除 GUI.color = Color.red; if (GUILayout.Button("-", buttonStyle)) { conditions.RemoveAt(i); i--; _size.y -= addHeight; } GUI.color = Color.white; //连接选择 GUI.color = EditorGUIUtility.isProSkin ? Color.green : Color.grey; if (MyEditorLayout.Button("L", buttonStyle, out rect)) { GenericMenu menu = new GenericMenu(); menu.AddItem(newNode, false, () => { var tempWindow = new NodeWindow(new Vector2(50, 50) + position, windowList); windowList.Add(tempWindow); rc.entity = tempWindow; }); menu.AddSeparator(""); List <NodeWindow> selectionList = new List <NodeWindow>(); foreach (var item in windowList) { if (item.windowType == NodeType.Node) { selectionList.Add(item as NodeWindow); } } foreach (var item in selectionList) { bool select = (rc.entity != null) && rc.entity.Id == item.Id; menu.AddItem(new GUIContent(string.Format("[{0}][{1}] {2}", item.Id, item.windowType, item.Name)), select, () => { if (select) { rc.entity = null; } else { rc.entity = item; } }); } menu.ShowAsContext(); } GUI.color = Color.white; if (rc.entity == null) { linkStyle.normal.textColor = Color.gray; } else { linkStyle.normal.textColor = EditorGUIUtility.isProSkin ? Color.green : Color.grey; } MyEditorLayout.Label("o", linkStyle, out rect); //有的时候 rect会为0,0,1,1 if (rect.position != Vector2.zero) { rc.drawPos.x = rect.position.x + rect.width; rc.drawPos.y = rect.position.y + rect.height / 2; } GUILayout.EndHorizontal(); } }
public override void draw() { base.draw(); //画线 #region condition list for (int i = 0; i < conditions.Count; i++) { RouterWindowCondition item = conditions[i]; if (item.entity == null) { continue; } if (!windowList.Contains(item.entity)) { item.entity = null; continue; } if (item.drawPos == Vector2.zero) { continue; } color = Color.white; if (Application.isPlaying && passed && runtimePassedConditionIndex == i) { color = EditorGUIUtility.isProSkin ? Color.green : Color.grey; } DrawArrow(item.drawPos + position, item.entity.In, color); } #endregion #region default if (defaultEntity == null) { return; } if (!windowList.Contains(defaultEntity)) { defaultEntity = null; return; } if (defaultPos == Vector2.zero) { return; } color = Color.white; if (Application.isPlaying && passed && runtimePassedConditionIndex == -1) { color = EditorGUIUtility.isProSkin ? Color.green : Color.grey; } DrawArrow(defaultPos + position, defaultEntity.In, color); #endregion }
public override void rightMouseDraw(Vector2 mouseposition) { GenericMenu menu = new GenericMenu(); menu.AddItem(nextNewNodeContent, false, () => { var tempWindow = new NodeWindow(mouseposition, windowList); windowList.Add(tempWindow); next = tempWindow; }); menu.AddItem(nextNewRouterContent, false, () => { var tempWindow = new RouterWindow(mouseposition, windowList); windowList.Add(tempWindow); next = tempWindow; }); menu.AddSeparator(separator); #region select the next one List <BaseWindow> selectionList = new List <BaseWindow>(); foreach (var item in windowList) { if (item.Id == Id) { continue; } selectionList.Add(item); } foreach (var item in selectionList) { bool select = (next != null) && next.Id == item.Id; menu.AddItem(new GUIContent(string.Format("Next/[{0}][{1}] {2}", item.Id, item.windowType, item.Name)) , select, () => { if (select) { next = null; } else { next = item; } }); } #endregion if (isEntrance) {//the Node is Entrance can not be delete menu.AddDisabledItem(deleteContent); } else { menu.AddItem(deleteContent, false, () => { windowList.Remove(this); }); } menu.AddItem(entranceContent, isEntrance, () => { foreach (var item in windowList) { if (item is NodeWindow) { (item as NodeWindow).isEntrance = false; } } isEntrance = true; }); menu.ShowAsContext(); }