diff --git a/client/Assets/Vanguard/Runtime/UI/DeckBuilderView.cs b/client/Assets/Vanguard/Runtime/UI/DeckBuilderView.cs index 0a00ed8..5177a85 100644 --- a/client/Assets/Vanguard/Runtime/UI/DeckBuilderView.cs +++ b/client/Assets/Vanguard/Runtime/UI/DeckBuilderView.cs @@ -50,6 +50,8 @@ namespace Vanguard.UI private Button _botButton; private Button _duelButton; private Button _deleteButton; + private Button _dismantleAllButton; + private RectTransform _unownedChips; private RectTransform _deckMenuOverlay; private Text _deckMenuTitle; private DeckDto _deckMenuDeck; @@ -61,8 +63,9 @@ namespace Vanguard.UI private RectTransform _clanChips; private RectTransform _confirmOverlay; private InputField _searchInput; + private Text _confirmTitle; private Text _confirmText; - private DeckDto _pendingDelete; + private Action _confirmAction; private RectTransform _cardOverlay; private Image _cardArt; @@ -200,8 +203,15 @@ namespace Vanguard.UI var filters = UiKit.CreateButton(filterBar, "Filters", "Фильтры", OpenFilters, 16); SetFixedSize(filters, 110f, 38f); - var reset = UiKit.CreateButton(filterBar, "ResetFilters", "Сброс", ResetFilters, 16); - SetFixedSize(reset, 90f, 38f); + _dismantleAllButton = UiKit.CreateButton( + filterBar, + "DismantleAll", + "Распылить всё", + ConfirmDismantleExtras, + 15); + SetFixedSize(_dismantleAllButton, 200f, 38f); + SetButtonColor(_dismantleAllButton, new Color(0.30f, 0.16f, 0.08f, 0.95f)); + _dismantleAllButton.gameObject.SetActive(false); var scroll = UiKit.CreateGridScrollView( collectionArea, @@ -334,7 +344,7 @@ namespace Vanguard.UI var overlay = UiKit.CreatePanel(_root, "FilterOverlay", new Color(0f, 0f, 0f, 0.78f)); var card = UiKit.CreateCenteredCard( - overlay, "FilterCard", new Vector2(900f, 940f), PanelFill); + overlay, "FilterCard", new Vector2(900f, 1000f), PanelFill); UiKit.AddVerticalLayout(card, 24, 10); var title = UiKit.CreateText(card, "Title", "Фильтры коллекции", 28, TextPrimary); @@ -345,10 +355,11 @@ namespace Vanguard.UI UiKit.SetPreferredHeight(_searchInput, 44f); _searchInput.onValueChanged.AddListener(value => _draftFilter.Search = value); + _unownedChips = BuildFilterSection(card, "Отображение", 44f); _rarityChips = BuildFilterSection(card, "Редкость", 44f); _gradeChips = BuildFilterSection(card, "Ранг", 44f); _triggerChips = BuildFilterSection(card, "Триггер", 44f); - _clanChips = BuildFilterSection(card, "Клан", 260f, flexible: true); + _clanChips = BuildFilterSection(card, "Клан", 220f, flexible: true); var footer = UiKit.CreatePanel(card, "Footer", new Color(0f, 0f, 0f, 0f)); UiKit.SetPreferredHeight(footer, 48f); @@ -433,18 +444,19 @@ namespace Vanguard.UI _root, "DeleteDeckConfirm", new Color(0f, 0f, 0f, 0.78f)); var card = UiKit.CreateCenteredCard( - overlay, "ConfirmCard", new Vector2(640f, 300f), PanelFill); + overlay, "ConfirmCard", new Vector2(640f, 320f), PanelFill); UiKit.AddVerticalLayout(card, 30, 12); - var title = UiKit.CreateText(card, "Title", "Удалить колоду?", 28, TextPrimary); - title.fontStyle = FontStyle.Bold; - UiKit.SetPreferredHeight(title, 42f); + _confirmTitle = UiKit.CreateText(card, "Title", "Удалить колоду?", 28, TextPrimary); + _confirmTitle.fontStyle = FontStyle.Bold; + UiKit.SetPreferredHeight(_confirmTitle, 42f); _confirmText = UiKit.CreateText( card, "Text", string.Empty, 19, TextMuted); + _confirmText.horizontalOverflow = HorizontalWrapMode.Wrap; UiKit.SetPreferredHeight(_confirmText, 70f); - var yes = UiKit.CreateButton(card, "Yes", "Удалить", ConfirmDelete, 20); + var yes = UiKit.CreateButton(card, "Yes", "Подтвердить", ConfirmAction, 20); UiKit.SetPreferredHeight(yes, 48f); var no = UiKit.CreateButton(card, "No", "Отмена", CancelDelete, 20); @@ -877,8 +889,26 @@ namespace Vanguard.UI ClearChildren(_collectionContent); _countTexts.Clear(); - var items = _collection - .Select(item => new { Item = item, Meta = MetaOf(item) }) + var ownedByPrinting = new Dictionary(StringComparer.Ordinal); + foreach (var item in _collection) + ownedByPrinting[item.PrintingId] = item; + + var source = _filter.IncludeUnowned + ? _catalog.Values.Select(meta => new + { + Meta = meta, + Item = ownedByPrinting.TryGetValue(meta.PrintingId, out var owned) + ? owned + : new CollectionItemDto + { + PrintingId = meta.PrintingId, + NameId = meta.NameId, + Count = 0, + }, + }) + : _collection.Select(item => new { Meta = MetaOf(item), Item = item }); + + var items = source .Where(pair => pair.Meta != null && _filter.Matches(pair.Meta)) .OrderBy(pair => pair.Meta.Clan, StringComparer.Ordinal) .ThenBy(pair => pair.Meta.Grade) @@ -886,6 +916,8 @@ namespace Vanguard.UI foreach (var pair in items) AddCollectionCell(pair.Item, pair.Meta); + + UpdateDismantleButton(); } private void AddCollectionCell(CollectionItemDto item, CardCatalogItemDto meta) @@ -899,7 +931,7 @@ namespace Vanguard.UI frame.effectColor = CardArt.ClanColor(meta.Clan); frame.effectDistance = new Vector2(2f, -2f); - if (_deckOpen) + if (_deckOpen && item.Count > 0) { var button = cell.gameObject.AddComponent