92 lines
2.2 KiB
C#
92 lines
2.2 KiB
C#
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();
|
|
}
|
|
}
|
|
}
|