public override void OnInspectorGUI() { base.OnInspectorGUI(); GameObjectActive go = target as GameObjectActive; if (!go) { return; } if (go.gos_Hide == null) { go.gos_Hide = new GameObject[0]; } if (go.gos_Show == null) { go.gos_Show = new GameObject[0]; } for (int i = 0; i < go.gos_Hide.Length; i++) { if (go.gos_Hide[i] == null) { continue; } go.gos_Hide[i].SetActive(!go.bl_IsBoom); } for (int i = 0; i < go.gos_Show.Length; i++) { if (go.gos_Show[i] == null) { continue; } go.gos_Show[i].SetActive(go.bl_IsBoom); } if (GUILayout.Button(go.bl_IsBoom ? "初始" : "切换")) { go.bl_IsBoom = !go.bl_IsBoom; } }
//Is called when a selection from the context menu is made void ContextCallback(object obj) { //make the passed object to a string string clb = obj.ToString(); //add the node we want if (clb.Equals("inputNode")) { InputNode inputNode = ScriptableObject.CreateInstance <InputNode>(); inputNode.WindowRect = new Rect(mousePos.x, mousePos.y, 200, 80); windows.Add(inputNode); } else if (clb.Equals("outputNode")) { OutputNode outputNode = ScriptableObject.CreateInstance <OutputNode>(); outputNode.WindowRect = new Rect(mousePos.x, mousePos.y, 200, 80); windows.Add(outputNode); } else if (clb.Equals("calcNode")) { CalcNode calcNode = ScriptableObject.CreateInstance <CalcNode>(); calcNode.WindowRect = new Rect(mousePos.x, mousePos.y, 200, 95); windows.Add(calcNode); } else if (clb.Equals("compNode")) { ComparisonNode compNode = ScriptableObject.CreateInstance <ComparisonNode>(); compNode.WindowRect = new Rect(mousePos.x, mousePos.y, 200, 95); windows.Add(compNode); } else if (clb.Equals("numNode")) { NumberNode numNode = ScriptableObject.CreateInstance <NumberNode>(); numNode.WindowRect = new Rect(mousePos.x, mousePos.y, 200, 95); windows.Add(numNode); } else if (clb.Equals("goObj")) { GameObjectNode goObj = ScriptableObject.CreateInstance <GameObjectNode>(); goObj.WindowRect = new Rect(mousePos.x, mousePos.y, 200, 100); windows.Add(goObj); } else if (clb.Equals("goActive")) { GameObjectActive goNode = ScriptableObject.CreateInstance <GameObjectActive>(); goNode.WindowRect = new Rect(mousePos.x, mousePos.y, 200, 80); windows.Add(goNode); } else if (clb.Equals("goDistance")) { GameObjectDistance goDistance = ScriptableObject.CreateInstance <GameObjectDistance>(); goDistance.WindowRect = new Rect(mousePos.x, mousePos.y, 200, 80); windows.Add(goDistance); } else if (clb.Equals("timerNode")) { TimerNode tNode = ScriptableObject.CreateInstance <TimerNode>(); tNode.WindowRect = new Rect(mousePos.x, mousePos.y, 200, 95); windows.Add(tNode); } else if (clb.Equals("boolNode")) { BoolNode bNode = ScriptableObject.CreateInstance <BoolNode>(); bNode.WindowRect = new Rect(mousePos.x, mousePos.y, 120, 75); windows.Add(bNode); } else if (clb.Equals("clearAll")) { windows.Clear(); } else if (clb.Equals("reset")) { PanX = PanY = 0; } else if (clb.Equals("makeTransition")) //if it's a transition { bool clickedOnWindow = false; int selectedIndex = -1; //find the window that it was clicked for (int i = 0; i < windows.Count; i++) { if (windows[i].WindowRect.Contains(mousePos)) { selectedIndex = i; clickedOnWindow = true; break; } } //and make it the selected node of the transition if (clickedOnWindow) { selectedNode = windows[selectedIndex]; makeTransitionMode = true; } } else if (clb.Equals("deleteNode")) //if it's a delete node { bool clickedOnWindow = false; int selectedIndex = -1; //find the selected node for (int i = 0; i < windows.Count; i++) { if (windows[i].WindowRect.Contains(mousePos)) { selectedIndex = i; clickedOnWindow = true; break; } } if (clickedOnWindow) { //delete it from our list BaseNode selNode = windows[selectedIndex]; windows.RemoveAt(selectedIndex); //then pass it to all our nodes that is deleted foreach (BaseNode n in windows) { n.NodeDeleted(selNode); } } } //we use else if instead of a switch because: /*Selecting from a set of multiple cases is faster with if statements than with switch */ }