您最多选择25个主题
主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
110 行
4.2 KiB
110 行
4.2 KiB
using System;
|
|
using System.Collections.Generic;
|
|
using RMGUI.GraphView;
|
|
using UnityEditor.Graphing.Drawing;
|
|
using UnityEditor;
|
|
using UnityEngine;
|
|
using UnityEngine.MaterialGraph;
|
|
|
|
namespace UnityEditor.MaterialGraph.Drawing
|
|
{
|
|
class AnyNodeControlPresenter : GraphControlPresenter
|
|
{
|
|
public override void OnGUIHandler()
|
|
{
|
|
base.OnGUIHandler();
|
|
|
|
var tNode = node as UnityEngine.MaterialGraph.AnyNodeBase;
|
|
if (tNode == null)
|
|
return;
|
|
|
|
var properties = tNode.properties;
|
|
|
|
EditorGUI.BeginChangeCheck();
|
|
UnityEngine.Graphing.ModificationScope modificationScope = UnityEngine.Graphing.ModificationScope.Node;
|
|
|
|
foreach (AnyNodeProperty p in properties)
|
|
{
|
|
AnyNodePropertyState newState = (AnyNodePropertyState) EditorGUILayout.EnumPopup(p.name, p.state);
|
|
if (newState != p.state)
|
|
{
|
|
tNode.setPropertyState(p, newState);
|
|
|
|
modificationScope = UnityEngine.Graphing.ModificationScope.Graph;
|
|
}
|
|
|
|
bool disabled = p.state == AnyNodePropertyState.Slot;
|
|
EditorGUI.BeginDisabledGroup(disabled);
|
|
{
|
|
switch (p.propertyType)
|
|
{
|
|
case PropertyType.Color:
|
|
// TODO
|
|
break;
|
|
case PropertyType.Texture:
|
|
// TODO
|
|
break;
|
|
case PropertyType.Cubemap:
|
|
// TODO
|
|
break;
|
|
case PropertyType.Float:
|
|
p.value.x = EditorGUILayout.FloatField("", p.value.x);
|
|
break;
|
|
case PropertyType.Vector2:
|
|
{
|
|
Vector2 result = EditorGUILayout.Vector2Field("", new Vector2(p.value.x, p.value.y));
|
|
p.value.x = result.x;
|
|
p.value.y = result.y;
|
|
}
|
|
break;
|
|
case PropertyType.Vector3:
|
|
p.value = EditorGUILayout.Vector3Field("", p.value);
|
|
break;
|
|
case PropertyType.Vector4:
|
|
p.value = EditorGUILayout.Vector4Field("", p.value);
|
|
break;
|
|
case PropertyType.Matrix2:
|
|
// p.value = EditorGUILayout.Matrix2Field("", p.value);
|
|
break;
|
|
case PropertyType.Matrix3:
|
|
// p.value = EditorGUILayout.Matrix3Field("", p.value);
|
|
break;
|
|
case PropertyType.Matrix4:
|
|
// p.value = EditorGUILayout.Matrix4Field("", p.value);
|
|
break;
|
|
}
|
|
}
|
|
EditorGUI.EndDisabledGroup();
|
|
}
|
|
|
|
bool changed= EditorGUI.EndChangeCheck();
|
|
|
|
if (changed)
|
|
{
|
|
if (tNode.onModified != null)
|
|
tNode.onModified(tNode, modificationScope);
|
|
}
|
|
}
|
|
|
|
public override float GetHeight()
|
|
{
|
|
var tNode = node as UnityEngine.MaterialGraph.AnyNodeBase;
|
|
if (tNode == null)
|
|
return EditorGUIUtility.standardVerticalSpacing;
|
|
|
|
return (EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing) * tNode.propertyCount * 2
|
|
+ EditorGUIUtility.standardVerticalSpacing;
|
|
}
|
|
}
|
|
|
|
[Serializable]
|
|
public class AnyNodePresenter : PropertyNodePresenter
|
|
{
|
|
protected override IEnumerable<GraphElementPresenter> GetControlData()
|
|
{
|
|
var instance = CreateInstance<AnyNodeControlPresenter>();
|
|
instance.Initialize(node);
|
|
return new List<GraphElementPresenter>(base.GetControlData()) { instance };
|
|
}
|
|
}
|
|
}
|