(67dca1bf6) Added a search bar to the store menu. Closes #1232
This commit is contained in:
@@ -16,8 +16,11 @@ namespace Barotrauma
|
|||||||
|
|
||||||
private GUIListBox characterList;
|
private GUIListBox characterList;
|
||||||
|
|
||||||
|
private MapEntityCategory selectedItemCategory = MapEntityCategory.Equipment;
|
||||||
|
|
||||||
private GUIListBox myItemList;
|
private GUIListBox myItemList;
|
||||||
private GUIListBox storeItemList;
|
private GUIListBox storeItemList;
|
||||||
|
private GUITextBox searchBox;
|
||||||
|
|
||||||
private GUIComponent missionPanel;
|
private GUIComponent missionPanel;
|
||||||
private GUIComponent selectedLocationInfo;
|
private GUIComponent selectedLocationInfo;
|
||||||
@@ -170,10 +173,27 @@ namespace Barotrauma
|
|||||||
RelativeSpacing = 0.02f
|
RelativeSpacing = 0.02f
|
||||||
};
|
};
|
||||||
|
|
||||||
new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.1f), storeContent.RectTransform), "", font: GUI.LargeFont)
|
var storeContentTop = new GUILayoutGroup(new RectTransform(new Vector2(1.0f, 0.1f), storeContent.RectTransform), isHorizontal: true, childAnchor: Anchor.CenterLeft)
|
||||||
|
{
|
||||||
|
Stretch = true
|
||||||
|
};
|
||||||
|
|
||||||
|
new GUITextBlock(new RectTransform(new Vector2(0.5f, 1.0f), storeContentTop.RectTransform), "", font: GUI.LargeFont)
|
||||||
{
|
{
|
||||||
TextGetter = GetMoney
|
TextGetter = GetMoney
|
||||||
};
|
};
|
||||||
|
var filterContainer = new GUILayoutGroup(new RectTransform(new Vector2(0.5f, 0.5f), storeContentTop.RectTransform), isHorizontal: true)
|
||||||
|
{
|
||||||
|
Stretch = true,
|
||||||
|
RelativeSpacing = 0.02f
|
||||||
|
};
|
||||||
|
new GUITextBlock(new RectTransform(new Vector2(0.5f, 1.0f), filterContainer.RectTransform), TextManager.Get("FilterMapEntities"), textAlignment: Alignment.CenterRight, font: GUI.Font);
|
||||||
|
searchBox = new GUITextBox(new RectTransform(new Vector2(0.8f, 1.0f), filterContainer.RectTransform), font: GUI.Font);
|
||||||
|
searchBox.OnTextChanged += (textBox, text) => { FilterStoreItems(null, text); return true; };
|
||||||
|
var clearButton = new GUIButton(new RectTransform(new Vector2(0.2f, 1.0f), filterContainer.RectTransform), "x")
|
||||||
|
{
|
||||||
|
OnClicked = (btn, userdata) => { searchBox.Text = ""; FilterStoreItems(selectedItemCategory, ""); searchBox.Flash(Color.White); return true; }
|
||||||
|
};
|
||||||
|
|
||||||
var storeItemLists = new GUILayoutGroup(new RectTransform(new Vector2(1.0f, 0.8f), storeContent.RectTransform), isHorizontal: true)
|
var storeItemLists = new GUILayoutGroup(new RectTransform(new Vector2(1.0f, 0.8f), storeContent.RectTransform), isHorizontal: true)
|
||||||
{
|
{
|
||||||
@@ -196,7 +216,7 @@ namespace Barotrauma
|
|||||||
"", style: "ItemCategory" + category.ToString())
|
"", style: "ItemCategory" + category.ToString())
|
||||||
{
|
{
|
||||||
UserData = category,
|
UserData = category,
|
||||||
OnClicked = (btn, userdata) => { SelectItemCategory((MapEntityCategory)userdata); return true; }
|
OnClicked = (btn, userdata) => { FilterStoreItems((MapEntityCategory)userdata, searchBox.Text); return true; }
|
||||||
};
|
};
|
||||||
itemCategoryButtons.Add(categoryButton);
|
itemCategoryButtons.Add(categoryButton);
|
||||||
|
|
||||||
@@ -212,7 +232,8 @@ namespace Barotrauma
|
|||||||
CanBeFocused = false
|
CanBeFocused = false
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
SelectItemCategory(MapEntityCategory.Equipment);
|
FillStoreItemList();
|
||||||
|
FilterStoreItems(MapEntityCategory.Equipment, "");
|
||||||
|
|
||||||
// repair tab -------------------------------------------------------------------------
|
// repair tab -------------------------------------------------------------------------
|
||||||
|
|
||||||
@@ -450,7 +471,8 @@ namespace Barotrauma
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
//refresh store view
|
//refresh store view
|
||||||
SelectItemCategory(MapEntityCategory.Equipment);
|
FillStoreItemList();
|
||||||
|
FilterStoreItems(MapEntityCategory.Equipment, searchBox.Text);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -774,32 +796,43 @@ namespace Barotrauma
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private bool SelectItemCategory(MapEntityCategory category)
|
private void FillStoreItemList()
|
||||||
{
|
{
|
||||||
storeItemList.ClearChildren();
|
storeItemList.ClearChildren();
|
||||||
|
|
||||||
int width = storeItemList.Rect.Width;
|
int width = storeItemList.Rect.Width;
|
||||||
foreach (MapEntityPrefab mapEntityPrefab in MapEntityPrefab.List)
|
foreach (MapEntityPrefab mapEntityPrefab in MapEntityPrefab.List)
|
||||||
{
|
{
|
||||||
if (!(mapEntityPrefab is ItemPrefab itemPrefab) || !itemPrefab.Category.HasFlag(category)) continue;
|
if (!(mapEntityPrefab is ItemPrefab itemPrefab)) { continue; }
|
||||||
|
|
||||||
PriceInfo priceInfo = itemPrefab.GetPrice(Campaign.Map.CurrentLocation);
|
PriceInfo priceInfo = itemPrefab.GetPrice(Campaign.Map.CurrentLocation);
|
||||||
if (priceInfo == null) continue;
|
if (priceInfo == null) continue;
|
||||||
|
|
||||||
CreateItemFrame(new PurchasedItem(itemPrefab, 0), priceInfo, storeItemList, width);
|
CreateItemFrame(new PurchasedItem(itemPrefab, 0), priceInfo, storeItemList, width);
|
||||||
}
|
}
|
||||||
|
|
||||||
storeItemList.Content.RectTransform.SortChildren(
|
storeItemList.Content.RectTransform.SortChildren(
|
||||||
(x, y) => (x.GUIComponent.UserData as PurchasedItem).ItemPrefab.Name.CompareTo((y.GUIComponent.UserData as PurchasedItem).ItemPrefab.Name));
|
(x, y) => (x.GUIComponent.UserData as PurchasedItem).ItemPrefab.Name.CompareTo((y.GUIComponent.UserData as PurchasedItem).ItemPrefab.Name));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void FilterStoreItems(MapEntityCategory? category, string filter)
|
||||||
|
{
|
||||||
|
if (category.HasValue)
|
||||||
|
{
|
||||||
|
selectedItemCategory = category.Value;
|
||||||
|
}
|
||||||
|
foreach (GUIComponent child in storeItemList.Content.Children)
|
||||||
|
{
|
||||||
|
var item = child.UserData as PurchasedItem;
|
||||||
|
if (item?.ItemPrefab?.Name == null) { continue; }
|
||||||
|
child.Visible =
|
||||||
|
(!category.HasValue || item.ItemPrefab.Category.HasFlag(category.Value)) &&
|
||||||
|
(string.IsNullOrEmpty(filter) || item.ItemPrefab.Name.ToLower().Contains(searchBox.Text.ToLower()));
|
||||||
|
}
|
||||||
foreach (GUIButton btn in itemCategoryButtons)
|
foreach (GUIButton btn in itemCategoryButtons)
|
||||||
{
|
{
|
||||||
btn.Selected = (MapEntityCategory)btn.UserData == category;
|
btn.Selected = (MapEntityCategory)btn.UserData == selectedItemCategory;
|
||||||
}
|
}
|
||||||
|
storeItemList.UpdateScrollBarSize();
|
||||||
storeItemList.BarScroll = 0.0f;
|
storeItemList.BarScroll = 0.0f;
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public string GetMoney()
|
public string GetMoney()
|
||||||
|
|||||||
Reference in New Issue
Block a user