TemplateCullModeModule.cs 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. // Amplify Shader Editor - Visual Shader Editing Tool
  2. // Copyright (c) Amplify Creations, Lda <info@amplify.pt>
  3. using UnityEngine;
  4. using UnityEditor;
  5. using System;
  6. namespace AmplifyShaderEditor
  7. {
  8. [Serializable]
  9. public sealed class TemplateCullModeModule : TemplateModuleParent
  10. {
  11. private const string CullModeFormatStr = "Cull ";
  12. public TemplateCullModeModule() : base("Cull Mode"){ }
  13. private static readonly string CullModeStr = "Cull Mode";
  14. [SerializeField]
  15. private CullMode m_cullMode = CullMode.Back;
  16. [SerializeField]
  17. private InlineProperty m_inlineCullMode = new InlineProperty();
  18. public void CopyFrom( TemplateCullModeModule other , bool allData )
  19. {
  20. if( allData )
  21. m_independentModule = other.IndependentModule;
  22. m_cullMode = other.CurrentCullMode;
  23. m_inlineCullMode.CopyFrom( other.CullInlineProperty );
  24. }
  25. public void ConfigureFromTemplateData( TemplateCullModeData data )
  26. {
  27. bool newValidData = ( data.DataCheck == TemplateDataCheck.Valid );
  28. if( newValidData && m_validData != newValidData )
  29. {
  30. m_independentModule = data.IndependentModule;
  31. if( string.IsNullOrEmpty( data.InlineData ) )
  32. {
  33. m_cullMode = data.CullModeData;
  34. m_inlineCullMode.IntValue = (int)m_cullMode;
  35. m_inlineCullMode.ResetProperty();
  36. }
  37. else
  38. {
  39. m_inlineCullMode.SetInlineByName( data.InlineData );
  40. }
  41. }
  42. m_validData = newValidData;
  43. }
  44. public override void Draw( UndoParentNode owner, bool style = true )
  45. {
  46. EditorGUI.BeginChangeCheck();
  47. //m_cullMode = (CullMode)owner.EditorGUILayoutEnumPopup( CullModeStr, m_cullMode );
  48. m_inlineCullMode.CustomDrawer( ref owner, ( x ) => { m_cullMode = (CullMode)owner.EditorGUILayoutEnumPopup( CullModeStr, m_cullMode ); }, CullModeStr );
  49. if( EditorGUI.EndChangeCheck() )
  50. {
  51. m_inlineCullMode.IntValue = (int)m_cullMode;
  52. m_isDirty = true;
  53. CustomEdited = true;
  54. }
  55. }
  56. public override void ReadFromString( ref uint index, ref string[] nodeParams )
  57. {
  58. base.ReadFromString( ref index, ref nodeParams );
  59. bool validDataOnMeta = m_validData;
  60. if( UIUtils.CurrentShaderVersion() > TemplatesManager.MPShaderVersion )
  61. {
  62. validDataOnMeta = Convert.ToBoolean( nodeParams[ index++ ] );
  63. }
  64. if( validDataOnMeta )
  65. {
  66. if( UIUtils.CurrentShaderVersion() < 15304 )
  67. {
  68. m_cullMode = (CullMode)Enum.Parse( typeof( CullMode ), nodeParams[ index++ ] );
  69. m_inlineCullMode.IntValue = (int)m_cullMode;
  70. }
  71. else
  72. {
  73. m_inlineCullMode.ReadFromString( ref index, ref nodeParams );
  74. m_cullMode = (CullMode)m_inlineCullMode.IntValue;
  75. }
  76. }
  77. }
  78. public override void WriteToString( ref string nodeInfo )
  79. {
  80. base.WriteToString( ref nodeInfo );
  81. IOUtils.AddFieldValueToString( ref nodeInfo, m_validData );
  82. if( m_validData )
  83. {
  84. //IOUtils.AddFieldValueToString( ref nodeInfo, m_cullMode );
  85. m_inlineCullMode.WriteToString( ref nodeInfo );
  86. }
  87. }
  88. public override string GenerateShaderData( bool isSubShader )
  89. {
  90. //return CullModeFormatStr + m_cullMode.ToString();
  91. return CullModeFormatStr + m_inlineCullMode.GetValueOrProperty( m_cullMode.ToString());
  92. }
  93. public override void Destroy()
  94. {
  95. base.Destroy();
  96. m_inlineCullMode = null;
  97. }
  98. public CullMode CurrentCullMode
  99. {
  100. get { return m_cullMode; }
  101. set
  102. {
  103. m_cullMode = value;
  104. m_inlineCullMode.IntValue = (int)value;
  105. m_inlineCullMode.Active = false;
  106. }
  107. }
  108. public InlineProperty CullInlineProperty { get { return m_inlineCullMode; } }
  109. }
  110. }