TemplateOptionsDefinesContainer.cs 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. using UnityEngine;
  2. using System;
  3. using System.Collections.Generic;
  4. namespace AmplifyShaderEditor
  5. {
  6. [Serializable]
  7. public class TemplateOptionsDefinesContainer
  8. {
  9. [SerializeField]
  10. private List<PropertyDataCollector> m_directivesList = new List<PropertyDataCollector>();
  11. [NonSerialized]
  12. private Dictionary<string, PropertyDataCollector> m_directivesDict = new Dictionary<string, PropertyDataCollector>();
  13. void Refresh()
  14. {
  15. if( m_directivesDict.Count != m_directivesList.Count )
  16. {
  17. m_directivesDict.Clear();
  18. for( int i = 0; i < m_directivesList.Count; i++ )
  19. {
  20. m_directivesDict.Add( m_directivesList[ i ].PropertyName, m_directivesList[ i ] );
  21. }
  22. }
  23. }
  24. public void RemoveTemporaries()
  25. {
  26. List<PropertyDataCollector> temporaries = m_directivesList.FindAll( ( x ) => ( x.NodeId == 1 ) );
  27. for( int i = 0; i < temporaries.Count; i++ )
  28. {
  29. m_directivesList.Remove( temporaries[ i ] );
  30. m_directivesDict.Remove( temporaries[ i ].PropertyName );
  31. }
  32. }
  33. public void AddDirective( string directive , bool temporary , bool isPragma = false )
  34. {
  35. Refresh();
  36. if( !m_directivesDict.ContainsKey( directive ) )
  37. {
  38. int nodeId = temporary ? 1 : 0;
  39. PropertyDataCollector data = new PropertyDataCollector( nodeId, directive,-1, isPragma );
  40. m_directivesDict.Add( directive, data );
  41. m_directivesList.Add( data );
  42. }
  43. }
  44. public void RemoveDirective( string directive )
  45. {
  46. Refresh();
  47. if( m_directivesDict.ContainsKey( directive ) )
  48. {
  49. m_directivesList.Remove( m_directivesDict[directive] );
  50. m_directivesDict.Remove( directive );
  51. }
  52. }
  53. public void Destroy()
  54. {
  55. m_directivesDict.Clear();
  56. m_directivesDict = null;
  57. m_directivesList.Clear();
  58. m_directivesList = null;
  59. }
  60. public List<PropertyDataCollector> DefinesList { get { return m_directivesList; } }
  61. }
  62. }