diff --git a/Assets/Klak/Wiring/Editor/Patcher/GraphGUI.cs b/Assets/Klak/Wiring/Editor/Patcher/GraphGUI.cs index 9ee4358..97fdb26 100644 --- a/Assets/Klak/Wiring/Editor/Patcher/GraphGUI.cs +++ b/Assets/Klak/Wiring/Editor/Patcher/GraphGUI.cs @@ -253,6 +253,13 @@ void ShowCustomContextMenu() menu.AddItem(new GUIContent("Duplicate"), false, ContextMenuCallback, "Duplicate"); menu.AddSeparator(""); menu.AddItem(new GUIContent("Delete"), false, ContextMenuCallback, "Delete"); + + menu.AddSeparator(""); + var colors = Enum.GetValues(typeof(Graphs.Styles.Color)).Cast().Distinct(); + foreach (var color in colors) + { + menu.AddItem(new GUIContent("Color/" + color), false, ContextMenuColorCallback, color); + } } else if (edgeGUI.edgeSelection.Count != 0) { @@ -277,6 +284,16 @@ void ContextMenuCallback(object data) m_Host.SendEvent(EditorGUIUtility.CommandEvent((string)data)); } + void ContextMenuColorCallback(object data) + { + var newColor = (Graphs.Styles.Color)data; + + foreach (Node node in selection) + { + node.SetColor(newColor); + } + } + void CreateMenuItemCallback(object data) { var type = data as Type; diff --git a/Assets/Klak/Wiring/Editor/Patcher/Node.cs b/Assets/Klak/Wiring/Editor/Patcher/Node.cs index 9081443..f92f3f3 100644 --- a/Assets/Klak/Wiring/Editor/Patcher/Node.cs +++ b/Assets/Klak/Wiring/Editor/Patcher/Node.cs @@ -57,6 +57,17 @@ public bool isValid { get { return _runtimeInstance != null; } } + // Set color of node + public void SetColor(Graphs.Styles.Color newColor) + { + if (color == newColor) return; + + color = newColor; + _serializedObject.Update(); + _serializedColor.intValue = (int)newColor; + _serializedObject.ApplyModifiedProperties(); + } + #endregion #region Overridden virtual methods @@ -98,6 +109,7 @@ public override void Dirty() // Serialized property accessor SerializedObject _serializedObject; SerializedProperty _serializedPosition; + SerializedProperty _serializedColor; // Initializer (called from the Create method) void Initialize(Wiring.NodeBase runtimeInstance) @@ -108,10 +120,12 @@ void Initialize(Wiring.NodeBase runtimeInstance) _runtimeInstance = runtimeInstance; _serializedObject = new UnityEditor.SerializedObject(runtimeInstance); _serializedPosition = _serializedObject.FindProperty("_wiringNodePosition"); + _serializedColor = _serializedObject.FindProperty("_wiringNodeColor"); // Basic information name = runtimeInstance.GetInstanceID().ToString(); position = new Rect(_serializedPosition.vector2Value, Vector2.zero); + color = (Graphs.Styles.Color)_serializedColor.intValue; // Slot initialization PopulateSlots(); diff --git a/Assets/Klak/Wiring/Runtime/System/NodeBase.cs b/Assets/Klak/Wiring/Runtime/System/NodeBase.cs index 492a698..473950d 100644 --- a/Assets/Klak/Wiring/Runtime/System/NodeBase.cs +++ b/Assets/Klak/Wiring/Runtime/System/NodeBase.cs @@ -51,6 +51,9 @@ public class NodeBase : MonoBehaviour [SerializeField, HideInInspector] Vector2 _wiringNodePosition = uninitializedNodePosition; + [SerializeField, HideInInspector] + int _wiringNodeColor = uninitializedNodeColor; + [Serializable] public class VoidEvent : UnityEvent {} @@ -69,5 +72,9 @@ public class ColorEvent : UnityEvent {} static public Vector2 uninitializedNodePosition { get { return new Vector2(-1000, -1000); } } + + static public int uninitializedNodeColor { + get { return 0; } + } } }