[Fix] Config & auto-property

This commit is contained in:
2026-06-06 22:41:45 +07:00
parent fdb22e9213
commit b4207ce3d3
6 changed files with 487 additions and 80 deletions
+5 -10
View File
@@ -5,16 +5,11 @@ 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;
[field: SerializeField, Min(1)] public int Width { get; private set; } = 9;
[field: SerializeField, Min(1)] public int Height { get; private set; } = 9;
[field: SerializeField, Min(1)] public int MinesCount { get; private set; } = 10;
[field: SerializeField] public KeyCode RestartKey { get; private set; } = 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;
public bool IsValid => Width > 0 && Height > 0 && MinesCount > 0 && MinesCount < Width * Height;
}
}
+17 -27
View File
@@ -10,15 +10,15 @@ namespace Minesweeper.Config
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;
[field: SerializeField] public Sprite SmileSprite { get; private set; }
[field: SerializeField] public Sprite SurprisedSprite { get; private set; }
[field: SerializeField] public Sprite CoolSprite { get; private set; }
[field: SerializeField] public Sprite DeadSprite { get; private set; }
[field: SerializeField] public GameObject CellButtonPrefab { get; private set; }
[field: SerializeField] public Sprite MineSprite { get; private set; }
[field: SerializeField] public Sprite FlagSprite { get; private set; }
[field: SerializeField] public Color ClosedCellColor { get; private set; } = Color.gray;
[field: SerializeField] public Color OpenedCellColor { get; private set; } = Color.white;
[SerializeField] private Color defaultTextColor = Color.black;
[SerializeField] private Color oneMineTextColor = Color.blue;
[SerializeField] private Color twoMineTextColor = Color.green;
@@ -28,33 +28,23 @@ namespace Minesweeper.Config
[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;
[field: SerializeField, Min(DefaultMinimumCellSize)] public float ReferenceCellSize { get; private set; } = DefaultReferenceCellSize;
[field: SerializeField, Min(0f)] public float BoardPaddingRatio { get; private set; } = DefaultBoardPaddingRatio;
[field: SerializeField, Min(0f)] public float GridSpacingRatio { get; private set; } = DefaultGridSpacingRatio;
[field: SerializeField, Min(DefaultMinimumCellSize)] public float MinimumCellSize { get; private set; } = DefaultMinimumCellSize;
public Sprite GetSmileSprite(SmileFaceState state)
{
switch (state)
{
case SmileFaceState.Surprised:
return surprisedSprite != null ? surprisedSprite : smileSprite;
return SurprisedSprite != null ? SurprisedSprite : SmileSprite;
case SmileFaceState.Cool:
return coolSprite != null ? coolSprite : smileSprite;
return CoolSprite != null ? CoolSprite : SmileSprite;
case SmileFaceState.Dead:
return deadSprite != null ? deadSprite : smileSprite;
return DeadSprite != null ? DeadSprite : SmileSprite;
default:
return smileSprite;
return SmileSprite;
}
}
@@ -90,8 +90,7 @@ namespace Minesweeper.Presentation.Views
if (backgroundImage != null)
{
backgroundImage.pixelsPerUnitMultiplier = pixelsPerUnitMultiplier;
backgroundImage.sprite = cell.IsOpened ? config.OpenedCellSprite : config.ClosedCellSprite;
backgroundImage.color = Color.white;
backgroundImage.color = cell.IsOpened ? config.OpenedCellColor : config.ClosedCellColor;
}
if (contentImage != null)