[Add] Menu with configs and size fix

This commit is contained in:
2026-06-06 23:48:55 +07:00
parent 7104089c00
commit a9767c5301
29 changed files with 453 additions and 153 deletions
@@ -1,4 +1,5 @@
using System;
using Minesweeper.Core;
using UnityEngine;
using UnityEngine.UI;
@@ -8,8 +9,14 @@ namespace Minesweeper.Presentation.Views
{
[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()
{
@@ -17,8 +24,6 @@ namespace Minesweeper.Presentation.Views
{
root = gameObject;
}
AutoBind();
}
private void OnEnable()
@@ -27,6 +32,12 @@ namespace Minesweeper.Presentation.Views
{
startButton.onClick.AddListener(OnStartClicked);
}
sizeXSlider.ValueChanged += OnSizeSliderChanged;
sizeYSlider.ValueChanged += OnSizeSliderChanged;
sizeXSlider.AddListeners();
sizeYSlider.AddListeners();
minesSlider.AddListeners();
}
private void OnDisable()
@@ -35,6 +46,12 @@ namespace Minesweeper.Presentation.Views
{
startButton.onClick.RemoveListener(OnStartClicked);
}
sizeXSlider.RemoveListeners();
sizeYSlider.RemoveListeners();
minesSlider.RemoveListeners();
sizeXSlider.ValueChanged -= OnSizeSliderChanged;
sizeYSlider.ValueChanged -= OnSizeSliderChanged;
}
public void Show()
@@ -47,27 +64,34 @@ namespace Minesweeper.Presentation.Views
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 Bind(GameObject root, Button startButton)
public void BindRoot(GameObject root)
{
this.root = root != null ? root : gameObject;
this.startButton = startButton;
}
private void AutoBind()
private void OnSizeSliderChanged(int value)
{
if (startButton == null)
{
var startButtonTransform = transform.Find("StartButton");
if (startButtonTransform != null)
{
startButton = startButtonTransform.GetComponent<Button>();
}
}
SizeChanged?.Invoke();
}
}
}