You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
69 lines
3.0 KiB
69 lines
3.0 KiB
using System;
|
|
using System.Collections.Generic;
|
|
|
|
using UnityEditor.VFX.Block;
|
|
using UnityEngine;
|
|
|
|
namespace UnityEditor.VFX
|
|
{
|
|
[Obsolete]
|
|
[VFXHelpURL("Operator-GetCustomAttribute")]
|
|
class GetCustomAttribute : VFXOperator
|
|
{
|
|
[VFXSetting(VFXSettingAttribute.VisibleFlags.InInspector), Delayed, Tooltip("Specifies the name of the custom attribute to use.")]
|
|
public string attribute = "CustomAttribute";
|
|
|
|
[VFXSetting, Tooltip("Specifies which version of the parameter to use. It can return the current value, or the source value derived from a GPU event or a spawn attribute.")]
|
|
public VFXAttributeLocation location = VFXAttributeLocation.Current;
|
|
|
|
[VFXSetting(VFXSettingAttribute.VisibleFlags.InInspector), Tooltip("Specifies the type of the custom attribute to use.")]
|
|
public CustomAttributeUtility.Signature AttributeType = CustomAttributeUtility.Signature.Float;
|
|
|
|
protected override IEnumerable<VFXPropertyWithValue> outputProperties
|
|
{
|
|
get
|
|
{
|
|
var vfxAttribute = currentAttribute;
|
|
yield return new VFXPropertyWithValue(new VFXProperty(VFXExpression.TypeToType(vfxAttribute.type), vfxAttribute.name));
|
|
}
|
|
}
|
|
|
|
public override string name => $"Get '{attribute}' ({AttributeType})";
|
|
|
|
public override void Sanitize(int version)
|
|
{
|
|
GetGraph().TryAddCustomAttribute(attribute, CustomAttributeUtility.GetValueType(AttributeType), string.Empty, false, out var vfxAttribute);
|
|
var vfxAttributeParameter = ScriptableObject.CreateInstance<VFXAttributeParameter>();
|
|
vfxAttributeParameter.attribute = vfxAttribute.name;
|
|
vfxAttributeParameter.location = location;
|
|
vfxAttributeParameter.ResyncSlots(true);
|
|
ReplaceModel(vfxAttributeParameter, this, true, false);
|
|
VFXSlot.CopyLinksAndValue(vfxAttributeParameter.outputSlots[0], outputSlots[0]);
|
|
}
|
|
|
|
internal sealed override void GenerateErrors(VFXErrorReporter report)
|
|
{
|
|
base.GenerateErrors(report);
|
|
|
|
if (!CustomAttributeUtility.IsShaderCompilableName(attribute))
|
|
{
|
|
report.RegisterError("InvalidCustomAttributeName", VFXErrorType.Error, $"Custom attribute name '{attribute}' is not valid.\n\t- The name must not contain spaces or any special character\n\t- The name must not start with a digit character", this);
|
|
}
|
|
}
|
|
|
|
protected override void OnAdded()
|
|
{
|
|
Sanitize(0);
|
|
}
|
|
|
|
protected override VFXExpression[] BuildExpression(VFXExpression[] inputExpression)
|
|
{
|
|
var vfxAttribute = currentAttribute;
|
|
|
|
var expression = new VFXAttributeExpression(vfxAttribute, location);
|
|
return new VFXExpression[] { expression };
|
|
}
|
|
|
|
private VFXAttribute currentAttribute => new VFXAttribute(attribute, CustomAttributeUtility.GetValueType(AttributeType), string.Empty);
|
|
}
|
|
}
|