private void OnGUI() { if (tex == null) { tex = AssetDatabase.LoadAssetAtPath <Texture>("Assets/AndreLibrary/Editor/BT_Lighter_Grey_Blue.jpg"); } GUI.DrawTexture(new Rect(0, 0, maxSize.x, maxSize.y), tex, ScaleMode.StretchToFill); GUILayout.BeginVertical("HelpBox"); GUILayout.Space(10); tab = GUILayout.Toolbar(tab, new string[] { "Picker", "Names", "Position" }); var style = new GUIStyle(GUI.skin.label) { alignment = TextAnchor.MiddleCenter }; switch (tab) { case 0: GUILayout.Space(10); GUILayout.Label("Node A", style, GUILayout.ExpandWidth(true)); nodeASelected = EditorGUILayout.Popup(nodeASelected, nodeAOptions); GUILayout.Space(5); GUILayout.Label("Node B", style, GUILayout.ExpandWidth(true)); nodeBSelected = EditorGUILayout.Popup(nodeBSelected, nodeBOptions); GUILayout.Space(2.5f); if (nodeASelected != nodeBSelected) { GUILayout.Space(2.5f); if (GUILayout.Button("Swap Nodes")) { AssetToUpdate.MoveNodePositions(AssetToUpdate.Children[nodeASelected].name, AssetToUpdate.Children[nodeBSelected].name); this.Close(); } GUILayout.Space(2.5f); } else { GUILayout.Space(27.5f); } break; case 1: GUILayout.Space(10); GUILayout.Label("Node A Name", style, GUILayout.ExpandWidth(true)); nodeAName = GUILayout.TextField(nodeAName); GUILayout.Space(5); GUILayout.Label("Node B Name", style, GUILayout.ExpandWidth(true)); nodeBName = GUILayout.TextField(nodeBName); GUILayout.Space(2.5f); if ((!string.IsNullOrEmpty(nodeAName) && !string.IsNullOrWhiteSpace(nodeAName)) && (!string.IsNullOrEmpty(nodeBName) && !string.IsNullOrWhiteSpace(nodeBName)) && nodeAName != nodeBName) { if (AssetToUpdate.ContainsName(nodeAName) && AssetToUpdate.ContainsName(nodeBName)) { GUILayout.Space(2.5f); if (GUILayout.Button("Swap Nodes")) { AssetToUpdate.MoveNodePositions(nodeAName, nodeBName); this.Close(); } GUILayout.Space(2.5f); } else { GUILayout.Space(27.5f); } } else { GUILayout.Space(27.5f); } break; case 2: GUILayout.Space(10); GUILayout.Label("Node A Position", style, GUILayout.ExpandWidth(true)); nodeAPos = EditorGUILayout.IntField(nodeAPos); GUILayout.Space(5); GUILayout.Label("Node B Position", style, GUILayout.ExpandWidth(true)); nodeBPos = EditorGUILayout.IntField(nodeBPos); GUILayout.Space(2.5f); if ((nodeAPos > 0 && AssetToUpdate.Children.Count >= nodeAPos) && (nodeBPos > 0 && AssetToUpdate.Children.Count >= nodeBPos) && nodeAPos != nodeBPos) { GUILayout.Space(2.5f); if (GUILayout.Button("Swap Nodes")) { AssetToUpdate.MoveNodePositions(AssetToUpdate.Children[nodeAPos - 1].name, AssetToUpdate.Children[nodeBPos - 1].name); this.Close(); } GUILayout.Space(2.5f); } else { GUILayout.Space(27.5f); } break; default: break; } GUILayout.EndVertical(); }
private void OnClickAddNode(NODEOPTIONS options, SO_Node _AssetToUpdate) { SO_Node node = null; switch (options) { case NODEOPTIONS.Selector: node = _AssetToUpdate.Create <SO_Selector>(name); node.Type = "Selector"; node.nodeType = (int)NODETYPE.Composite; break; case NODEOPTIONS.Sequence: node = _AssetToUpdate.Create <SO_Sequence>(name); node.Type = "Sequence"; node.nodeType = (int)NODETYPE.Composite; break; case NODEOPTIONS.BooleanSelector: node = _AssetToUpdate.Create <SO_BooleanSelector>(name); node.Type = "BSelector"; node.nodeType = (int)NODETYPE.Composite; break; case NODEOPTIONS.FailRepeater: node = _AssetToUpdate.Create <SO_FailRepeater>(name); node.SwapableNodes = false; node.Type = "FRepeater"; node.nodeType = (int)NODETYPE.Decorator; break; case NODEOPTIONS.FakeSate: node = _AssetToUpdate.Create <SO_FakeSate>(name); node.SwapableNodes = false; node.Type = "FakeSate"; node.nodeType = (int)NODETYPE.Decorator; break; case NODEOPTIONS.InfiniteRepeater: node = _AssetToUpdate.Create <SO_InfiniteRepeater>(name); node.SwapableNodes = false; node.Type = "IRepeater"; node.nodeType = (int)NODETYPE.Decorator; break; case NODEOPTIONS.Inverter: node = _AssetToUpdate.Create <SO_Inverter>(name); node.SwapableNodes = false; node.Type = "Inverter"; node.nodeType = (int)NODETYPE.Decorator; break; case NODEOPTIONS.Limiter: node = _AssetToUpdate.Create <SO_Limiter>(name); node.SwapableNodes = false; node.Type = "Limiter"; node.nodeType = (int)NODETYPE.Decorator; break; case NODEOPTIONS.Repeater: node = _AssetToUpdate.Create <SO_Repeater>(name); node.SwapableNodes = false; node.Type = "Repeater"; node.nodeType = (int)NODETYPE.Decorator; break; case NODEOPTIONS.Leaf: node = _AssetToUpdate.Create <SO_LeafNode>(name); node.SwapableNodes = false; node.Type = "Leaf"; node.nodeType = (int)NODETYPE.Leaf; break; case NODEOPTIONS.Debug: node = _AssetToUpdate.Create <SO_TestNode>(name); node.SwapableNodes = false; node.Type = "Debug"; node.nodeType = (int)NODETYPE.Debug; break; } string tempBaseName = "New Node"; string tempName = tempBaseName; int number = 0; while (_AssetToUpdate.ContainsName(tempName)) { tempName = tempBaseName + $" {number}"; number++; } node.name = tempName; _AssetToUpdate.AddNode(node); InContexMenu = false; }
public override void OnInspectorGUI() { myTarget = (SO_Node)target; assetName = EditorGUILayout.TextField("New asset name: ", assetName); if (!string.IsNullOrEmpty(assetName) && !string.IsNullOrWhiteSpace(assetName) && assetName != myTarget.name) { if (GUILayout.Button("Change Name")) { myTarget.ChangeName(assetName); } } GUILayout.Space(20); //serializedObject.Update(); // EditorList.Show(serializedObject.FindProperty("m_nodes"), EditorListOption.ElementLabels | EditorListOption.Buttons); //serializedObject.ApplyModifiedProperties(); DrawDefaultInspector(); GUILayout.Space(20); if (myTarget.SwapableNodes) { tab = GUILayout.Toolbar(tab, new string[] { "Add", "Swap", "Remove" }); switch (tab) { case 0: op = (NODEOPTIONS)EditorGUILayout.EnumPopup("Node to create:", op); if (op != NODEOPTIONS.None) { name = EditorGUILayout.TextField("Node Name: ", name); if (!string.IsNullOrEmpty(name) && !string.IsNullOrWhiteSpace(name) && !myTarget.ContainsName(name)) { if (GUILayout.Button("Add Node")) { SO_Node node = GetNodeType(op, name); if (node != null) { myTarget.AddNode(node); } } } } break; case 1: if (!myTarget.NodeAdd) { return; } nodeAName = EditorGUILayout.TextField("Node A Name: ", nodeAName); nodeBName = EditorGUILayout.TextField("Node B Name: ", nodeBName); if ((!string.IsNullOrEmpty(nodeAName) && !string.IsNullOrWhiteSpace(nodeAName) && myTarget.ContainsName(nodeAName)) && (!string.IsNullOrEmpty(nodeBName) && !string.IsNullOrWhiteSpace(nodeBName) && myTarget.ContainsName(nodeBName))) { if (GUILayout.Button("Swap Nodes")) { myTarget.MoveNodePositions(nodeAName, nodeBName); } } break; case 2: name = EditorGUILayout.TextField("Node Name: ", name); if (!string.IsNullOrEmpty(name) && !string.IsNullOrWhiteSpace(name) && myTarget.ContainsName(name)) { if (GUILayout.Button("Remove Nodes")) { myTarget.RemoveNode(name); //AssetDatabase.Refresh(); // AssetDatabase.ImportAsset(AssetDatabase.GetAssetPath(myTarget), ImportAssetOptions.ForceUpdate); } } break; default: break; } } else { if (!myTarget.NodeAdd) { return; } tab = GUILayout.Toolbar(tab, new string[] { "Add", "Remove" }); switch (tab) { case 0: op = (NODEOPTIONS)EditorGUILayout.EnumPopup("Node to create:", op); if (op != NODEOPTIONS.None) { name = EditorGUILayout.TextField("Node Name: ", name); if (!string.IsNullOrEmpty(name) && !string.IsNullOrWhiteSpace(name) && !myTarget.ContainsName(name)) { if (GUILayout.Button("Add Node")) { SO_Node node = GetNodeType(op, name); if (node != null) { myTarget.AddNode(node); } } } } break; case 1: name = EditorGUILayout.TextField("Node Name: ", name); if (!string.IsNullOrEmpty(name) && !string.IsNullOrWhiteSpace(name) && myTarget.ContainsName(name)) { if (GUILayout.Button("Remove Nodes")) { myTarget.RemoveNode(name); AssetDatabase.Refresh(); AssetDatabase.ImportAsset(AssetDatabase.GetAssetPath(myTarget), ImportAssetOptions.ForceUpdate); } } break; default: break; } } }