123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192 |
- // Amplify Shader Editor - Visual Shader Editing Tool
- // Copyright (c) Amplify Creations, Lda <info@amplify.pt>
- using UnityEngine;
- using UnityEditor;
- namespace AmplifyShaderEditor
- {
- public sealed class ShaderEditorModeWindow : MenuParent
- {
- private static readonly Color OverallColorOn = new Color( 1f, 1f, 1f, 0.9f );
- private static readonly Color OverallColorOff = new Color( 1f, 1f, 1f, 0.3f );
- private static readonly Color FontColorOff = new Color( 1f, 1f, 1f, 0.4f );
- private const float DeltaY = 15;
- private const float DeltaX = 10;
- private const float CollSizeX = 180;
- private const float CollSizeY = 70;
- //private static string MatFormat = "<size=20>MATERIAL</size>\n{0}";
- //private static string ShaderFormat = "<size=20>SHADER</size>\n{0}";
- //private const string CurrMatStr = "MATERIAL";
- //private const string CurrShaderStr = "SHADER";
- private const string NoMaterialStr = "No Material";
- private const string NoShaderStr = "No Shader";
- private bool m_init = true;
- private string m_previousShaderName = string.Empty;
- private string m_previousMaterialName = string.Empty;
- private string m_previousShaderFunctionName = string.Empty;
- private Vector2 m_auxVector2;
- private GUIContent m_leftAuxContent = new GUIContent();
- private GUIContent m_rightAuxContent = new GUIContent();
- private GUIStyle m_leftButtonStyle = null;
- private GUIStyle m_rightButtonStyle = null;
- private Rect m_leftButtonRect;
- private Rect m_rightButtonRect;
- public ShaderEditorModeWindow( AmplifyShaderEditorWindow parentWindow ) : base( parentWindow, 0, 0, 0, 0, "ShaderEditorModeWindow", MenuAnchor.BOTTOM_CENTER, MenuAutoSize.NONE ) { }
- public void ConfigStyle( GUIStyle style )
- {
- style.normal.textColor = FontColorOff;
- style.hover.textColor = FontColorOff;
- style.active.textColor = FontColorOff;
- style.focused.textColor = FontColorOff;
- style.onNormal.textColor = FontColorOff;
- style.onHover.textColor = FontColorOff;
- style.onActive.textColor = FontColorOff;
- style.onFocused.textColor = FontColorOff;
- }
- public void Draw( Rect graphArea, Vector2 mousePos, Shader currentShader, Material currentMaterial, float usableArea, float leftPos, float rightPos /*, bool showLastSelection*/ )
- {
- EventType currentEventType = Event.current.type;
- if( !( currentEventType == EventType.Repaint || currentEventType == EventType.MouseDown || currentEventType == EventType.MouseMove ) )
- return;
- if ( m_init )
- {
- m_init = false;
- GUIStyle shaderModeTitle = UIUtils.GetCustomStyle( CustomStyle.ShaderModeTitle );
- GUIStyle shaderModeNoShader = UIUtils.GetCustomStyle( CustomStyle.ShaderModeNoShader );
- GUIStyle materialModeTitle = UIUtils.GetCustomStyle( CustomStyle.MaterialModeTitle );
- GUIStyle shaderNoMaterialModeTitle = UIUtils.GetCustomStyle( CustomStyle.ShaderNoMaterialModeTitle );
- ConfigStyle( shaderModeTitle );
- ConfigStyle( shaderModeNoShader );
- ConfigStyle( materialModeTitle );
- ConfigStyle( shaderNoMaterialModeTitle );
- }
- Color buffereredColor = GUI.color;
- MasterNode currentMasterNode = ParentWindow.CurrentGraph.CurrentMasterNode;
- // Shader Mode
- if ( currentMasterNode != null )
- {
- m_leftButtonStyle = UIUtils.GetCustomStyle( currentShader == null ? CustomStyle.ShaderModeNoShader : CustomStyle.ShaderModeTitle );
- m_leftButtonRect = graphArea;
- m_leftButtonRect.x = 10 + leftPos;
- m_leftButtonRect.y += m_leftButtonRect.height - 38 - 15;
- string shaderName = ( currentShader != null ) ? ( currentShader.name ) : NoShaderStr;
- if ( m_previousShaderName != shaderName )
- {
- m_previousShaderName = shaderName;
- m_leftAuxContent.text = "<size=20>SHADER</size>\n" + shaderName;
- }
- m_auxVector2 = m_leftButtonStyle.CalcSize( m_leftAuxContent );
- m_leftButtonRect.width = m_auxVector2.x + 30 + 4;
- m_leftButtonRect.height = 38;
- bool mouseOnTop = m_leftButtonRect.Contains( mousePos );
- GUI.color = mouseOnTop ? OverallColorOn : OverallColorOff;
- GUI.Label( m_leftButtonRect, m_leftAuxContent, m_leftButtonStyle );
- if( currentEventType == EventType.MouseMove && mouseOnTop )
- m_parentWindow.MarkToRepaint();
- if ( currentEventType == EventType.MouseDown && mouseOnTop && currentShader != null )
- {
- Event.current.Use();
- Selection.activeObject = currentShader;
- EditorGUIUtility.PingObject( Selection.activeObject );
- }
- // Material Mode
- if ( currentMaterial != null )
- {
- m_rightButtonStyle = UIUtils.GetCustomStyle( CustomStyle.MaterialModeTitle );
- m_rightButtonRect = graphArea;
- string matName = ( currentMaterial != null ) ? ( currentMaterial.name ) : NoMaterialStr;
- if ( m_previousMaterialName != matName )
- {
- m_previousMaterialName = matName;
- m_rightAuxContent.text = "<size=20>MATERIAL</size>\n" + matName;
- }
- m_auxVector2 = m_rightButtonStyle.CalcSize( m_rightAuxContent );
- m_rightButtonRect.width = m_auxVector2.x + 30 + 4;
- m_rightButtonRect.height = 38;
- m_rightButtonRect.x = graphArea.xMax - m_rightButtonRect.width - rightPos - 10;
- m_rightButtonRect.y = graphArea.yMax - 38 - 15;
- bool mouseOnTopRight = m_rightButtonRect.Contains( mousePos );
- GUI.color = mouseOnTopRight ? OverallColorOn : OverallColorOff;
- GUI.Label( m_rightButtonRect, m_rightAuxContent, m_rightButtonStyle );
- if( currentEventType == EventType.MouseMove && mouseOnTopRight )
- m_parentWindow.MarkToRepaint();
- if ( currentEventType == EventType.MouseDown && mouseOnTopRight )
- {
- Event.current.Use();
- Selection.activeObject = currentMaterial;
- EditorGUIUtility.PingObject( Selection.activeObject );
- }
- }
- }
- // Shader Function
- else if ( currentMasterNode == null && ParentWindow.CurrentGraph.CurrentOutputNode != null )
- {
- m_leftButtonStyle = UIUtils.GetCustomStyle( CustomStyle.ShaderFunctionMode );
- m_leftButtonRect = graphArea;
- m_leftButtonRect.x = 10 + leftPos;
- m_leftButtonRect.y += m_leftButtonRect.height - 38 - 15;
- string functionName = ( ParentWindow.CurrentGraph.CurrentShaderFunction != null ) ? ( ParentWindow.CurrentGraph.CurrentShaderFunction.name ) : "No Shader Function";
- if ( m_previousShaderFunctionName != functionName )
- {
- m_previousShaderFunctionName = functionName;
- m_leftAuxContent.text = "<size=20>SHADER FUNCTION</size>\n" + functionName;
- }
- m_auxVector2 = m_leftButtonStyle.CalcSize( m_leftAuxContent );
- m_leftButtonRect.width = m_auxVector2.x + 30 + 4;
- m_leftButtonRect.height = 38;
- bool mouseOnTop = m_leftButtonRect.Contains( mousePos );
- GUI.color = mouseOnTop ? OverallColorOn : OverallColorOff;
- GUI.Label( m_leftButtonRect, m_leftAuxContent, m_leftButtonStyle );
- if ( currentEventType == EventType.MouseDown && mouseOnTop && ParentWindow.CurrentGraph.CurrentShaderFunction != null )
- {
- Event.current.Use();
- Selection.activeObject = ParentWindow.CurrentGraph.CurrentShaderFunction;
- EditorGUIUtility.PingObject( Selection.activeObject );
- }
- }
- GUI.color = buffereredColor;
- }
- public override void Destroy()
- {
- base.Destroy();
- m_leftAuxContent = null;
- m_rightAuxContent = null;
- m_leftButtonStyle = null;
- m_rightButtonStyle = null;
- }
- }
- }
|