예제 #1
0
    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);
    }
예제 #2
0
    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);
    }