Exemplo n.º 1
0
        public void Display(object data, bool isRowOdd)
        {
            Prefab = data as TreeInfo;
            if (Prefab == null)
            {
                return;
            }
            if (!initialized)
            {
                Initialize(Prefab);
            }

            // Set item state
            bool enabled = UpdateCheckbox();

            // Set label and sprite
            treeNameLabel.text         = Prefab.GetUncheckedLocalizedTitle();
            thumbNailSprite.atlas      = Prefab.m_Atlas;
            thumbNailSprite.spriteName = Prefab.m_Thumbnail;

            // Set slider and textfield enabled state
            probabilityTextField.isEnabled = includeCheckBox.isChecked;
            probabilitySlider.isEnabled    = includeCheckBox.isChecked;

            // Set textfield
            probabilityTextField.eventTextChanged -= ProbabilityTextField_eventTextChanged;
            probabilityTextField.text              = probabilityTextField.isEnabled ? GetProbability(Prefab, enabled).ToString() : 0.ToString();
            probabilityTextField.eventTextChanged += ProbabilityTextField_eventTextChanged;
            probabilityTextField.disabledTextColor = new Color32(128, 128, 128, 255);

            // Set slider
            probabilitySlider.eventValueChanged        -= ProbabilitySlider_eventValueChanged;
            probabilitySlider.value                     = GetProbability(Prefab, enabled);
            probabilitySlider.eventValueChanged        += ProbabilitySlider_eventValueChanged;
            probabilitySlider.thumbObject.disabledColor = new Color32(140, 140, 140, 255);
            probabilitySlider.disabledColor             = new Color32(100, 100, 100, 255);

            // Set default background
            backgroundSprite = "";

            // Set odd row colors/background
            if (isRowOdd)
            {
                backgroundSprite = ResourceLoader.ListItemHover;
                probabilitySlider.disabledColor             = new Color32(110, 135, 135, 255);
                probabilitySlider.thumbObject.disabledColor = new Color32(190, 210, 210, 255);
                probabilityTextField.disabledTextColor      = new Color32(110, 135, 135, 255);;
            }
        }
Exemplo n.º 2
0
        public void FilterTreeListInclusive(string filterText)
        {
            if (ForestBrush.Instance.Trees == null)
            {
                return;
            }
            string[]        filters  = filterText?.Trim()?.ToLower().Split(' ');
            List <TreeInfo> treeList = ForestBrush.Instance.Trees.Values.ToList();

            if (filters != null && filters.Length > 0 && !string.IsNullOrEmpty(filters[0]))
            {
                var             brushTrees        = ForestBrush.Instance.BrushTool.TreeInfos;
                var             treeAuthors       = ForestBrush.Instance.TreeAuthors;
                var             treeMeshData      = ForestBrush.Instance.TreesMeshData;
                List <TreeInfo> newData           = new List <TreeInfo>();
                bool            showBrushTree     = false;
                bool            showNotBrushTree  = false;
                bool            textureSizeFilter = false;
                bool            trisCountFilter   = false;
                int             textureSize       = 0;
                int             trisCount         = 0;

                for (int i = 0; i < filters.Length; i++)
                {
                    string filter = filters[i];
                    if (!string.IsNullOrEmpty(filter))
                    {
                        showBrushTree     = filter.Contains("+");
                        showNotBrushTree  = filter.Contains("-");
                        textureSizeFilter = filter.Length > 2 && filter.Substring(filter.Length - 2).ToLower() == "px";
                        trisCountFilter   = filter.Length > 4 && filter.Substring(filter.Length - 4).ToLower() == "tris";
                        if (textureSizeFilter && int.TryParse(filter.Substring(0, filter.Length - 2), out int size))
                        {
                            if (size > textureSize)
                            {
                                textureSize = size;
                            }
                        }
                        if (trisCountFilter && int.TryParse(filter.Substring(0, filter.Length - 4), out int count))
                        {
                            if (count > trisCount)
                            {
                                trisCount = count;
                            }
                        }
                    }
                }
                for (int i = 0; i < filters.Length; i++)
                {
                    string filter = filters[i];
                    if (!string.IsNullOrEmpty(filter))
                    {
                        for (int j = 0; j < treeList.Count; j++)
                        {
                            TreeInfo item = treeList[j];
                            if (item == null)
                            {
                                continue;
                            }
                            string itemTitle     = item.GetUncheckedLocalizedTitle().ToLower();
                            bool   itemHasData   = treeMeshData.TryGetValue(item.name, out TreeMeshData itemData);
                            bool   itemHasAuthor = treeAuthors.TryGetValue(item.name.Split('.')[0], out string itemAuthor);
                            if ((textureSizeFilter && itemHasData && textureSize > 0 && (itemData.textureSize.x <= textureSize && itemData.textureSize.y <= textureSize)) ||
                                (trisCountFilter && itemHasData && itemData.triangles > 0 && (itemData.triangles <= trisCount)) ||
                                (showNotBrushTree && !brushTrees.Contains(item)) ||
                                (showBrushTree && brushTrees.Contains(item)) ||
                                (itemHasAuthor && itemAuthor.ToLower().Contains(filter)) ||
                                (itemTitle.Contains(filter)))
                            {
                                if (!newData.Contains(item))
                                {
                                    newData.Add(item);
                                }
                            }
                        }
                    }
                }
                treeList = newData;
            }
            treeList.Sort((t1, t2) => t1.CompareTo(t2, UserMod.Settings.Sorting, UserMod.Settings.SortingOrder));
            ForestBrush.Instance.ForestBrushPanel.BrushEditSection.TreesList.rowsData.m_buffer = treeList.ToArray();
            ForestBrush.Instance.ForestBrushPanel.BrushEditSection.TreesList.rowsData.m_size   = treeList.Count;
            ForestBrush.Instance.ForestBrushPanel.BrushEditSection.TreesList.DisplayAt(0f);
        }
Exemplo n.º 3
0
        public void FilterTreeListExclusive(string filterText)
        {
            if (ForestBrush.Instance.Trees == null)
            {
                return;
            }
            string[]        filters  = filterText?.Trim()?.ToLower().Split(' ');
            List <TreeInfo> treeList = ForestBrush.Instance.Trees.Values.ToList();

            ClearFilteredData();
            if (filters != null && filters.Length > 0 && !string.IsNullOrEmpty(filters[0]))
            {
                var brushTrees   = ForestBrush.Instance.BrushTool.TreeInfos;
                var treeAuthors  = ForestBrush.Instance.TreeAuthors;
                var treeMeshData = ForestBrush.Instance.TreesMeshData;

                for (int i = 0; i < filters.Length; i++)
                {
                    string filter = filters[i];
                    if (!string.IsNullOrEmpty(filter))
                    {
                        int  textureSize         = 0;
                        int  trisCount           = 0;
                        bool isInBrushFilter     = filter.Contains("+");
                        bool isNotInBrushFilter  = filter.Contains("-");
                        bool isTextureSizeFilter = filter.Length > 2 && filter.Substring(filter.Length - 2).ToLower() == "px";
                        bool isTrisCountFilter   = filter.Length > 4 && filter.Substring(filter.Length - 4).ToLower() == "tris";

                        if (isTextureSizeFilter && int.TryParse(filter.Substring(0, filter.Length - 2), out int size))
                        {
                            if (size > textureSize)
                            {
                                textureSize = size;
                            }
                        }
                        if (isTrisCountFilter && int.TryParse(filter.Substring(0, filter.Length - 4), out int count))
                        {
                            if (count > trisCount)
                            {
                                trisCount = count;
                            }
                        }

                        for (int j = 0; j < treeList.Count; j++)
                        {
                            TreeInfo item = treeList[j];
                            if (item == null)
                            {
                                continue;
                            }
                            string itemTitle     = item.GetUncheckedLocalizedTitle().ToLower();
                            bool   itemHasData   = treeMeshData.TryGetValue(item.name, out TreeMeshData itemData);
                            bool   itemHasAuthor = treeAuthors.TryGetValue(item.name.Split('.')[0], out string itemAuthor);

                            bool isTextureMatch    = itemHasData && isTextureSizeFilter && textureSize > 0 && (itemData.textureSize.x <= textureSize && itemData.textureSize.y <= textureSize);
                            bool isTrisMatch       = isTrisCountFilter && itemHasData && itemData.triangles > 0 && (itemData.triangles <= trisCount);
                            bool isNotInBrushMatch = isNotInBrushFilter && !brushTrees.Contains(item);
                            bool isInBrushMatch    = isInBrushFilter && brushTrees.Contains(item);
                            bool isAuthorMatch     = itemHasAuthor && itemAuthor.ToLower().Contains(filter);
                            bool isStringMatch     = itemTitle.Contains(filter);

                            if (isTextureMatch)
                            {
                                AddItem(Filter.Texture, item);
                            }
                            if (isTrisMatch)
                            {
                                AddItem(Filter.Tris, item);
                            }
                            if (isNotInBrushMatch)
                            {
                                AddItem(Filter.NotInBrush, item);
                            }
                            if (isInBrushMatch)
                            {
                                AddItem(Filter.InBrush, item);
                            }
                            if (isAuthorMatch)
                            {
                                AddItem(Filter.Author, item);
                            }
                            else if (isStringMatch)
                            {
                                AddItem(Filter.String, item);
                            }
                            if (isTextureMatch || isTrisMatch || isNotInBrushMatch || isInBrushMatch || isAuthorMatch || isStringMatch)
                            {
                                AddItem(Filter.Count, item);
                            }
                        }
                    }
                }
                foreach (var tree in FilteredData[(int)Filter.Count])
                {
                    for (int i = 0; i < (int)Filter.Count; i++)
                    {
                        if (IsMatch((Filter)i, tree) && !Data.Contains(tree))
                        {
                            Data.Add(tree);
                        }
                    }
                }
                treeList = Data;
            }
            treeList.Sort((t1, t2) => t1.CompareTo(t2, UserMod.Settings.Sorting, UserMod.Settings.SortingOrder));
            ForestBrush.Instance.ForestBrushPanel.BrushEditSection.TreesList.rowsData.m_buffer = treeList.ToArray();
            ForestBrush.Instance.ForestBrushPanel.BrushEditSection.TreesList.rowsData.m_size   = treeList.Count;
            ForestBrush.Instance.ForestBrushPanel.BrushEditSection.TreesList.DisplayAt(0f);
        }
Exemplo n.º 4
0
        private void Initialize(TreeInfo info)
        {
            //General
            name          = info.GetUncheckedLocalizedTitle() + "ListItem";
            atlas         = ResourceLoader.Atlas;
            width         = parent.width;
            height        = Constants.UIItemHeight;
            isVisible     = true;
            isInteractive = true;
            tooltipBox.GetComponent <UILabel>().textAlignment = UIHorizontalAlignment.Left;
            GenerateTooltip(Prefab);
            eventTooltipEnter += TreeItem_eventTooltipEnter;
            eventMouseLeave   += TreeItem_eventMouseLeave;

            //Thumbnail
            thumbNailSprite                  = AddUIComponent <UITextureSprite>();
            thumbNailSprite.texture          = info.m_Atlas.sprites.Find(spr => spr.name == info.m_Thumbnail).texture;
            thumbNailSprite.size             = new Vector2(50f, 54.5f);
            thumbNailSprite.relativePosition = new Vector3(Constants.UISpacing, (Constants.UIItemHeight - thumbNailSprite.height) / 2);

            //CheckBox
            includeCheckBox      = AddUIComponent <UICheckBox>();
            includeCheckBox.size = Constants.UICheckboxSize + new Vector2(3f, 3f);
            UISprite sprite = includeCheckBox.AddUIComponent <UISprite>();

            sprite.atlas                     = ResourceLoader.Atlas;
            sprite.spriteName                = ResourceLoader.CheckBoxSpriteUnchecked;
            sprite.size                      = includeCheckBox.size;
            sprite.relativePosition          = Vector3.zero;
            includeCheckBox.checkedBoxObject = sprite.AddUIComponent <UISprite>();
            ((UISprite)includeCheckBox.checkedBoxObject).atlas      = ResourceLoader.Atlas;
            ((UISprite)includeCheckBox.checkedBoxObject).spriteName = ResourceLoader.CheckBoxSpriteChecked;
            includeCheckBox.checkedBoxObject.size             = includeCheckBox.size;
            includeCheckBox.checkedBoxObject.relativePosition = Vector3.zero;
            bool enabled = ForestBrush.Instance.Container.m_variations.Any(v => v.m_finalTree == info);

            includeCheckBox.isChecked          = enabled;
            includeCheckBox.eventCheckChanged += IncludeCheckBox_eventCheckChanged;
            includeCheckBox.relativePosition   = new Vector3(70.0f, 15f);

            //Label
            treeNameLabel                  = AddUIComponent <UILabel>();
            treeNameLabel.text             = info.GetUncheckedLocalizedTitle();
            treeNameLabel.autoSize         = false;
            treeNameLabel.width            = 255.0f;
            treeNameLabel.relativePosition = new Vector3(96.0f, 15.0f);

            //slider
            probabilitySlider                    = AddUIComponent <UISlider>();
            probabilitySlider.atlas              = ResourceLoader.Atlas;
            probabilitySlider.size               = new Vector2(230f, 5f);
            probabilitySlider.color              = new Color32(55, 55, 55, 255);
            probabilitySlider.disabledColor      = new Color32(100, 100, 100, 255);
            probabilitySlider.minValue           = 1f;
            probabilitySlider.maxValue           = 100f;
            probabilitySlider.stepSize           = 1f;
            probabilitySlider.scrollWheelAmount  = 1f;
            probabilitySlider.eventValueChanged += ProbabilitySlider_eventValueChanged;
            probabilitySlider.eventMouseUp      += ProbabilitySlider_eventMouseUp;
            probabilitySlider.backgroundSprite   = ResourceLoader.WhiteRect;
            probabilitySlider.pivot              = UIPivotPoint.TopLeft;
            probabilitySlider.relativePosition   = new Vector3(thumbNailSprite.width + Constants.UISpacing * 2, 42.0f);
            UISprite thumb = probabilitySlider.AddUIComponent <UISprite>();

            thumb.atlas                   = ResourceLoader.Atlas;
            thumb.size                    = new Vector2(8.0f, 15.0f);
            thumb.spriteName              = ResourceLoader.TextFieldPanel;
            thumb.disabledColor           = new Color32(140, 140, 140, 255);
            probabilitySlider.thumbObject = thumb;
            probabilitySlider.isEnabled   = includeCheckBox.isChecked;

            //Textfield
            probabilityTextField         = AddUIComponent <UITextField>();
            probabilityTextField.atlas   = ResourceLoader.Atlas;
            probabilityTextField.size    = new Vector2(35.0f, 19.0f);
            probabilityTextField.padding = new RectOffset(2, 2, 4, 0);
            probabilityTextField.builtinKeyNavigation     = true;
            probabilityTextField.isInteractive            = true;
            probabilityTextField.readOnly                 = false;
            probabilityTextField.horizontalAlignment      = UIHorizontalAlignment.Center;
            probabilityTextField.selectionSprite          = ResourceLoader.EmptySprite;
            probabilityTextField.selectionBackgroundColor = new Color32(0, 172, 234, 255);
            probabilityTextField.normalBgSprite           = ResourceLoader.TextFieldPanelHovered;
            probabilityTextField.disabledBgSprite         = ResourceLoader.TextFieldPanelHovered;
            probabilityTextField.textColor                = new Color32(0, 0, 0, 255);
            probabilityTextField.textScale                = 0.85f;
            probabilityTextField.disabledTextColor        = new Color32(128, 128, 128, 255);
            probabilityTextField.color             = new Color32(255, 255, 255, 255);
            probabilityTextField.disabledColor     = new Color32(128, 128, 128, 255);
            probabilityTextField.relativePosition  = new Vector3(318.0f, 34.0f);
            probabilityTextField.eventTextChanged += ProbabilityTextField_eventTextChanged;
            probabilityTextField.eventKeyPress    += ProbabilityTextField_eventKeyPress;
            probabilityTextField.eventLostFocus   += ProbabilityTextField_eventLostFocus;
            probabilityTextField.eventGotFocus    += ProbabilityTextField_eventGotFocus;
            probabilityTextField.tooltip           = Translation.Instance.GetTranslation("FOREST-BRUSH-PROBABILITY");
            probabilityTextField.isEnabled         = includeCheckBox.isChecked;
            float probability = GetProbability(info, enabled);

            probabilitySlider.value   = probability;
            probabilityTextField.text = GetProbability(info, enabled).ToString();

            initialized = true;
        }