using UnityEngine; namespace Minesweeper.Config { [CreateAssetMenu(fileName = "MinesweeperUiConfig", menuName = "Minesweeper/UI Config")] public sealed class MinesweeperUiConfig : ScriptableObject { public const float DefaultReferenceCellSize = 100f; public const float DefaultBoardPaddingRatio = 0.15f; public const float DefaultGridSpacingRatio = 0.02f; public const float DefaultMinimumCellSize = 8f; [SerializeField] private Sprite smileSprite; [SerializeField] private Sprite surprisedSprite; [SerializeField] private Sprite coolSprite; [SerializeField] private Sprite deadSprite; [SerializeField] private GameObject cellButtonPrefab; [SerializeField] private Sprite mineSprite; [SerializeField] private Sprite flagSprite; [SerializeField] private Sprite closedCellSprite; [SerializeField] private Sprite openedCellSprite; [SerializeField] private Color defaultTextColor = Color.black; [SerializeField] private Color oneMineTextColor = Color.blue; [SerializeField] private Color twoMineTextColor = Color.green; [SerializeField] private Color threeMineTextColor = Color.red; [SerializeField] private Color fourMineTextColor = new Color(0f, 0f, 0.5f, 1f); [SerializeField] private Color fiveMineTextColor = new Color(0.5f, 0f, 0f, 1f); [SerializeField] private Color sixMineTextColor = Color.cyan; [SerializeField] private Color sevenMineTextColor = Color.black; [SerializeField] private Color eightMineTextColor = Color.gray; [SerializeField, Min(DefaultMinimumCellSize)] private float referenceCellSize = DefaultReferenceCellSize; [SerializeField, Min(0f)] private float boardPaddingRatio = DefaultBoardPaddingRatio; [SerializeField, Min(0f)] private float gridSpacingRatio = DefaultGridSpacingRatio; [SerializeField, Min(DefaultMinimumCellSize)] private float minimumCellSize = DefaultMinimumCellSize; public GameObject CellButtonPrefab => cellButtonPrefab; public Sprite MineSprite => mineSprite; public Sprite FlagSprite => flagSprite; public Sprite ClosedCellSprite => closedCellSprite; public Sprite OpenedCellSprite => openedCellSprite; public float ReferenceCellSize => referenceCellSize; public float BoardPaddingRatio => boardPaddingRatio; public float GridSpacingRatio => gridSpacingRatio; public float MinimumCellSize => minimumCellSize; public Sprite GetSmileSprite(SmileFaceState state) { switch (state) { case SmileFaceState.Surprised: return surprisedSprite != null ? surprisedSprite : smileSprite; case SmileFaceState.Cool: return coolSprite != null ? coolSprite : smileSprite; case SmileFaceState.Dead: return deadSprite != null ? deadSprite : smileSprite; default: return smileSprite; } } public Color GetNumberTextColor(int neighborMines) { switch (neighborMines) { case 1: return oneMineTextColor; case 2: return twoMineTextColor; case 3: return threeMineTextColor; case 4: return fourMineTextColor; case 5: return fiveMineTextColor; case 6: return sixMineTextColor; case 7: return sevenMineTextColor; case 8: return eightMineTextColor; default: return defaultTextColor; } } } }