浏览代码

Fixes for PR

/main
Matt Dean 7 年前
当前提交
5131e8e1
共有 2 个文件被更改,包括 33 次插入48 次删除
  1. 38
      MaterialGraphProject/Assets/UnityShaderEditor/Editor/Data/Nodes/Channel/FlipNode.cs
  2. 43
      MaterialGraphProject/Assets/UnityShaderEditor/Editor/Drawing/Controls/ToggleControl.cs

38
MaterialGraphProject/Assets/UnityShaderEditor/Editor/Data/Nodes/Channel/FlipNode.cs


private bool m_RedChannel;
[ToggleControl("Red")]
public ToggleState redChannel
public Toggle redChannel
get { return ToggleHelper.GetToggleValue(m_RedChannel, channelCount > 0); }
get { return new Toggle(m_RedChannel, channelCount > 0); }
bool isOn = ToggleHelper.GetBoolValue(value);
if (m_RedChannel == isOn)
if (m_RedChannel == value.isOn)
m_RedChannel = isOn;
m_RedChannel = value.isOn;
if (onModified != null)
{
onModified(this, ModificationScope.Node);

private bool m_GreenChannel;
[ToggleControl("Green")]
public ToggleState greenChannel
public Toggle greenChannel
get { return ToggleHelper.GetToggleValue(m_GreenChannel, channelCount > 1); }
get { return new Toggle(m_GreenChannel, channelCount > 1); }
bool isOn = ToggleHelper.GetBoolValue(value);
if (m_GreenChannel == isOn)
if (m_GreenChannel == value.isOn)
m_GreenChannel = isOn;
m_GreenChannel = value.isOn;
if (onModified != null)
{
onModified(this, ModificationScope.Node);

private bool m_BlueChannel;
[ToggleControl("Blue")]
public ToggleState blueChannel
public Toggle blueChannel
get { return ToggleHelper.GetToggleValue(m_BlueChannel, channelCount > 2); }
get { return new Toggle(m_BlueChannel, channelCount > 2); }
bool isOn = ToggleHelper.GetBoolValue(value);
if (m_BlueChannel == isOn)
if (m_BlueChannel == value.isOn)
m_BlueChannel = isOn;
m_BlueChannel = value.isOn;
if (onModified != null)
{
onModified(this, ModificationScope.Node);

private bool m_AlphaChannel;
[ToggleControl("Alpha")]
public ToggleState alphaChannel
public Toggle alphaChannel
get { return ToggleHelper.GetToggleValue(m_AlphaChannel, channelCount > 3); }
get { return new Toggle(m_AlphaChannel, channelCount > 3); }
bool isOn = ToggleHelper.GetBoolValue(value);
if (m_AlphaChannel == isOn)
if (m_AlphaChannel == value.isOn)
m_AlphaChannel = isOn;
m_AlphaChannel = value.isOn;
if (onModified != null)
{
onModified(this, ModificationScope.Node);

visitor.AddShaderChunk(string.Format("{0} _{1}_Flip = {0} ({2}{3}{4}{5});",
ConvertConcreteSlotValueTypeToString(precision, FindOutputSlot<MaterialSlot>(OutputSlotId).concreteValueType),
GetVariableNameForNode(),
string.Format("{0}", (Convert.ToInt32(m_RedChannel)).ToString()),
Convert.ToInt32(m_RedChannel).ToString(),
channelCount > 1 ? string.Format(", {0}", (Convert.ToInt32(m_GreenChannel)).ToString()) : "",
channelCount > 2 ? string.Format(", {0}", (Convert.ToInt32(m_BlueChannel)).ToString()) : "",
channelCount > 3 ? string.Format(", {0}", (Convert.ToInt32(m_AlphaChannel)).ToString()) : ""), true);

43
MaterialGraphProject/Assets/UnityShaderEditor/Editor/Drawing/Controls/ToggleControl.cs


namespace UnityEditor.ShaderGraph.Drawing.Controls
{
public enum ToggleState
[Serializable]
public struct Toggle
EnabledOff,
EnabledOn,
DisabledOff,
DisabledOn
}
public bool isOn;
public bool isEnabled;
public static class ToggleHelper
{
public static bool GetBoolValue(ToggleState value)
public Toggle(bool on, bool enabled)
if ((int)value > 1)
return Convert.ToBoolean((int)value - 2);
else
return Convert.ToBoolean((int)value);
isOn = on;
isEnabled = enabled;
public static ToggleState GetToggleValue(bool value)
public Toggle(bool on)
return (ToggleState)Convert.ToInt32(value);
}
public static ToggleState GetToggleValue(bool value, bool enableCondition)
{
return (ToggleState)(Convert.ToInt32(value) + (enableCondition ? 0 : 2));
isOn = on;
isEnabled = true;
}
}

{
m_Node = node;
m_PropertyInfo = propertyInfo;
if (propertyInfo.PropertyType != typeof(ToggleState))
throw new ArgumentException("Property must be a ToggleState.", "propertyInfo");
if (propertyInfo.PropertyType != typeof(Toggle))
throw new ArgumentException("Property must be a Toggle.", "propertyInfo");
m_Label = new GUIContent(label ?? ObjectNames.NicifyVariableName(propertyInfo.Name));
m_Container = new IMGUIContainer(OnGUIHandler);
Add(m_Container);

void OnGUIHandler()
{
var value = (ToggleState) m_PropertyInfo.GetValue(m_Node, null);
var value = (Toggle) m_PropertyInfo.GetValue(m_Node, null);
bool isEnabled = (int)value < 2;
m_Container.SetEnabled(isEnabled);
m_Container.SetEnabled(value.isEnabled);
bool isOn = EditorGUILayout.Toggle(m_Label, (int)value == 1 || (int)value == 3);
value = (ToggleState)(Convert.ToInt32(!isEnabled) + Convert.ToInt32(isOn));
bool isOn = EditorGUILayout.Toggle(m_Label, value.isOn);
value = new Toggle(isOn, value.isEnabled);
if (changeCheckScope.changed)
{
m_Node.owner.owner.RegisterCompleteObjectUndo("Change " + m_Node.name);

正在加载...
取消
保存