98 lines
2.7 KiB
C#
98 lines
2.7 KiB
C#
using System;
|
|
using Minesweeper.Core;
|
|
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
|
|
namespace Minesweeper.Presentation.Views
|
|
{
|
|
public sealed class MainMenuView : MonoBehaviour, IMainMenuView
|
|
{
|
|
[SerializeField] private GameObject root;
|
|
[SerializeField] private Button startButton;
|
|
[SerializeField] private MenuSliderView sizeXSlider = new MenuSliderView();
|
|
[SerializeField] private MenuSliderView sizeYSlider = new MenuSliderView();
|
|
[SerializeField] private MenuSliderView minesSlider = new MenuSliderView();
|
|
|
|
public event Action StartClicked;
|
|
public event Action SizeChanged;
|
|
|
|
public GameSettingsValue SelectedSettings => new GameSettingsValue(sizeXSlider.Value, sizeYSlider.Value, minesSlider.Value);
|
|
|
|
private void Awake()
|
|
{
|
|
if (root == null)
|
|
{
|
|
root = gameObject;
|
|
}
|
|
}
|
|
|
|
private void OnEnable()
|
|
{
|
|
if (startButton != null)
|
|
{
|
|
startButton.onClick.AddListener(OnStartClicked);
|
|
}
|
|
|
|
sizeXSlider.ValueChanged += OnSizeSliderChanged;
|
|
sizeYSlider.ValueChanged += OnSizeSliderChanged;
|
|
sizeXSlider.AddListeners();
|
|
sizeYSlider.AddListeners();
|
|
minesSlider.AddListeners();
|
|
}
|
|
|
|
private void OnDisable()
|
|
{
|
|
if (startButton != null)
|
|
{
|
|
startButton.onClick.RemoveListener(OnStartClicked);
|
|
}
|
|
|
|
sizeXSlider.RemoveListeners();
|
|
sizeYSlider.RemoveListeners();
|
|
minesSlider.RemoveListeners();
|
|
sizeXSlider.ValueChanged -= OnSizeSliderChanged;
|
|
sizeYSlider.ValueChanged -= OnSizeSliderChanged;
|
|
}
|
|
|
|
public void Show()
|
|
{
|
|
root.SetActive(true);
|
|
}
|
|
|
|
public void Hide()
|
|
{
|
|
root.SetActive(false);
|
|
}
|
|
|
|
public void ConfigureSizeX(int min, int max, int value)
|
|
{
|
|
sizeXSlider.Configure(min, max, value, "Size X");
|
|
}
|
|
|
|
public void ConfigureSizeY(int min, int max, int value)
|
|
{
|
|
sizeYSlider.Configure(min, max, value, "Size Y");
|
|
}
|
|
|
|
public void ConfigureMines(int min, int max, int value)
|
|
{
|
|
minesSlider.Configure(min, max, value, "Mines Count");
|
|
}
|
|
|
|
private void OnStartClicked()
|
|
{
|
|
StartClicked?.Invoke();
|
|
}
|
|
|
|
public void BindRoot(GameObject root)
|
|
{
|
|
this.root = root != null ? root : gameObject;
|
|
}
|
|
|
|
private void OnSizeSliderChanged(int value)
|
|
{
|
|
SizeChanged?.Invoke();
|
|
}
|
|
}
|
|
}
|