// Function to return a list of data public List <T> getData <T>() { if (dataSourceType == WMG_DataSourceTypes.Multiple_Objects_Single_Variable) { List <T> returnVals = new List <T>(); foreach (object dp in dataProviders) { returnVals.Add(getDatum <T>(dp, variableName, variableType, varName1, varName2)); } return(returnVals); } else if (dataSourceType == WMG_DataSourceTypes.Single_Object_Multiple_Variables) { List <T> returnVals = new List <T>(); for (int i = 0; i < variableNames.Count; i++) { string varName = variableNames[i]; WMG_VariableTypes varType = WMG_VariableTypes.Not_Specified; if (i < variableTypes.Count) { varType = variableTypes[i]; } if (i >= varNames1.Count) { parseStrings(); // strings added to list through the Unity editor at run-time, or set / add variableName API not used } returnVals.Add(getDatum <T>(dataProvider, varName, varType, varNames1[i], varNames2[i])); } return(returnVals); } else if (dataSourceType == WMG_DataSourceTypes.Single_Object_Single_Variable) { try { // try field, e.g. public List<Vector2> test; return((List <T>)WMG_Reflection.GetField(dataProvider.GetType(), variableName).GetValue(dataProvider)); } catch (Exception e) { GlobalVariableBackground.Instance.conManager.WriteLog("Field: " + variableName + " not found. " + e.Message); return(new List <T>()); } } return(new List <T>()); }
T getDatum <T>(object dp, string variableName, WMG_VariableTypes varType, string vName1, string vName2) { if (varType == WMG_VariableTypes.Field) { try { // try field, e.g. public float test; return((T)WMG_Reflection.GetField(dp.GetType(), variableName).GetValue(dp)); } catch (Exception e) { GlobalVariableBackground.Instance.conManager.WriteLog("Field: " + variableName + " not found. " + e.Message); return(default(T)); } } else if (varType == WMG_VariableTypes.Property) { try { // try property, e.g. public float Test {get; private set}; return((T)WMG_Reflection.GetProperty(dp.GetType(), variableName).GetValue(dp, null)); } catch (Exception e) { GlobalVariableBackground.Instance.conManager.WriteLog("Property: " + variableName + " not found. " + e.Message); return(default(T)); } } else if (varType == WMG_VariableTypes.Property_Field) { try { // try property.field, e.g. localPosition.y from a Transform dataProvider object dpProperty = WMG_Reflection.GetProperty(dp.GetType(), vName1).GetValue(dp, null); return((T)WMG_Reflection.GetField(dpProperty.GetType(), vName2).GetValue(dpProperty)); } catch (Exception e) { GlobalVariableBackground.Instance.conManager.WriteLog("property.field: " + variableName + " not found. " + e.Message); return(default(T)); } } else if (varType == WMG_VariableTypes.Field_Field) { try { // try field.field, e.g. test.y from public Vector3 test; object dpField = WMG_Reflection.GetField(dp.GetType(), vName1).GetValue(dp); return((T)WMG_Reflection.GetField(dpField.GetType(), vName2).GetValue(dpField)); } catch (Exception e) { GlobalVariableBackground.Instance.conManager.WriteLog("field.field: " + variableName + " not found. " + e.Message); return(default(T)); } } else if (varType == WMG_VariableTypes.Not_Specified) { try { // try field, e.g. public float test; return((T)WMG_Reflection.GetField(dp.GetType(), variableName).GetValue(dp)); } catch { try { // try property, e.g. public float Test {get; private set}; return((T)WMG_Reflection.GetProperty(dp.GetType(), variableName).GetValue(dp, null)); } catch { try { // try property.field, e.g. localPosition.y from a Transform dataProvider object dpProperty = WMG_Reflection.GetProperty(dp.GetType(), vName1).GetValue(dp, null); return((T)WMG_Reflection.GetField(dpProperty.GetType(), vName2).GetValue(dpProperty)); } catch { // try field.field, e.g. test.y from public Vector3 test; try { object dpField = WMG_Reflection.GetField(dp.GetType(), varName1).GetValue(dp); return((T)WMG_Reflection.GetField(dpField.GetType(), vName2).GetValue(dpField)); } catch (Exception e) { GlobalVariableBackground.Instance.conManager.WriteLog("field, property, property.field, or field.field: " + variableName + " not found. " + e.Message); return(default(T)); } } } } } return(default(T)); }