Esempio n. 1
0
        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;
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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);
        }