diff options
Diffstat (limited to 'Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Templates/TemplateOptionsUI.cs')
-rw-r--r-- | Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Templates/TemplateOptionsUI.cs | 300 |
1 files changed, 300 insertions, 0 deletions
diff --git a/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Templates/TemplateOptionsUI.cs b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Templates/TemplateOptionsUI.cs new file mode 100644 index 00000000..559f3a44 --- /dev/null +++ b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Templates/TemplateOptionsUI.cs @@ -0,0 +1,300 @@ +// Amplify Shader Editor - Visual Shader Editing Tool +// Copyright (c) Amplify Creations, Lda <info@amplify.pt> + +using System; +using System.Collections.Generic; +using UnityEngine; +using UnityEditor; + +namespace AmplifyShaderEditor +{ + // UI STRUCTURES + [Serializable] + public class TemplateOptionUIItem + { + public delegate void OnActionPerformed( bool isRefreshing, bool invertAction, TemplateOptionUIItem uiItem, params TemplateActionItem[] validActions ); + public event OnActionPerformed OnActionPerformedEvt; + + [SerializeField] + private bool m_isVisible = true; + + [SerializeField] + private bool m_wasVisible = true; + + [SerializeField] + private int m_currentOption = 0; + + [SerializeField] + private TemplateOptionsItem m_options; + + [SerializeField] + private bool m_checkOnExecute = false; + + [SerializeField] + private bool m_invertActionOnDeselection = false; + + public TemplateOptionUIItem( TemplateOptionsItem options ) + { + m_options = options; + if( m_options.Type == AseOptionsType.Field ) + { + m_options.FieldValue.FloatValue = m_options.DefaultFieldValue; + } + else + { + m_currentOption = m_options.DefaultOptionIndex; + } + m_invertActionOnDeselection = options.Setup == AseOptionItemSetup.InvertActionOnDeselection; + } + + public void CopyValuesFrom( TemplateOptionUIItem origin ) + { + m_isVisible = origin.IsVisible; + m_wasVisible = origin.WasVisible; + m_currentOption = origin.CurrentOption; + m_options.FieldValue.FloatValue = origin.CurrentFieldValue; + m_checkOnExecute = origin.CheckOnExecute; + m_invertActionOnDeselection = origin.InvertActionOnDeselection; + } + + public void Draw( UndoParentNode owner ) + { + if( m_isVisible ) + { + int lastOption = m_currentOption; + EditorGUI.BeginChangeCheck(); + switch( m_options.UIWidget ) + { + case AseOptionsUIWidget.Dropdown: + { + m_currentOption = owner.EditorGUILayoutPopup( m_options.Name, m_currentOption, m_options.DisplayOptions ); + } + break; + case AseOptionsUIWidget.Toggle: + { + m_currentOption = owner.EditorGUILayoutToggle( m_options.Name, m_currentOption == 1 ) ? 1 : 0; + } + break; + case AseOptionsUIWidget.Float: + { + if( m_options.FieldInline ) + { + m_options.FieldValue.FloatField( ref owner, m_options.Name ); + if( m_options.FieldValue.Active ) + m_currentOption = 1; + else + m_currentOption = 0; + } + else + { + m_options.FieldValue.FloatValue = owner.EditorGUILayoutFloatField( m_options.Name, m_options.FieldValue.FloatValue ); + } + } + break; + case AseOptionsUIWidget.Int: + { + if( m_options.FieldInline ) + { + m_options.FieldValue.IntField( ref owner, m_options.Name ); + if( m_options.FieldValue.Active ) + m_currentOption = 1; + else + m_currentOption = 0; + } + else + m_options.FieldValue.FloatValue = owner.EditorGUILayoutIntField( m_options.Name, (int)m_options.FieldValue.FloatValue ); + } + break; + case AseOptionsUIWidget.FloatRange: + { + if( m_options.FieldInline ) + { + m_options.FieldValue.SliderField( ref owner, m_options.Name, m_options.FieldMin, m_options.FieldMax ); + if( m_options.FieldValue.Active ) + m_currentOption = 1; + else + m_currentOption = 0; + } + else + m_options.FieldValue.FloatValue = owner.EditorGUILayoutSlider( m_options.Name, m_options.FieldValue.FloatValue, m_options.FieldMin, m_options.FieldMax ); + } + break; + case AseOptionsUIWidget.IntRange: + { + if( m_options.FieldInline ) + { + m_options.FieldValue.IntSlider( ref owner, m_options.Name, (int)m_options.FieldMin, (int)m_options.FieldMax ); + if( m_options.FieldValue.Active ) + m_currentOption = 1; + else + m_currentOption = 0; + } + else + m_options.FieldValue.FloatValue = owner.EditorGUILayoutIntSlider( m_options.Name, (int)m_options.FieldValue.FloatValue, (int)m_options.FieldMin, (int)m_options.FieldMax ); + } + break; + } + if( EditorGUI.EndChangeCheck() ) + { + if( OnActionPerformedEvt != null ) + { + if( m_invertActionOnDeselection ) + OnActionPerformedEvt( false, lastOption != m_options.DisableIdx, this, m_options.ActionsPerOption[ lastOption ] ); + + OnActionPerformedEvt( false, false, this, m_options.ActionsPerOption[ m_currentOption ] ); + } + } + } + } + + public void CheckEnDisable() + { + //string deb = string.Empty;// "-- Checked --" + m_options.Name+" "+ m_isVisible + " "+ m_wasVisible; + if( m_isVisible ) + { + if( !m_wasVisible ) + { + //deb = "-- Enable --" + m_options.Name; + //Debug.Log( deb ); + if( OnActionPerformedEvt != null ) + { + if( m_invertActionOnDeselection ) + { + for( int i = 0; i < m_options.Count; i++ ) + { + if( i != m_currentOption && i != m_options.DisableIdx ) + { + OnActionPerformedEvt( false, true, this, m_options.ActionsPerOption[ i ] ); + } + } + } + + OnActionPerformedEvt( false, false, this, m_options.ActionsPerOption[ m_currentOption ] ); + //if( !m_isVisible ) + //OnActionPerformedEvt( isRefreshing, false, this, m_options.ActionsPerOption[ m_options.DisableIdx ] ); + } + } + + m_wasVisible = true; + } + else if( m_wasVisible ) + { + //deb = "-- Disable --" + m_options.Name; + //Debug.Log( deb ); + m_wasVisible = false; + + if( OnActionPerformedEvt != null ) + { + OnActionPerformedEvt( false, false, this, m_options.ActionsPerOption[ m_options.DisableIdx ] ); + } + } + } + + public void FillDataCollector( ref MasterNodeDataCollector dataCollector ) + { + if( m_isVisible && m_checkOnExecute ) + { + for( int i = 0; i < m_options.ActionsPerOption[ m_currentOption ].Length; i++ ) + { + switch( m_options.ActionsPerOption[ m_currentOption ][ i ].ActionType ) + { + case AseOptionsActionType.SetDefine: + { + dataCollector.AddToDefines( -1, m_options.ActionsPerOption[ m_currentOption ][ i ].ActionData ); + } + break; + case AseOptionsActionType.SetUndefine: + { + dataCollector.AddToDefines( -1, m_options.ActionsPerOption[ m_currentOption ][ i ].ActionData, false ); + } + break; + } + } + } + } + + public void Refresh() + { + if( OnActionPerformedEvt != null ) + { + if( m_invertActionOnDeselection ) + { + for( int i = 0; i < m_options.Count; i++ ) + { + if( i != m_currentOption && i != m_options.DisableIdx ) + { + OnActionPerformedEvt( true, true, this, m_options.ActionsPerOption[ i ] ); + } + } + } + + OnActionPerformedEvt( true, false, this, m_options.ActionsPerOption[ m_currentOption ] ); + } + } + + public TemplateOptionsItem Options { get { return m_options; } } + + public void Destroy() + { + OnActionPerformedEvt = null; + } + + public bool IsVisible + { + get { return m_isVisible; } + set { m_isVisible = value; } + } + + public bool WasVisible + { + get { return m_wasVisible; } + set { m_wasVisible = value; } + } + + public bool CheckOnExecute + { + get { return m_checkOnExecute; } + set { m_checkOnExecute = value; } + } + + public InlineProperty FieldValue + { + get { return m_options.FieldValue; } + set { m_options.FieldValue = value; } + } + + public float CurrentFieldValue + { + get { return m_options.FieldValue.FloatValue; } + set { m_options.FieldValue.FloatValue = value; } + } + + public int CurrentOption + { + get { return m_currentOption; } + set + { + m_currentOption = Mathf.Clamp( value, 0, m_options.Options.Length - 1 ); + // why refreshing here? + //Refresh(); + } + } + + public int CurrentOptionIdx + { + set + { + m_currentOption = Mathf.Clamp( value, 0, m_options.Options.Length - 1 ); + } + } + public bool EmptyEvent { get { return OnActionPerformedEvt == null; } } + public TemplateActionItemGrid.TemplateActionItemRow CurrentOptionActions + { + get + { + return m_options.ActionsPerOption.Rows[m_currentOption]; + } + } + public bool InvertActionOnDeselection { get { return m_invertActionOnDeselection; } } + } +} |