示例#1
0
    /// <summary>
    /// Instantiate type from typeAndArgs
    /// </summary>
    /// <param name="typeAndArgs"></param>
    /// <param name="suppressWarnings">Suppresses Warnings, used for TIME and addTimer effects</param>
    /// <typeparam name="T"></typeparam>
    /// <returns></returns>
    private static T CreateInstance <T>(VGDLParsedArgs typeAndArgs, bool suppressWarnings = false)
    {
        var type     = Type.GetType(typeAndArgs.sclass);
        var instance = (T)Activator.CreateInstance(type);

        parseParameters(instance, typeAndArgs.args, suppressWarnings);

        return(instance);
    }
示例#2
0
    /// <summary>
    /// Parse line content from indented VGDL tree.
    /// </summary>
    /// <param name="contentString"></param>
    /// <returns></returns>
    private static VGDLParsedArgs parseArgs(string contentString, string sclass = null, Dictionary <string, string> args = null)
    {
        if (verbose)
        {
            Debug.Log("Parsing arguments from: " + contentString);
        }

        var sparts = contentString.Split(new [] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
        var result = new VGDLParsedArgs();

        result.sclass = sclass;
        if (args == null)
        {
            result.args = new Dictionary <string, string>();
        }
        else
        {
            result.args = new Dictionary <string, string>(args);
        }

        if (string.IsNullOrEmpty(contentString) || sparts.Length == 0)
        {
            return(result);
        }

        // Check if the first argument is a Class.
        if (!sparts[0].Contains("="))
        {
            var trimmed = sparts[0].Trim();
            eval(trimmed);

            result.sclass = trimmed;
        }

        for (var index = 0; index < sparts.Length; index++)
        {
            var part = sparts[index];

            //Ignore lone parameters
            if (!part.Contains("="))
            {
                //Unless we haven't found a sclass yet!
                if (!string.IsNullOrEmpty(part) && result.sclass == sclass)
                {
                    eval(part);
                    result.sclass = part;
                }
                continue;
            }

            var keyValue = part.Split(new [] { '=' }, StringSplitOptions.RemoveEmptyEntries);

            var val = keyValue[1];

            //handle array values
            if (val.Contains("["))
            {
                //add the next parts to the array, until we find "]"
                for (++index; index < sparts.Length; index++)
                {
                    part = sparts[index];
                    if (part.Contains("]"))
                    {
                        val += " " + part;
                        break;
                    }

                    val += " " + part;
                }
            }

            //This overrides any parent arg definitions, for repeat parameters,
            //like color on parent and on child, keeps child color.
            result.args[keyValue[0]] = val;
        }

        return(result);
    }