[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,20 @@
using UnityEngine;
namespace Minesweeper.Config
{
[CreateAssetMenu(fileName = "MinesweeperGameConfig", menuName = "Minesweeper/Game Config")]
public sealed class MinesweeperGameConfig : ScriptableObject
{
[SerializeField, Min(1)] private int width = 9;
[SerializeField, Min(1)] private int height = 9;
[SerializeField, Min(1)] private int minesCount = 10;
[SerializeField] private KeyCode restartKey = KeyCode.R;
public int Width => width;
public int Height => height;
public int MinesCount => minesCount;
public KeyCode RestartKey => restartKey;
public bool IsValid => width > 0 && height > 0 && minesCount > 0 && minesCount < width * height;
}
}
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: b4e8d5c36f36bb443b640a85df3e7077
@@ -0,0 +1,86 @@
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;
}
}
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: a3b0d5a2a71d45ad9f4ac4f77158c101
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
+10
View File
@@ -0,0 +1,10 @@
namespace Minesweeper.Config
{
public enum SmileFaceState
{
Smile = 0,
Surprised = 1,
Cool = 2,
Dead = 3
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: f984c51b7db249ac9b9887b2b2bc75ef
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant: