public static void DisposMethods(System.Type type, Dictionary <string, ClassMethodInfo> cmfDict) { BindingFlags options = BindingFlags | BindingFlags.Instance | BindingFlags.FlattenHierarchy; MethodInfo[] infoArray = type.GetMethods(options); foreach (MethodInfo info in infoArray) { if (info.IsGenericMethod) { continue; } if (info.Name.IndexOf('_') > 0) { continue; } string key = type.Namespace + "." + type.Name + "." + info.Name; ClassMethodInfo cmf = !cmfDict.ContainsKey(key)? new ClassMethodInfo() :cmfDict[key]; cmf.fullName = key; cmf.className = GetTypeName(type); cmf.name = info.Name; cmf.returnName = GetTypeName(info.ReturnType); cmf.isStatic = info.IsStatic; cmfDict[key] = cmf; cmf.overrideList.Add(DisposMethodArgs(info.GetParameters())); } }
public void CreateUI(Controllable target, ClassMethodInfo method) { LinkedControllable = target; Method = method.methodInfo; this.GetComponentInChildren <Text>().text = ParseNameString(method.methodInfo.Name); this.GetComponent <Button>().onClick.AddListener(() => { target.setMethodProp(method, null); }); }
public static void DisposCtor(System.Type type, Dictionary <string, ClassMethodInfo> cmfDict) { string fullNamePrefix = type.Namespace + "." + type.Name + "." + "New"; string newStr = "New"; ConstructorInfo[] ctorArray = type.GetConstructors(BindingFlags.Instance | BindingFlags); foreach (ConstructorInfo cInfo in ctorArray) { ClassMethodInfo ctorCmf = !cmfDict.ContainsKey(newStr) ? new ClassMethodInfo() : cmfDict[newStr]; ctorCmf.fullName = fullNamePrefix + newStr; ctorCmf.className = GetTypeName(type); ctorCmf.name = newStr; ctorCmf.returnName = GetTypeName(type); ctorCmf.isStatic = true; cmfDict[newStr] = ctorCmf; ctorCmf.overrideList.Add(DisposMethodArgs(cInfo.GetParameters())); } }
public static void DisposProperties(System.Type type, Dictionary <string, ClassMethodInfo> cmfDict) { PropertyInfo[] array = type.GetProperties(BindingFlags | BindingFlags.GetProperty | BindingFlags.SetProperty | BindingFlags.Instance | BindingFlags.FlattenHierarchy); foreach (PropertyInfo info in array) { string key = type.Namespace + "." + type.Name + "." + info.Name; ClassMethodInfo cmf = !cmfDict.ContainsKey(key) ? new ClassMethodInfo() : cmfDict[key]; cmf.fullName = key; cmf.className = GetTypeName(type); cmf.name = info.Name; cmf.returnName = GetTypeName(info.PropertyType); cmf.isStatic = false; cmf.isCanRead = info.CanRead; cmf.isCanWrite = info.CanRead; cmf.isPf = true; cmfDict[key] = cmf; } }
public static void DisposField(System.Type type, Dictionary <string, ClassMethodInfo> cmfDict) { FieldInfo[] array = type.GetFields(BindingFlags.GetField | BindingFlags.SetField | BindingFlags.Instance | BindingFlags); foreach (FieldInfo info in array) { string key = type.Namespace + "." + type.Name + "." + info.Name; ClassMethodInfo cmf = !cmfDict.ContainsKey(key) ? new ClassMethodInfo() : cmfDict[key]; cmf.fullName = key; cmf.className = GetTypeName(type); cmf.name = info.Name; cmf.returnName = GetTypeName(info.FieldType); cmf.isStatic = info.IsStatic; cmf.isCanRead = true; cmf.isCanWrite = true; cmf.isPf = true; cmfDict[key] = cmf; } }
public void setProp(string property, List <object> values) { FieldInfo info = getPropInfoForAddress(property); if (info != null) { setFieldProp(info, values); return; } ClassMethodInfo mInfo = getMethodInfoForAddress(property); if (mInfo != null) { setMethodProp(mInfo, values); return; } }
private void CreateButton(Transform parent, Controllable target, ClassMethodInfo method) { //As we can't expose parameter in UI, ignore methods with arguments if (method.methodInfo.GetParameters().Length == 0) { var newButton = Instantiate(MethodButtonPrefab); newButton.transform.SetParent(parent); newButton.transform.SetSiblingIndex(parent.childCount - 2); parent.gameObject.GetComponent <PanelUI>().AddUIElement(newButton.GetComponent <ButtonUI>()); newButton.GetComponent <ButtonUI>().CreateUI(target, method); } else { foreach (var parameter in method.methodInfo.GetParameters()) { //Will do cool stuff in the future } } }
public void setMethodProp(ClassMethodInfo info, List <object> values) { object[] parameters = new object[info.methodInfo.GetParameters().Length]; if (debug) { Debug.Log("Set Method, num expected parameters : " + parameters.Length); } int valueIndex = 0; for (int i = 0; i < parameters.Length; i++) { string typeString = info.methodInfo.GetParameters()[i].ParameterType.ToString(); //Debug.Log("OSC IN Method, arg "+i+" TYPE : " + typeString + ", num values in OSC Message " + values.Count); if (typeString == "System.Single") { if (values.Count >= valueIndex + 1) { parameters[i] = TypeConverter.getFloat(values[valueIndex]); valueIndex += 1; } } else if (typeString == "System.Boolean") { if (values.Count >= valueIndex + 1) { parameters[i] = TypeConverter.getBool(values[valueIndex]); valueIndex += 1; } } else if (typeString == "System.Int32") { if (values.Count >= valueIndex + 1) { parameters[i] = TypeConverter.getInt(values[valueIndex]); valueIndex += 1; } } else if (typeString == "UnityEngine.Vector2") { if (values.Count >= valueIndex + 2) { parameters[i] = new Vector2(TypeConverter.getFloat(values[valueIndex]), TypeConverter.getFloat(values[valueIndex + 1])); valueIndex += 2; } } else if (typeString == "UnityEngine.Vector2Int") { if (values.Count >= valueIndex + 2) { parameters[i] = new Vector2Int(TypeConverter.getInt(values[valueIndex]), TypeConverter.getInt(values[valueIndex + 1])); valueIndex += 2; } } else if (typeString == "UnityEngine.Vector3") { if (values.Count >= valueIndex + 3) { parameters[i] = new Vector3(TypeConverter.getFloat(values[valueIndex]), TypeConverter.getFloat(values[valueIndex + 1]), TypeConverter.getFloat(values[valueIndex + 2])); valueIndex += 3; } } else if (typeString == "UnityEngine.Vector3Int") { if (values.Count >= valueIndex + 3) { parameters[i] = new Vector3Int(TypeConverter.getInt(values[valueIndex]), TypeConverter.getInt(values[valueIndex + 1]), TypeConverter.getInt(values[valueIndex + 2])); valueIndex += 3; } } else if (typeString == "UnityEngine.Color") { if (values.Count >= valueIndex + 4) { parameters[i] = new Color(TypeConverter.getFloat(values[valueIndex + 0]), TypeConverter.getFloat(values[valueIndex + 1]), TypeConverter.getFloat(values[valueIndex + 2]), TypeConverter.getFloat(values[valueIndex + 3])); valueIndex += 4; } else if (values.Count >= i + 3) { parameters[i] = new Color(TypeConverter.getFloat(values[valueIndex + 0]), TypeConverter.getFloat(values[valueIndex + 1]), TypeConverter.getFloat(values[valueIndex + 2]), 1); valueIndex += 3; } } else if (typeString == "System.String") { if (values.Count >= valueIndex + 1) { parameters[i] = values[i].ToString(); valueIndex += 1; } } } if (!info.fromTargetScript) { info.methodInfo.Invoke(this, parameters); } else { info.methodInfo.Invoke(TargetScript, parameters); } }
public virtual void Awake() { debug = false; if (TargetScript == null) { Debug.LogError("TargetScript of " + this.GetType().ToString() + " is not set ! Aborting initialization."); } this.scriptValueChanged += OnScriptValueChanged; this.uiValueChanged += OnUiValueChanged; //FIELDS Fields = new Dictionary <string, FieldInfo>(); TargetFields = new Dictionary <string, ClassAttributInfo>(); PreviousFieldsValues = new List <object>(); FieldInfo[] objectFields = this.GetType().GetFields(BindingFlags.Instance | BindingFlags.Public); FieldInfo[] scriptFields = objectFields; PropertyInfo[] scriptProperties = null; if (TargetScript != null) { scriptFields = TargetScript.GetType().GetFields(BindingFlags.Instance | BindingFlags.Public); scriptProperties = TargetScript.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public); } for (int i = 0; i < objectFields.Length; i++) { FieldInfo info = objectFields[i]; OSCProperty attribute = Attribute.GetCustomAttribute(info, typeof(OSCProperty)) as OSCProperty; if (attribute != null) { if (info.Name == "currentPreset" && !usePresets) { continue; } Fields.Add(info.Name, info); var fieldAdded = false; for (int j = 0; j < scriptFields.Length; j++) { if (scriptFields[j].Name == info.Name) { var newClassAttributInfo = new ClassAttributInfo(); newClassAttributInfo.Field = scriptFields[j]; TargetFields.Add(scriptFields[j].Name, newClassAttributInfo); PreviousFieldsValues.Add(newClassAttributInfo.GetValue(TargetScript)); info.SetValue(this, newClassAttributInfo.GetValue(TargetScript)); fieldAdded = true; break; } } if (!fieldAdded) { for (int j = 0; j < scriptProperties.Length; j++) { if (scriptProperties[j].Name == info.Name) { var newClassAttributInfo = new ClassAttributInfo(); newClassAttributInfo.Property = scriptProperties[j]; TargetFields.Add(scriptProperties[j].Name, newClassAttributInfo); PreviousFieldsValues.Add(newClassAttributInfo.GetValue(TargetScript)); info.SetValue(this, newClassAttributInfo.GetValue(TargetScript)); break; } } } // if(addedFieldName != "") // PreviousFieldsValues.Add(TargetFields[addedFieldName].GetValue(this)); } } //METHODS Methods = new Dictionary <string, ClassMethodInfo>(); MethodInfo[] methodFields = this.GetType().GetMethods(BindingFlags.Instance | BindingFlags.Public); for (int i = 0; i < methodFields.Length; i++) { MethodInfo info = methodFields[i]; OSCMethod attribute = Attribute.GetCustomAttribute(info, typeof(OSCMethod)) as OSCMethod; if (attribute != null) { if ((info.Name == "Save" || info.Name == "SaveAs" || info.Name == "Load" || info.Name == "Show") && !usePresets) { continue; } //Debug.Log("Testing : " + info.Name); var classMethodInfo = new ClassMethodInfo(); classMethodInfo.methodInfo = info; classMethodInfo.fromTargetScript = false; var targetScriptMethod = TargetScript.GetType().GetMethod(info.Name); if (targetScriptMethod != null) { //Debug.Log("Adding : " + targetScriptMethod.Name); classMethodInfo.methodInfo = targetScriptMethod; classMethodInfo.fromTargetScript = true; Methods.Add(targetScriptMethod.Name, classMethodInfo); } else { Methods.Add(info.Name, classMethodInfo); } } } if (string.IsNullOrEmpty(id)) { id = TargetScript.GetType().Name; } id = id.Replace(' ', '_'); sourceScene = SceneManager.GetActiveScene().name; }