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);; } }
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); }
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); }
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; }