public GameDataQuery(T[] objects) { _results = objects; FieldInfo[] fields = GameDataModel.GetFields(typeof(T)); object[] attrs = null; List <FieldInfo> selectedFields = new List <FieldInfo>(); foreach (FieldInfo field in fields) { attrs = field.GetCustomAttributes(typeof(DataField), true); foreach (object attr in attrs) { DataField fieldAttr = attr as DataField; if (fieldAttr != null) { selectedFields.Add(field); } } } _fields = selectedFields.ToArray(); selectedFields.Clear(); selectedFields = null; }
private bool RenderFilter(int modelID, GameDataModelFilter filter) { FieldInfo f = _tables[modelID]; System.Type type = null; if (f.FieldType.IsArray) { type = f.FieldType.GetElementType(); } else if (f.FieldType.IsGenericType) { type = f.FieldType.GetGenericArguments()[0]; } else { type = f.FieldType; } List <FieldInfo> selectedFields = new List <FieldInfo>(); List <string> selectedFieldsNames = new List <string>(); int selectionIndex = 0; FieldInfo[] fields = GameDataModel.GetFields(type); object[] attrs = null; foreach (FieldInfo field in fields) { if (IsFieldTypeSupportedForFilters(field.FieldType)) { attrs = field.GetCustomAttributes(typeof(DataField), true); foreach (object attr in attrs) { DataField fieldAttr = attr as DataField; if (fieldAttr != null && fieldAttr.useForFiltering) { selectedFields.Add(field); selectedFieldsNames.Add(fieldAttr.EditorLabel); if (field.Name.Equals(filter.PropertyName)) { selectionIndex = selectedFieldsNames.Count - 1; } } } } } EditorGUILayout.BeginHorizontal(); selectionIndex = EditorGUILayout.Popup(selectionIndex, selectedFieldsNames.ToArray()); filter.FilterValue = EditorGUILayout.TextField(filter.FilterValue); if (GUILayout.Button("-")) { return(true); } EditorGUILayout.EndHorizontal(); filter.PropertyName = selectedFields[selectionIndex].Name; return(false); }
private bool DoesModelPassFilters(int modelID, IGameDataModel modelData) { List <GameDataModelFilter> filters = null; if (_filters.ContainsKey(modelID)) { filters = _filters[modelID]; } else { return(true); } FieldInfo[] fields = GameDataModel.GetFields(modelData.GetType()); object[] attrs = null; foreach (FieldInfo field in fields) { attrs = field.GetCustomAttributes(typeof(DataField), true); foreach (object attr in attrs) { DataField fieldAttr = attr as DataField; if (fieldAttr != null && fieldAttr.useForFiltering) { object value = field.GetValue(modelData); foreach (GameDataModelFilter filter in filters) { if (filter.PropertyName != null && filter.PropertyName.Equals(field.Name)) { if (field.FieldType == typeof(string)) { if (!filter.CompareToString(value)) { return(false); } } else if (field.FieldType == typeof(int)) { if (!filter.CompareToInt(value)) { return(false); } } else if (field.FieldType == typeof(float)) { if (!filter.CompareToFloat(value)) { return(false); } } else if (field.FieldType == typeof(bool)) { if (!filter.CompareToBool(value)) { return(false); } } } } } } } return(true); }