Add Dictionary<,> support to FieldLoader
This commit is contained in:
@@ -160,6 +160,12 @@ namespace OpenRA
|
|||||||
|
|
||||||
public static object GetValue(string fieldName, Type fieldType, string value, MemberInfo field)
|
public static object GetValue(string fieldName, Type fieldType, string value, MemberInfo field)
|
||||||
{
|
{
|
||||||
|
return GetValue(fieldName, fieldType, new MiniYaml(value), field);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static object GetValue(string fieldName, Type fieldType, MiniYaml yaml, MemberInfo field)
|
||||||
|
{
|
||||||
|
var value = yaml.Value;
|
||||||
if (value != null) value = value.Trim();
|
if (value != null) value = value.Trim();
|
||||||
|
|
||||||
if (fieldType == typeof(int))
|
if (fieldType == typeof(int))
|
||||||
@@ -436,6 +442,21 @@ namespace OpenRA
|
|||||||
addMethod.Invoke(set, new[] { GetValue(fieldName, fieldType.GetGenericArguments()[0], parts[i].Trim(), field) });
|
addMethod.Invoke(set, new[] { GetValue(fieldName, fieldType.GetGenericArguments()[0], parts[i].Trim(), field) });
|
||||||
return set;
|
return set;
|
||||||
}
|
}
|
||||||
|
else if (fieldType.IsGenericType && fieldType.GetGenericTypeDefinition() == typeof(Dictionary<,>))
|
||||||
|
{
|
||||||
|
var dict = Activator.CreateInstance(fieldType);
|
||||||
|
var arguments = fieldType.GetGenericArguments();
|
||||||
|
var addMethod = fieldType.GetMethod("Add", arguments);
|
||||||
|
|
||||||
|
foreach (var node in yaml.Nodes)
|
||||||
|
{
|
||||||
|
var key = GetValue(fieldName, arguments[0], node.Key, field);
|
||||||
|
var val = GetValue(fieldName, arguments[1], node.Value, field);
|
||||||
|
addMethod.Invoke(dict, new[] { key, val });
|
||||||
|
}
|
||||||
|
|
||||||
|
return dict;
|
||||||
|
}
|
||||||
else if (fieldType == typeof(Size))
|
else if (fieldType == typeof(Size))
|
||||||
{
|
{
|
||||||
if (value != null)
|
if (value != null)
|
||||||
@@ -583,7 +604,7 @@ namespace OpenRA
|
|||||||
|
|
||||||
var loader = sa.GetLoader(type);
|
var loader = sa.GetLoader(type);
|
||||||
if (loader == null && sa.FromYamlKey)
|
if (loader == null && sa.FromYamlKey)
|
||||||
loader = (yaml) => GetValue(yamlName, field.FieldType, yaml.Value, field);
|
loader = yaml => GetValue(yamlName, field.FieldType, yaml, field);
|
||||||
|
|
||||||
var fli = new FieldLoadInfo(field, sa, yamlName, loader);
|
var fli = new FieldLoadInfo(field, sa, yamlName, loader);
|
||||||
ret.Add(fli);
|
ret.Add(fli);
|
||||||
|
|||||||
Reference in New Issue
Block a user