private object GetValue(FieldReadResult result) { char symbol = result.symbol; string strVal = result.strVal; Type type = result.type; switch (symbol) { case TypeSymbol: return(Type.GetType(strVal)); case StructSymbol: return(GetInstance(structMap[strVal])); case ValueSymbol: return(ParsePrimitive(type, strVal)); case ReferenceSymbol: case ListSymbol: return(GetInstance((resultMap.Get(strVal)))); case AssetSymbol: //todo - cache return(AssetDatabase.LoadAssetAtPath(AssetDatabase.GUIDToAssetPath(strVal), result.type)); case StringSymbol: return(strVal); //todo unescape } return(null); }
private FieldReadResult ReadFieldLine(string line) { FieldReadResult result = new FieldReadResult(); string[] segments = line.Split(SpaceArray, 4); result.fieldId = segments[0]; if (segments[1] == "NULL") { result.value = null; result.symbol = 'x'; result.strVal = "-1"; } else { Type type = typeMap.Get(segments[1]); result.type = type; result.symbol = segments[2][0]; result.strVal = segments[3]; } return(result); }