summaryrefslogtreecommitdiff
path: root/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/CommentaryNode.cs
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2020-10-23 13:08:43 +0800
committerchai <chaifix@163.com>2020-10-23 13:08:43 +0800
commitb82da95b5181ac8bbae38efb13e950d5e88a4caa (patch)
tree48a6f3269276484bbc7cfc95f0651f40a2176aa1 /Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/CommentaryNode.cs
parent917e9e0b320775634dc2e710f7deac74fd0822f0 (diff)
*移动amplify shader editor到third party目录
Diffstat (limited to 'Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/CommentaryNode.cs')
-rw-r--r--Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/CommentaryNode.cs692
1 files changed, 692 insertions, 0 deletions
diff --git a/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/CommentaryNode.cs b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/CommentaryNode.cs
new file mode 100644
index 00000000..141fea0d
--- /dev/null
+++ b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/CommentaryNode.cs
@@ -0,0 +1,692 @@
+// Amplify Shader Editor - Visual Shader Editing Tool
+// Copyright (c) Amplify Creations, Lda <info@amplify.pt>
+
+using System;
+using UnityEngine;
+using System.Collections.Generic;
+using UnityEditor;
+
+namespace AmplifyShaderEditor
+{
+ public enum eResizeAxis
+ {
+ X_AXIS,
+ Y_AXIS,
+ ALL
+ }
+
+ [Serializable]
+ public sealed class CommentaryNode : ParentNode, ISerializationCallbackReceiver
+ {
+ private const string InfoText = "Press Alt + Left Mouse Click/Drag to make all Comment node area interactable.\nDouble click on the Comment at the node body to modify it directly from there.";
+
+ private const string CommentaryTitle = "Comment";
+ private const float BORDER_SIZE_X = 50;
+ private const float BORDER_SIZE_Y = 50;
+ private const float MIN_SIZE_X = 100;
+ private const float MIN_SIZE_Y = 100;
+ private const float COMMENTARY_BOX_HEIGHT = 30;
+
+ private readonly Vector2 ResizeButtonPos = new Vector2( 1, 1 );
+
+ [SerializeField]
+ private string m_commentText = "Comment";
+
+ [SerializeField]
+ private string m_titleText = string.Empty;
+
+ [SerializeField]
+ private eResizeAxis m_resizeAxis = eResizeAxis.ALL;
+
+ [SerializeField]
+ private List<ParentNode> m_nodesOnCommentary = new List<ParentNode>();
+ private Dictionary<int, ParentNode> m_nodesOnCommentaryDict = new Dictionary<int, ParentNode>();
+ private bool m_reRegisterNodes = false;
+
+ [SerializeField]
+ private Rect m_resizeLeftIconCoords;
+
+ [SerializeField]
+ private Rect m_resizeRightIconCoords;
+
+ [SerializeField]
+ private Rect m_auxHeaderPos;
+
+ [SerializeField]
+ private Rect m_commentArea;
+
+ private Texture2D m_resizeIconTex;
+
+ private bool m_isResizingRight = false;
+ private bool m_isResizingLeft = false;
+
+ private Vector2 m_resizeStartPoint = Vector2.zero;
+
+ private string m_focusName = "CommentaryNode";
+ private bool m_focusOnTitle = false;
+ private bool m_graphDepthAnalized = false;
+
+ private bool m_checkCommentText = true;
+ private bool m_checkTitleText = true;
+
+ public Color m_frameColor = Color.white;
+
+ private List<int> m_nodesIds = new List<int>();
+ private bool m_checkContents = false;
+
+ private bool m_isEditing;
+ private bool m_stopEditing;
+ private bool m_startEditing;
+ private double m_clickTime;
+ private double m_doubleClickTime = 0.3;
+
+
+ protected override void CommonInit( int uniqueId )
+ {
+ base.CommonInit( uniqueId );
+ m_reorderLocked = true;
+ m_rmbIgnore = true;
+ m_defaultInteractionMode = InteractionMode.Both;
+ m_headerColor = UIUtils.GetColorFromCategory( "Commentary" );
+ m_connStatus = NodeConnectionStatus.Island;
+ m_textLabelWidth = 90;
+ }
+
+ protected override void OnUniqueIDAssigned()
+ {
+ base.OnUniqueIDAssigned();
+ m_focusName = CommentaryTitle + OutputId;
+ }
+
+ public void CreateFromSelectedNodes( Vector2 mousePosOnCanvasCoords, ParentNode[] selectedNodes )
+ {
+ if ( selectedNodes.Length == 0 )
+ {
+ m_position = new Rect( mousePosOnCanvasCoords, new Vector2( 100, 100 ) );
+ return;
+ }
+
+ Vector2 minPos = new Vector2( float.MaxValue, float.MaxValue );
+ Vector2 maxPos = new Vector2( float.MinValue, float.MinValue );
+
+ for ( int i = 0; i < selectedNodes.Length; i++ )
+ {
+ //Check min
+ if ( selectedNodes[ i ].Position.x < minPos.x )
+ minPos.x = selectedNodes[ i ].Position.x;
+
+ if ( selectedNodes[ i ].Position.y < minPos.y )
+ minPos.y = selectedNodes[ i ].Position.y;
+
+ //check max
+ float nodeXMax = selectedNodes[ i ].Position.x + selectedNodes[ i ].Position.width;
+ if ( nodeXMax > maxPos.x )
+ {
+ maxPos.x = nodeXMax;
+ }
+
+ float nodeYMax = selectedNodes[ i ].Position.y + selectedNodes[ i ].Position.height;
+ if ( nodeYMax > maxPos.y )
+ {
+ maxPos.y = nodeYMax;
+ }
+
+ //_nodesOnCommentary.Add( selectedNodes[ i ] );
+ //selectedNodes[ i ].OnNodeStoppedMovingEvent += NodeStoppedMoving;
+ AddNodeToCommentary( selectedNodes[ i ] );
+ }
+
+ Vector2 dims = maxPos - minPos + new Vector2( 2 * BORDER_SIZE_X, 2 * BORDER_SIZE_Y );
+ m_position = new Rect( minPos.x - BORDER_SIZE_X, minPos.y - BORDER_SIZE_Y, dims.x, dims.y );
+ }
+
+ public override void Move( Vector2 delta, bool snap )
+ {
+ if ( m_isResizingRight || m_isResizingLeft )
+ return;
+
+ base.Move( delta, snap );
+ for ( int i = 0; i < m_nodesOnCommentary.Count; i++ )
+ {
+ if ( !m_nodesOnCommentary[ i ].Selected )
+ {
+ m_nodesOnCommentary[ i ].RecordObject( Constants.UndoMoveNodesId );
+ m_nodesOnCommentary[ i ].Move( delta, snap );
+ }
+ }
+ }
+
+ public void NodeStoppedMoving( ParentNode node, bool testOnlySelected, InteractionMode useTargetInteraction )
+ {
+ if ( !m_position.Contains( node.Vec2Position ) && !m_position.Contains( node.Corner ) )
+ {
+ RemoveNode( node );
+ }
+ }
+
+ public void NodeDestroyed( ParentNode node )
+ {
+ RemoveNode( node );
+ }
+
+ public void RemoveNode( ParentNode node )
+ {
+ if ( m_nodesOnCommentaryDict.ContainsKey( node.UniqueId ) )
+ {
+ UIUtils.MarkUndoAction();
+ RecordObject( Constants.UndoRemoveNodeFromCommentaryId );
+ node.RecordObject( Constants.UndoRemoveNodeFromCommentaryId );
+ m_nodesOnCommentary.Remove( node );
+ m_nodesOnCommentaryDict.Remove( node.UniqueId );
+ node.OnNodeStoppedMovingEvent -= NodeStoppedMoving;
+ node.OnNodeDestroyedEvent -= NodeDestroyed;
+ node.CommentaryParent = -1;
+ }
+ }
+
+ public void RemoveAllNodes()
+ {
+ UIUtils.MarkUndoAction();
+ for ( int i = 0; i < m_nodesOnCommentary.Count; i++ )
+ {
+ RecordObject( Constants.UndoRemoveNodeFromCommentaryId );
+ m_nodesOnCommentary[ i ].RecordObject( Constants.UndoRemoveNodeFromCommentaryId );
+ m_nodesOnCommentary[ i ].OnNodeStoppedMovingEvent -= NodeStoppedMoving;
+ m_nodesOnCommentary[ i ].OnNodeDestroyedEvent -= NodeDestroyed;
+ m_nodesOnCommentary[ i ].CommentaryParent = -1;
+ }
+ m_nodesOnCommentary.Clear();
+ m_nodesOnCommentaryDict.Clear();
+ }
+
+ public override void Destroy()
+ {
+ base.Destroy();
+ RemoveAllNodes();
+ }
+
+ public void AddNodeToCommentary( ParentNode node )
+ {
+ if( node.UniqueId == UniqueId )
+ return;
+
+ if ( !m_nodesOnCommentaryDict.ContainsKey( node.UniqueId ) )
+ {
+ bool addToNode = false;
+
+ if ( node.CommentaryParent < 0 )
+ {
+ addToNode = true;
+ if ( node.Depth <= m_depth )
+ {
+ ActivateNodeReordering( node.Depth );
+ }
+ }
+ else
+ {
+ CommentaryNode other = UIUtils.GetNode( node.CommentaryParent ) as CommentaryNode;
+ if ( other != null )
+ {
+ if ( other.Depth < Depth )
+ {
+ other.RemoveNode( node );
+ addToNode = true;
+ }
+
+ }
+ }
+
+ if ( addToNode )
+ {
+ UIUtils.MarkUndoAction();
+ RecordObject( Constants.UndoAddNodeToCommentaryId );
+ node.RecordObject( Constants.UndoAddNodeToCommentaryId );
+
+ m_nodesOnCommentary.Add( node );
+ m_nodesOnCommentaryDict.Add( node.UniqueId, node );
+ node.OnNodeStoppedMovingEvent += NodeStoppedMoving;
+ node.OnNodeDestroyedEvent += NodeDestroyed;
+ node.CommentaryParent = UniqueId;
+ }
+ }
+ }
+
+ public override void DrawProperties()
+ {
+ base.DrawProperties();
+ NodeUtils.DrawPropertyGroup( ref m_propertiesFoldout, Constants.ParameterLabelStr,()=>
+ {
+ EditorGUI.BeginChangeCheck();
+ m_titleText = EditorGUILayoutTextField( "Frame Title", m_titleText );
+ if ( EditorGUI.EndChangeCheck() )
+ {
+ m_checkTitleText = true;
+ }
+ EditorGUI.BeginChangeCheck();
+ m_commentText = EditorGUILayoutTextField( CommentaryTitle, m_commentText );
+ if ( EditorGUI.EndChangeCheck() )
+ {
+ m_checkCommentText = true;
+ }
+
+ m_frameColor = EditorGUILayoutColorField( "Frame Color", m_frameColor );
+ } );
+ EditorGUILayout.HelpBox( InfoText, MessageType.Info );
+ }
+
+ public override void OnNodeLayout( DrawInfo drawInfo )
+ {
+ if ( m_nodesIds.Count > 0 )
+ {
+ for ( int i = 0; i < m_nodesIds.Count; i++ )
+ {
+ ParentNode node = ContainerGraph.GetNode( m_nodesIds[ i ] );
+ if ( node )
+ {
+ AddNodeToCommentary( node );
+ }
+ }
+ m_nodesIds.Clear();
+ }
+
+ if ( m_reRegisterNodes )
+ {
+ m_reRegisterNodes = false;
+ m_nodesOnCommentaryDict.Clear();
+ for ( int i = 0; i < m_nodesOnCommentary.Count; i++ )
+ {
+ if ( m_nodesOnCommentary[ i ] != null )
+ {
+ m_nodesOnCommentary[ i ].OnNodeStoppedMovingEvent += NodeStoppedMoving;
+ m_nodesOnCommentary[ i ].OnNodeDestroyedEvent += NodeDestroyed;
+ m_nodesOnCommentaryDict.Add( m_nodesOnCommentary[ i ].UniqueId, m_nodesOnCommentary[ i ] );
+ }
+ }
+ }
+
+ //base.OnLayout( drawInfo );
+ CalculatePositionAndVisibility( drawInfo );
+
+ m_headerPosition = m_globalPosition;
+ m_headerPosition.height = UIUtils.CurrentHeaderHeight;
+
+ m_auxHeaderPos = m_position;
+ m_auxHeaderPos.height = UIUtils.HeaderMaxHeight;
+
+ m_commentArea = m_globalPosition;
+ m_commentArea.height = COMMENTARY_BOX_HEIGHT * drawInfo.InvertedZoom;
+ m_commentArea.xMin += 10 * drawInfo.InvertedZoom;
+ m_commentArea.xMax -= 10 * drawInfo.InvertedZoom;
+
+ if ( m_resizeIconTex == null )
+ {
+ m_resizeIconTex = UIUtils.GetCustomStyle( CustomStyle.CommentaryResizeButton ).normal.background;
+ }
+
+ // LEFT RESIZE BUTTON
+ m_resizeLeftIconCoords = m_globalPosition;
+ m_resizeLeftIconCoords.x = m_globalPosition.x + 2;
+ m_resizeLeftIconCoords.y = m_globalPosition.y + m_globalPosition.height - 2 - ( m_resizeIconTex.height + ResizeButtonPos.y ) * drawInfo.InvertedZoom;
+ m_resizeLeftIconCoords.width = m_resizeIconTex.width * drawInfo.InvertedZoom;
+ m_resizeLeftIconCoords.height = m_resizeIconTex.height * drawInfo.InvertedZoom;
+
+ // RIGHT RESIZE BUTTON
+ m_resizeRightIconCoords = m_globalPosition;
+ m_resizeRightIconCoords.x = m_globalPosition.x + m_globalPosition.width - 1 - ( m_resizeIconTex.width + ResizeButtonPos.x ) * drawInfo.InvertedZoom;
+ m_resizeRightIconCoords.y = m_globalPosition.y + m_globalPosition.height - 2 - ( m_resizeIconTex.height + ResizeButtonPos.y ) * drawInfo.InvertedZoom;
+ m_resizeRightIconCoords.width = m_resizeIconTex.width * drawInfo.InvertedZoom;
+ m_resizeRightIconCoords.height = m_resizeIconTex.height * drawInfo.InvertedZoom;
+ }
+
+ public override void OnNodeRepaint( DrawInfo drawInfo )
+ {
+ if ( !m_isVisible )
+ return;
+
+ m_colorBuffer = GUI.color;
+ // Background
+ GUI.color = Constants.NodeBodyColor * m_frameColor;
+ GUI.Label( m_globalPosition, string.Empty, UIUtils.GetCustomStyle( CustomStyle.CommentaryBackground ) );
+
+ // Header
+ GUI.color = m_headerColor * m_headerColorModifier * m_frameColor;
+ GUI.Label( m_headerPosition, string.Empty, UIUtils.GetCustomStyle( CustomStyle.NodeHeader ) );
+ GUI.color = m_colorBuffer;
+
+ // Fixed Title ( only renders when not editing )
+ if ( !m_isEditing && !m_startEditing && ContainerGraph.LodLevel <= ParentGraph.NodeLOD.LOD3 )
+ {
+ GUI.Label( m_commentArea, m_commentText, UIUtils.CommentaryTitle );
+ }
+
+ // Buttons
+ GUI.Label( m_resizeLeftIconCoords, string.Empty, UIUtils.GetCustomStyle( CustomStyle.CommentaryResizeButtonInv ) );
+ GUI.Label( m_resizeRightIconCoords, string.Empty, UIUtils.GetCustomStyle( CustomStyle.CommentaryResizeButton ) );
+
+ // Selection Box
+ if ( m_selected )
+ {
+ GUI.color = Constants.NodeSelectedColor;
+ RectOffset cache = UIUtils.GetCustomStyle( CustomStyle.NodeWindowOn ).border;
+ UIUtils.GetCustomStyle( CustomStyle.NodeWindowOn ).border = UIUtils.RectOffsetSix;
+ GUI.Label( m_globalPosition, string.Empty, UIUtils.GetCustomStyle( CustomStyle.NodeWindowOn ) );
+ UIUtils.GetCustomStyle( CustomStyle.NodeWindowOn ).border = cache;
+ GUI.color = m_colorBuffer;
+ }
+
+ if ( !string.IsNullOrEmpty( m_titleText ) )
+ {
+ Rect titleRect = m_globalPosition;
+ titleRect.y -= 24;
+ titleRect.height = 24;
+ GUI.Label( titleRect, m_titleText, UIUtils.GetCustomStyle( CustomStyle.CommentarySuperTitle ) );
+ }
+ }
+
+ public override void Draw( DrawInfo drawInfo )
+ {
+ base.Draw( drawInfo );
+
+ // Custom Editable Title
+ if ( ContainerGraph.LodLevel <= ParentGraph.NodeLOD.LOD3 )
+ {
+ if ( !m_isEditing && ( ( !ContainerGraph.ParentWindow.MouseInteracted && drawInfo.CurrentEventType == EventType.MouseDown && m_commentArea.Contains( drawInfo.MousePosition ) ) ) )
+ {
+ if ( ( EditorApplication.timeSinceStartup - m_clickTime ) < m_doubleClickTime )
+ m_startEditing = true;
+ else
+ GUI.FocusControl( null );
+ m_clickTime = EditorApplication.timeSinceStartup;
+ }
+ else if ( m_isEditing && ( ( drawInfo.CurrentEventType == EventType.MouseDown && !m_commentArea.Contains( drawInfo.MousePosition ) ) || !EditorGUIUtility.editingTextField ) )
+ {
+ m_stopEditing = true;
+ }
+
+ if ( m_isEditing || m_startEditing )
+ {
+ EditorGUI.BeginChangeCheck();
+ GUI.SetNextControlName( m_focusName );
+ m_commentText = EditorGUITextField( m_commentArea, string.Empty, m_commentText, UIUtils.CommentaryTitle );
+ if ( EditorGUI.EndChangeCheck() )
+ {
+ m_checkCommentText = true;
+ }
+
+ if ( m_startEditing )
+ EditorGUI.FocusTextInControl( m_focusName );
+ }
+
+ if ( drawInfo.CurrentEventType == EventType.Repaint )
+ {
+ if ( m_startEditing )
+ {
+ m_startEditing = false;
+ m_isEditing = true;
+ }
+
+ if ( m_stopEditing )
+ {
+ m_stopEditing = false;
+ m_isEditing = false;
+ GUI.FocusControl( null );
+ }
+ }
+ }
+
+ if ( drawInfo.CurrentEventType == EventType.MouseDown && drawInfo.LeftMouseButtonPressed )
+ {
+ // Left Button
+ if( m_resizeLeftIconCoords.Contains( drawInfo.MousePosition ) && ContainerGraph.ParentWindow.CurrentEvent.modifiers != EventModifiers.Shift )
+ {
+ if ( !m_isResizingLeft )
+ {
+ m_isResizingLeft = true;
+ ContainerGraph.ParentWindow.ForceAutoPanDir = true;
+ m_resizeStartPoint = drawInfo.TransformedMousePos;
+ }
+ }
+
+ // Right Button
+ if ( m_resizeRightIconCoords.Contains( drawInfo.MousePosition ) && ContainerGraph.ParentWindow.CurrentEvent.modifiers != EventModifiers.Shift )
+ {
+ if ( !m_isResizingRight )
+ {
+ m_isResizingRight = true;
+ ContainerGraph.ParentWindow.ForceAutoPanDir = true;
+ m_resizeStartPoint = drawInfo.TransformedMousePos;
+ }
+ }
+ }
+
+ if ( drawInfo.CurrentEventType == EventType.Repaint || drawInfo.CurrentEventType == EventType.MouseUp )
+ {
+ // Left Button
+ EditorGUIUtility.AddCursorRect( m_resizeLeftIconCoords, MouseCursor.ResizeUpRight );
+ if ( m_isResizingLeft )
+ {
+ if ( drawInfo.CurrentEventType == EventType.MouseUp )
+ {
+ m_isResizingLeft = false;
+ ContainerGraph.ParentWindow.ForceAutoPanDir = false;
+ RemoveAllNodes();
+ FireStoppedMovingEvent( false, InteractionMode.Target );
+ }
+ else
+ {
+ Vector2 currSize = ( drawInfo.TransformedMousePos - m_resizeStartPoint ) /*/ drawInfo.InvertedZoom*/;
+ m_resizeStartPoint = drawInfo.TransformedMousePos;
+ if ( m_resizeAxis != eResizeAxis.Y_AXIS )
+ {
+ m_position.x += currSize.x;
+ m_position.width -= currSize.x;
+ if ( m_position.width < MIN_SIZE_X )
+ {
+ m_position.x -= ( MIN_SIZE_X - m_position.width );
+ m_position.width = MIN_SIZE_X;
+ }
+ }
+
+ if ( m_resizeAxis != eResizeAxis.X_AXIS )
+ {
+ m_position.height += currSize.y;
+ if ( m_position.height < MIN_SIZE_Y )
+ {
+ m_position.height = MIN_SIZE_Y;
+ }
+ }
+ }
+ }
+
+ // Right Button
+ EditorGUIUtility.AddCursorRect( m_resizeRightIconCoords, MouseCursor.ResizeUpLeft );
+ if ( m_isResizingRight )
+ {
+ if ( drawInfo.CurrentEventType == EventType.MouseUp )
+ {
+ m_isResizingRight = false;
+ ContainerGraph.ParentWindow.ForceAutoPanDir = false;
+ RemoveAllNodes();
+ FireStoppedMovingEvent( false, InteractionMode.Target );
+ }
+ else
+ {
+ Vector2 currSize = ( drawInfo.TransformedMousePos - m_resizeStartPoint ) /*/ drawInfo.InvertedZoom*/;
+ m_resizeStartPoint = drawInfo.TransformedMousePos;
+ if ( m_resizeAxis != eResizeAxis.Y_AXIS )
+ {
+ m_position.width += currSize.x;
+ if ( m_position.width < MIN_SIZE_X )
+ {
+ m_position.width = MIN_SIZE_X;
+ }
+ }
+
+ if ( m_resizeAxis != eResizeAxis.X_AXIS )
+ {
+ m_position.height += currSize.y;
+ if ( m_position.height < MIN_SIZE_Y )
+ {
+ m_position.height = MIN_SIZE_Y;
+ }
+ }
+ }
+ }
+ }
+
+ if ( m_checkCommentText )
+ {
+ m_checkCommentText = false;
+ m_commentText = m_commentText.Replace( IOUtils.FIELD_SEPARATOR, ' ' );
+ }
+
+ if ( m_checkTitleText )
+ {
+ m_checkTitleText = false;
+ m_titleText = m_titleText.Replace( IOUtils.FIELD_SEPARATOR, ' ' );
+ }
+
+ if ( m_focusOnTitle && drawInfo.CurrentEventType == EventType.KeyUp )
+ {
+ m_focusOnTitle = false;
+ m_startEditing = true;
+ }
+ }
+
+ public void Focus()
+ {
+ m_focusOnTitle = true;
+ }
+
+ public override void OnAfterDeserialize()
+ {
+ base.OnAfterDeserialize();
+ m_reRegisterNodes = true;
+ }
+
+ public override bool OnNodeInteraction( ParentNode node )
+ {
+ if ( node == null || UniqueId == node.UniqueId )
+ return false;
+
+ for( int i = 0; i < m_nodesOnCommentary.Count; i++ )
+ {
+ if( m_nodesOnCommentary[ i ] && m_nodesOnCommentary[ i ] != this && m_nodesOnCommentary[ i ].OnNodeInteraction( node ) )
+ {
+ return false;
+ }
+ }
+
+ if( m_position.Contains( node.Vec2Position ) && m_position.Contains( node.Corner ) )
+ {
+ AddNodeToCommentary( node );
+ return true;
+ }
+ return false;
+ }
+
+ public override void OnSelfStoppedMovingEvent()
+ {
+ FireStoppedMovingEvent( false, InteractionMode.Both );
+ }
+
+ public override void ReadFromString( ref string[] nodeParams )
+ {
+ base.ReadFromString( ref nodeParams );
+ m_position.width = Convert.ToSingle( GetCurrentParam( ref nodeParams ) );
+ m_position.height = Convert.ToSingle( GetCurrentParam( ref nodeParams ) );
+ m_commentText = GetCurrentParam( ref nodeParams );
+ int count = Convert.ToInt32( GetCurrentParam( ref nodeParams ) );
+ for ( int i = 0; i < count; i++ )
+ {
+ m_nodesIds.Add( Convert.ToInt32( GetCurrentParam( ref nodeParams ) ) );
+ }
+
+ if ( UIUtils.CurrentShaderVersion() > 5004 )
+ m_titleText = GetCurrentParam( ref nodeParams );
+
+ if ( UIUtils.CurrentShaderVersion() > 12002 )
+ {
+ string[] colorChannels = GetCurrentParam( ref nodeParams ).Split( IOUtils.VECTOR_SEPARATOR );
+ if ( colorChannels.Length == 4 )
+ {
+ m_frameColor.r = Convert.ToSingle( colorChannels[ 0 ] );
+ m_frameColor.g = Convert.ToSingle( colorChannels[ 1 ] );
+ m_frameColor.b = Convert.ToSingle( colorChannels[ 2 ] );
+ m_frameColor.a = Convert.ToSingle( colorChannels[ 3 ] );
+ }
+ else
+ {
+ UIUtils.ShowMessage( UniqueId, "Incorrect number of color values", MessageSeverity.Error );
+ }
+ }
+ }
+
+ public override void WriteToString( ref string nodeInfo, ref string connectionsInfo )
+ {
+ base.WriteToString( ref nodeInfo, ref connectionsInfo );
+ IOUtils.AddFieldValueToString( ref nodeInfo, m_position.width );
+ IOUtils.AddFieldValueToString( ref nodeInfo, m_position.height );
+ IOUtils.AddFieldValueToString( ref nodeInfo, m_commentText );
+ IOUtils.AddFieldValueToString( ref nodeInfo, m_nodesOnCommentary.Count );
+ for ( int i = 0; i < m_nodesOnCommentary.Count; i++ )
+ {
+ IOUtils.AddFieldValueToString( ref nodeInfo, m_nodesOnCommentary[ i ].UniqueId );
+ }
+
+ IOUtils.AddFieldValueToString( ref nodeInfo, m_titleText );
+ IOUtils.AddFieldValueToString( ref nodeInfo, m_frameColor.r.ToString() + IOUtils.VECTOR_SEPARATOR + m_frameColor.g.ToString() + IOUtils.VECTOR_SEPARATOR + m_frameColor.b.ToString() + IOUtils.VECTOR_SEPARATOR + m_frameColor.a.ToString() );
+ }
+
+ public override void ResetNodeData()
+ {
+ base.ResetNodeData();
+ m_graphDepthAnalized = false;
+ }
+
+ public override void ReadAdditionalClipboardData( ref string[] nodeParams )
+ {
+ base.ReadAdditionalClipboardData( ref nodeParams );
+ m_nodesIds.Clear();
+ m_checkContents = true;
+ }
+
+ public override void RefreshExternalReferences()
+ {
+ base.RefreshExternalReferences();
+ if( m_checkContents )
+ {
+ m_checkContents = false;
+ OnSelfStoppedMovingEvent();
+ }
+ }
+
+ public override void CalculateCustomGraphDepth()
+ {
+ if ( m_graphDepthAnalized )
+ return;
+
+ m_graphDepth = int.MinValue;
+ int count = m_nodesOnCommentary.Count;
+ for ( int i = 0; i < count; i++ )
+ {
+ if ( m_nodesOnCommentary[ i ].ConnStatus == NodeConnectionStatus.Island )
+ {
+ m_nodesOnCommentary[ i ].CalculateCustomGraphDepth();
+ }
+
+ if ( m_nodesOnCommentary[ i ].GraphDepth >= m_graphDepth )
+ {
+ m_graphDepth = m_nodesOnCommentary[ i ].GraphDepth + 1;
+ }
+ }
+ m_graphDepthAnalized = true;
+ }
+
+ public override Rect Position { get { return Event.current.alt ? m_position : m_auxHeaderPos; } }
+ public override bool Contains( Vector3 pos )
+ {
+ return Event.current.alt ? m_globalPosition.Contains( pos ) : ( m_headerPosition.Contains( pos ) || m_resizeRightIconCoords.Contains( pos ) || m_resizeLeftIconCoords.Contains( pos ) );
+ }
+ }
+}