/// <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); }
/// <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); }