4 using System.Collections.Generic;
5 using System.Reflection;
7 namespace SiliconStudio.
Paradox.Effects
23 var length = typeof(T).IsArray ? (defaultValue != null ? ((Array)(
object)defaultValue).Length : -1) : 1;
31 return New<T>(
default(T));
36 return New<T>(
default(T), name);
71 if (key.Name[key.Name.Length - 1] ==
'0')
73 keyName = key.Name.Substring(0, key.Name.Length - 1) + index;
77 keyName = key.Name + index;
80 return New<T>(
default(T), keyName);
83 private static Dictionary<string, ParameterKey> keyByNames =
new Dictionary<string,ParameterKey>();
100 if (
string.IsNullOrEmpty(key.
Name))
102 keyByNames[name] = key;
104 if (key.
OwnerType == null && ownerType != null)
105 key.SetOwnerType(ownerType);
110 public static T AppendKey<T>(
this T key,
object name) where T :
ParameterKey
112 return (T)FindByName(key.Name + name);
120 keyByNames.TryGetValue(name, out key);
123 var firstDot = name.IndexOf(
'.');
127 var subKeyNameIndex = name.IndexOfAny(
new[] {
'.',
'[' }, firstDot + 1);
128 if (subKeyNameIndex == -1)
129 subKeyNameIndex = name.Length;
132 while (subKeyNameIndex > 0 &&
char.IsDigit(name, subKeyNameIndex - 1))
135 if (subKeyNameIndex != name.Length)
137 string keyName = name.Substring(0, subKeyNameIndex);
138 string subKeyName = subKeyNameIndex != -1 ? name.Substring(subKeyNameIndex) : null;
142 if (keyByNames.TryGetValue(keyName, out key) && subKeyName !=
"0")
144 var realName = key.Name != keyName ? key.Name + subKeyName : name;
146 var baseParameterKeyType = key.GetType();
147 while (baseParameterKeyType.GetGenericTypeDefinition() != typeof(
ParameterKey<>))
148 baseParameterKeyType = baseParameterKeyType.GetTypeInfo().BaseType;
151 var defaultValue = key.DefaultMetadata.DefaultDynamicValue ?? key.DefaultMetadata.GetDefaultValue();
154 var metadataParameters = defaultValue != null ?
new[] { defaultValue } :
new object[0];
155 var
metadata = Activator.CreateInstance(typeof(
ParameterKeyMetadata<>).MakeGenericType(baseParameterKeyType.GetTypeInfo().GenericTypeArguments[0]), metadataParameters);
157 var args =
new[] { name, metadata };
158 if (key.GetType().GetGenericTypeDefinition() == typeof(
ParameterKey<>))
160 args =
new[] { name, key.Length, metadata };
162 key = (
ParameterKey)Activator.CreateInstance(key.GetType(), args);
165 keyByNames[name] = key;
166 if (name != realName)
167 keyByNames[realName] = key;
Key of an effect parameter.
Type OwnerType
Gets the type of the owner.
string Name
Gets the name of this key.
Key of an gereric effect parameter.
_In_ size_t _In_ const TexMetadata & metadata
static ParameterKey Merge(ParameterKey key, Type ownerType, string name)
Base class for ParameterDynamicValue{T}.
static ParameterKey FindByName(string name)
Describes a dynamic value with no input.