SamsonGame/Assets/Scripts/Game/UI/Market/View/MarketUI.cs

139 lines
4.1 KiB
C#
Raw Permalink Normal View History

2021-12-29 20:50:11 +03:00
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
namespace RND
{
public class MarketUI : Window
{
private int SectionsCount => _sections.Count;
private Transform _shopParent;
private Transform _tabsParent;
private GameObject _previewContainer;
private ShopTab _tabUITemplate;
private readonly List<ShopTab> _tabs = new List<ShopTab>();
private readonly List<BaseMarketSectionUI> _sections = new List<BaseMarketSectionUI>();
private Market _market;
private int _activeSection = -1;
private Button _closeButton;
protected override void OnInit()
{
_shopParent = transform.FindRecursive("SubWindowsContainer");
_tabsParent = transform.FindRecursive("TabsContainer");
_tabUITemplate = _tabsParent.GetChild(0).GetComponent<ShopTab>();
_tabUITemplate.gameObject.SetActive(false);
_previewContainer = Assets.Create<GameObject>("UI/ItemPreviews/ItemPreviewContainer");
OnClose += AfterCloseAction;
_closeButton = transform.FindRecursive("CloseButton").GetComponent<Button>();
_closeButton.onClick.AddListener(Close);
}
private void AfterCloseAction(Window _)
{
OnClose -= AfterCloseAction;
foreach (var sectionUI in _sections)
sectionUI.Close();
Destroy(_previewContainer);
}
public void SetMarket(Market market)
{
_market = market;
Clear();
CreateSections();
SetPreviewContainerForSections();
HideAllSections();
SetActiveSection(0);
}
private void Clear()
{
_sections.Clear();
_tabs.Clear();
}
private void CreateSections()
{
foreach (Market.MarketSection section in _market.Sections)
CreateSection(section);
}
private void CreateSection(Market.MarketSection section)
{
_tabs.Add(CreateTabUI(section.PreviewPath));
_sections.Add(CreateShopUI(section.Shop));
}
private ShopTab CreateTabUI(string previewPath)
{
ShopTab tabUI = Instantiate(_tabUITemplate, _tabsParent);
tabUI.Init();
tabUI.SetClickAction(OpenSection);
tabUI.gameObject.SetActive(true);
tabUI.SetSpriteFromPath(previewPath);
_tabs.Add(tabUI);
return tabUI;
}
private BaseMarketSectionUI CreateShopUI(BaseShop shop)
{
BaseMarketSectionUI baseMarketSectionUI = MarketSectionFactory.CreateSection(shop, _shopParent);
baseMarketSectionUI.NeedPurchaseConfirmation = _market.ConfirmationForPurchase;
baseMarketSectionUI.gameObject.SetActive(true);
_sections.Add(baseMarketSectionUI);
return baseMarketSectionUI;
}
private void SetActiveSection(int index)
{
if (index == _activeSection)
return;
if (_activeSection != -1)
HideSection(_activeSection);
OpenSection(index);
_activeSection = index;
}
private void HideAllSections()
{
for (int i = 0; i < SectionsCount; i++)
HideSection(i);
}
private void HideSection(int index)
{
_tabs[index].SetActiveState(false);
_sections[index].Hide();
}
private void OpenSection(int index)
{
_tabs[index].SetActiveState(true);
_sections[index].Open();
}
private void OpenSection(ShopTab tab) => SetActiveSection(_tabs.IndexOf(tab));
private void SetPreviewContainerForSections()
{
foreach (var section in _sections)
section.SetPreviewContainer(_previewContainer.transform);
}
}
}