summaryrefslogtreecommitdiff
path: root/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Templates/TemplateOptionsUI.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Templates/TemplateOptionsUI.cs')
-rw-r--r--Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Templates/TemplateOptionsUI.cs300
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; } }
+ }
+}