ComparisonNode.cs 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. using System.Reflection;
  2. using UnityEngine;
  3. using UnityEditor.Graphing;
  4. using UnityEditor.ShaderGraph.Drawing.Controls;
  5. namespace UnityEditor.ShaderGraph
  6. {
  7. enum ComparisonType
  8. {
  9. Equal,
  10. NotEqual,
  11. Less,
  12. LessOrEqual,
  13. Greater,
  14. GreaterOrEqual
  15. };
  16. [Title("Utility", "Logic", "Comparison")]
  17. class ComparisonNode : CodeFunctionNode
  18. {
  19. public ComparisonNode()
  20. {
  21. name = "Comparison";
  22. }
  23. [SerializeField]
  24. private ComparisonType m_ComparisonType = ComparisonType.Equal;
  25. [EnumControl("")]
  26. public ComparisonType comparisonType
  27. {
  28. get { return m_ComparisonType; }
  29. set
  30. {
  31. if (m_ComparisonType == value)
  32. return;
  33. m_ComparisonType = value;
  34. Dirty(ModificationScope.Graph);
  35. }
  36. }
  37. public override bool hasPreview
  38. {
  39. get { return false; }
  40. }
  41. protected override MethodInfo GetFunctionToConvert()
  42. {
  43. switch (comparisonType)
  44. {
  45. case ComparisonType.NotEqual:
  46. return GetType().GetMethod("Unity_Comparison_NotEqual", BindingFlags.Static | BindingFlags.NonPublic);
  47. case ComparisonType.Less:
  48. return GetType().GetMethod("Unity_Comparison_Less", BindingFlags.Static | BindingFlags.NonPublic);
  49. case ComparisonType.LessOrEqual:
  50. return GetType().GetMethod("Unity_Comparison_LessOrEqual", BindingFlags.Static | BindingFlags.NonPublic);
  51. case ComparisonType.Greater:
  52. return GetType().GetMethod("Unity_Comparison_Greater", BindingFlags.Static | BindingFlags.NonPublic);
  53. case ComparisonType.GreaterOrEqual:
  54. return GetType().GetMethod("Unity_Comparison_GreaterOrEqual", BindingFlags.Static | BindingFlags.NonPublic);
  55. default:
  56. return GetType().GetMethod("Unity_Comparison_Equal", BindingFlags.Static | BindingFlags.NonPublic);
  57. }
  58. }
  59. static string Unity_Comparison_Equal(
  60. [Slot(0, Binding.None)] Vector1 A,
  61. [Slot(1, Binding.None)] Vector1 B,
  62. [Slot(2, Binding.None)] out Boolean Out)
  63. {
  64. return
  65. @"
  66. {
  67. Out = A == B ? 1 : 0;
  68. }
  69. ";
  70. }
  71. static string Unity_Comparison_NotEqual(
  72. [Slot(0, Binding.None)] Vector1 A,
  73. [Slot(1, Binding.None)] Vector1 B,
  74. [Slot(2, Binding.None)] out Boolean Out)
  75. {
  76. return
  77. @"
  78. {
  79. Out = A != B ? 1 : 0;
  80. }
  81. ";
  82. }
  83. static string Unity_Comparison_Less(
  84. [Slot(0, Binding.None)] Vector1 A,
  85. [Slot(1, Binding.None)] Vector1 B,
  86. [Slot(2, Binding.None)] out Boolean Out)
  87. {
  88. return
  89. @"
  90. {
  91. Out = A < B ? 1 : 0;
  92. }
  93. ";
  94. }
  95. static string Unity_Comparison_LessOrEqual(
  96. [Slot(0, Binding.None)] Vector1 A,
  97. [Slot(1, Binding.None)] Vector1 B,
  98. [Slot(2, Binding.None)] out Boolean Out)
  99. {
  100. return
  101. @"
  102. {
  103. Out = A <= B ? 1 : 0;
  104. }
  105. ";
  106. }
  107. static string Unity_Comparison_Greater(
  108. [Slot(0, Binding.None)] Vector1 A,
  109. [Slot(1, Binding.None)] Vector1 B,
  110. [Slot(2, Binding.None)] out Boolean Out)
  111. {
  112. return
  113. @"
  114. {
  115. Out = A > B ? 1 : 0;
  116. }
  117. ";
  118. }
  119. static string Unity_Comparison_GreaterOrEqual(
  120. [Slot(0, Binding.None)] Vector1 A,
  121. [Slot(1, Binding.None)] Vector1 B,
  122. [Slot(2, Binding.None)] out Boolean Out)
  123. {
  124. return
  125. @"
  126. {
  127. Out = A >= B ? 1 : 0;
  128. }
  129. ";
  130. }
  131. }
  132. }