[Fix] UI Logic

This commit is contained in:
2026-06-06 22:33:15 +07:00
parent f4ecf8b6f9
commit fdb22e9213
134 changed files with 5367 additions and 269 deletions
@@ -0,0 +1,91 @@
using System;
using Minesweeper.Config;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
namespace Minesweeper.Presentation.Views
{
public sealed class TopPanelView : MonoBehaviour, ITopPanelView
{
[SerializeField] private GameObject root;
[SerializeField] private TMP_Text mineText;
[SerializeField] private TMP_Text timerText;
[SerializeField] private Button smileButton;
[SerializeField] private Image smileImage;
[SerializeField] private MinesweeperUiConfig uiConfig;
public event Action SmileClicked;
private void Awake()
{
if (root == null)
{
root = gameObject;
}
}
private void OnEnable()
{
if (smileButton != null)
{
smileButton.onClick.AddListener(OnSmileClicked);
}
}
private void OnDisable()
{
if (smileButton != null)
{
smileButton.onClick.RemoveListener(OnSmileClicked);
}
}
public void SetActive(bool active)
{
root.SetActive(active);
}
public void SetRemainingMines(int remainingMines)
{
if (mineText != null)
{
mineText.text = Mathf.Max(0, remainingMines).ToString("00000");
}
}
public void SetTimer(float seconds)
{
if (timerText != null)
{
timerText.text = Mathf.FloorToInt(seconds).ToString("00000");
}
}
public void SetSmile(SmileFaceState state)
{
if (smileImage == null || uiConfig == null)
{
return;
}
var sprite = uiConfig.GetSmileSprite(state);
if (sprite != null)
{
smileImage.sprite = sprite;
}
smileImage.color = Color.white;
}
public void BindConfig(MinesweeperUiConfig config)
{
uiConfig = config;
}
private void OnSmileClicked()
{
SmileClicked?.Invoke();
}
}
}