[Fix] Naming

This commit is contained in:
2026-03-01 11:52:15 +07:00
parent 0f9b162061
commit 6c10a35bf9
34 changed files with 133 additions and 93 deletions
+8
View File
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 9191bf86efa11bc47bcd9383d3a106f2
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 511dff8ba41dd7e49a817a1053ff3b90
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -9,14 +9,14 @@ namespace YachtDice.Categories
/// Аналог ModifierCatalogSO. /// Аналог ModifierCatalogSO.
/// </summary> /// </summary>
[CreateAssetMenu(fileName = "CategoryCatalog", menuName = "YachtDice/Categories/Catalog")] [CreateAssetMenu(fileName = "CategoryCatalog", menuName = "YachtDice/Categories/Catalog")]
public class CategoryCatalogSO : ScriptableObject public class CategoryCatalog : ScriptableObject
{ {
[SerializeField] private List<CategoryDefinitionSO> categories = new(); [SerializeField] private List<CategoryDefinition> categories = new();
public IReadOnlyList<CategoryDefinitionSO> All => categories; public IReadOnlyList<CategoryDefinition> All => categories;
public int Count => categories.Count; public int Count => categories.Count;
public CategoryDefinitionSO FindById(string id) public CategoryDefinition FindById(string id)
{ {
for (int i = 0; i < categories.Count; i++) for (int i = 0; i < categories.Count; i++)
{ {
@@ -26,7 +26,7 @@ namespace YachtDice.Categories
return null; return null;
} }
public int IndexOf(CategoryDefinitionSO def) public int IndexOf(CategoryDefinition def)
{ {
for (int i = 0; i < categories.Count; i++) for (int i = 0; i < categories.Count; i++)
{ {
@@ -37,10 +37,10 @@ namespace YachtDice.Categories
} }
#if UNITY_EDITOR #if UNITY_EDITOR
public static CategoryCatalogSO CreateForTest(List<CategoryDefinitionSO> defs) public static CategoryCatalog CreateForTest(List<CategoryDefinition> defs)
{ {
var catalog = CreateInstance<CategoryCatalogSO>(); var catalog = CreateInstance<CategoryCatalog>();
catalog.categories = defs ?? new List<CategoryDefinitionSO>(); catalog.categories = defs ?? new List<CategoryDefinition>();
return catalog; return catalog;
} }
#endif #endif
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: e89ee3a4aac1e6d4eabd79f32b9d8d15
@@ -8,7 +8,7 @@ namespace YachtDice.Categories
/// Абстрактное определение категории для скоринга. /// Абстрактное определение категории для скоринга.
/// Каждая категория знает как вычислить очки по набору дайсов. /// Каждая категория знает как вычислить очки по набору дайсов.
/// </summary> /// </summary>
public abstract class CategoryDefinitionSO : ScriptableObject public abstract class CategoryDefinition : ScriptableObject
{ {
[Header("Identity")] [Header("Identity")]
[SerializeField] private string id; [SerializeField] private string id;
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 7b24bbcc7122ad0429210eb02f5b51a7
@@ -9,7 +9,7 @@ namespace YachtDice.Categories
/// При совпадении возвращает фиксированное число очков. /// При совпадении возвращает фиксированное число очков.
/// </summary> /// </summary>
[CreateAssetMenu(fileName = "FullHouseCategory", menuName = "YachtDice/Categories/Full House")] [CreateAssetMenu(fileName = "FullHouseCategory", menuName = "YachtDice/Categories/Full House")]
public class FullHouseCategorySO : CategoryDefinitionSO public class FullHouseCategory : CategoryDefinition
{ {
[Header("Scoring")] [Header("Scoring")]
[Tooltip("Фиксированное число очков за фулл-хаус")] [Tooltip("Фиксированное число очков за фулл-хаус")]
@@ -22,9 +22,9 @@ namespace YachtDice.Categories
} }
#if UNITY_EDITOR #if UNITY_EDITOR
public static FullHouseCategorySO CreateForTest(string id, string displayName, int score = 25) public static FullHouseCategory CreateForTest(string id, string displayName, int score = 25)
{ {
var so = CreateInstance<FullHouseCategorySO>(); var so = CreateInstance<FullHouseCategory>();
so.SetTestData(id, displayName); so.SetTestData(id, displayName);
so.fixedScore = score; so.fixedScore = score;
return so; return so;
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 5fbe9492ec44ebb4da7074b0719b3eda
@@ -10,7 +10,7 @@ namespace YachtDice.Categories
/// Используется для Тройки (3, сумма), Каре (4, сумма), Яхты (5, fixed=50). /// Используется для Тройки (3, сумма), Каре (4, сумма), Яхты (5, fixed=50).
/// </summary> /// </summary>
[CreateAssetMenu(fileName = "NOfAKindCategory", menuName = "YachtDice/Categories/N Of A Kind")] [CreateAssetMenu(fileName = "NOfAKindCategory", menuName = "YachtDice/Categories/N Of A Kind")]
public class NOfAKindCategorySO : CategoryDefinitionSO public class NOfAKindCategory : CategoryDefinition
{ {
[Header("Scoring")] [Header("Scoring")]
[Tooltip("Сколько одинаковых дайсов требуется")] [Tooltip("Сколько одинаковых дайсов требуется")]
@@ -33,9 +33,9 @@ namespace YachtDice.Categories
} }
#if UNITY_EDITOR #if UNITY_EDITOR
public static NOfAKindCategorySO CreateForTest(string id, string displayName, int count, bool fixedScoreMode = false, int score = 0) public static NOfAKindCategory CreateForTest(string id, string displayName, int count, bool fixedScoreMode = false, int score = 0)
{ {
var so = CreateInstance<NOfAKindCategorySO>(); var so = CreateInstance<NOfAKindCategory>();
so.SetTestData(id, displayName); so.SetTestData(id, displayName);
so.requiredCount = count; so.requiredCount = count;
so.useFixedScore = fixedScoreMode; so.useFixedScore = fixedScoreMode;
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 3a4bac360359f3847a088d18e67b5c8b
@@ -10,7 +10,7 @@ namespace YachtDice.Categories
/// Малый стрит: runLength=4, fixedScore=30. Большой стрит: runLength=5, fixedScore=40. /// Малый стрит: runLength=4, fixedScore=30. Большой стрит: runLength=5, fixedScore=40.
/// </summary> /// </summary>
[CreateAssetMenu(fileName = "StraightCategory", menuName = "YachtDice/Categories/Straight")] [CreateAssetMenu(fileName = "StraightCategory", menuName = "YachtDice/Categories/Straight")]
public class StraightCategorySO : CategoryDefinitionSO public class StraightCategory : CategoryDefinition
{ {
[Header("Scoring")] [Header("Scoring")]
[Tooltip("Требуемая длина последовательности")] [Tooltip("Требуемая длина последовательности")]
@@ -26,9 +26,9 @@ namespace YachtDice.Categories
} }
#if UNITY_EDITOR #if UNITY_EDITOR
public static StraightCategorySO CreateForTest(string id, string displayName, int run, int score) public static StraightCategory CreateForTest(string id, string displayName, int run, int score)
{ {
var so = CreateInstance<StraightCategorySO>(); var so = CreateInstance<StraightCategory>();
so.SetTestData(id, displayName); so.SetTestData(id, displayName);
so.runLength = run; so.runLength = run;
so.fixedScore = score; so.fixedScore = score;
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 7f267a540d10bec4b91f1b9c1173257b
@@ -8,7 +8,7 @@ namespace YachtDice.Categories
/// Категория «Шанс»: суммирует все дайсы без условий. /// Категория «Шанс»: суммирует все дайсы без условий.
/// </summary> /// </summary>
[CreateAssetMenu(fileName = "SumAllCategory", menuName = "YachtDice/Categories/Sum All (Chance)")] [CreateAssetMenu(fileName = "SumAllCategory", menuName = "YachtDice/Categories/Sum All (Chance)")]
public class SumAllCategorySO : CategoryDefinitionSO public class SumAllCategory : CategoryDefinition
{ {
public override int Calculate(IReadOnlyList<IDie> dice) public override int Calculate(IReadOnlyList<IDie> dice)
{ {
@@ -19,9 +19,9 @@ namespace YachtDice.Categories
} }
#if UNITY_EDITOR #if UNITY_EDITOR
public static SumAllCategorySO CreateForTest(string id, string displayName) public static SumAllCategory CreateForTest(string id, string displayName)
{ {
var so = CreateInstance<SumAllCategorySO>(); var so = CreateInstance<SumAllCategory>();
so.SetTestData(id, displayName); so.SetTestData(id, displayName);
return so; return so;
} }
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: aeb4a3033474e7c4b945a3c5a71df067
@@ -9,7 +9,7 @@ namespace YachtDice.Categories
/// Используется для Единиц (1), Двоек (2), ... Шестёрок (6). /// Используется для Единиц (1), Двоек (2), ... Шестёрок (6).
/// </summary> /// </summary>
[CreateAssetMenu(fileName = "SumOfValueCategory", menuName = "YachtDice/Categories/Sum Of Value")] [CreateAssetMenu(fileName = "SumOfValueCategory", menuName = "YachtDice/Categories/Sum Of Value")]
public class SumOfValueCategorySO : CategoryDefinitionSO public class SumOfValueCategory : CategoryDefinition
{ {
[Header("Scoring")] [Header("Scoring")]
[Tooltip("Значение грани для суммирования (1-6)")] [Tooltip("Значение грани для суммирования (1-6)")]
@@ -26,9 +26,9 @@ namespace YachtDice.Categories
} }
#if UNITY_EDITOR #if UNITY_EDITOR
public static SumOfValueCategorySO CreateForTest(string id, string displayName, int target) public static SumOfValueCategory CreateForTest(string id, string displayName, int target)
{ {
var so = CreateInstance<SumOfValueCategorySO>(); var so = CreateInstance<SumOfValueCategory>();
so.SetTestData(id, displayName, upperSection: true); so.SetTestData(id, displayName, upperSection: true);
so.targetValue = target; so.targetValue = target;
return so; return so;
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: cdb02f59d2ac5894f9f28d4547d3d941
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: aa749c160e90ff54ea903f977051f51d
+1 -1
View File
@@ -15,7 +15,7 @@ namespace YachtDice.DI
public class GameLifetimeScope : LifetimeScope public class GameLifetimeScope : LifetimeScope
{ {
[SerializeField] private ModifierCatalogSO modifierCatalog; [SerializeField] private ModifierCatalogSO modifierCatalog;
[SerializeField] private CategoryCatalogSO categoryCatalog; [SerializeField] private CategoryCatalog categoryCatalog;
[Header("Scene References")] [Header("Scene References")]
[SerializeField] private ScoringSystem scoringSystem; [SerializeField] private ScoringSystem scoringSystem;
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: c9db7c202fb40af469cc815db88f1ad6
+2
View File
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 6ce67a0ca086c084da281c1c3ff97d5f
+2
View File
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: a0df5b1c4a22d7744bcdde17cd09463e
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: c05eaecc1af5cb34aa0cde534039784d
+2 -2
View File
@@ -23,7 +23,7 @@ namespace YachtDice.Game
public event Action<int> OnTurnStarted; public event Action<int> OnTurnStarted;
public event Action<int> OnRollComplete; public event Action<int> OnRollComplete;
public event Action<CategoryDefinitionSO, int> OnScored; public event Action<CategoryDefinition, int> OnScored;
public event Action<int> OnGameOver; public event Action<int> OnGameOver;
private void Start() private void Start()
@@ -76,7 +76,7 @@ namespace YachtDice.Game
Debug.Log($"Dice {index + 1} (value={diceManager.GetValue(index)}): {(isLocked ? "LOCKED" : "UNLOCKED")}"); Debug.Log($"Dice {index + 1} (value={diceManager.GetValue(index)}): {(isLocked ? "LOCKED" : "UNLOCKED")}");
} }
public void ScoreInCategory(CategoryDefinitionSO category) public void ScoreInCategory(CategoryDefinition category)
{ {
if (!CanScore) return; if (!CanScore) return;
if (scoringSystem.IsCategoryUsed(category)) return; if (scoringSystem.IsCategoryUsed(category)) return;
@@ -74,7 +74,7 @@ namespace YachtDice.Inventory
RefreshView(); RefreshView();
} }
private void HandleCategoryConfirmed(CategoryDefinitionSO category, ScoreResult result) private void HandleCategoryConfirmed(CategoryDefinition category, ScoreResult result)
{ {
model.ConsumeUseOnActive(); model.ConsumeUseOnActive();
} }
@@ -9,7 +9,7 @@ namespace YachtDice.Modifiers.Conditions
[CreateAssetMenu(fileName = "CategoryCondition", menuName = "YachtDice/Modifiers/Conditions/Category")] [CreateAssetMenu(fileName = "CategoryCondition", menuName = "YachtDice/Modifiers/Conditions/Category")]
public class CategoryCondition : ConditionSO public class CategoryCondition : ConditionSO
{ {
[SerializeField] private CategoryDefinitionSO requiredCategory; [SerializeField] private CategoryDefinition requiredCategory;
public override bool Evaluate(ModifierContext context, ModifierInstance instance) public override bool Evaluate(ModifierContext context, ModifierInstance instance)
{ {
@@ -17,7 +17,7 @@ namespace YachtDice.Modifiers.Conditions
} }
#if UNITY_EDITOR #if UNITY_EDITOR
public static CategoryCondition CreateForTest(CategoryDefinitionSO category) public static CategoryCondition CreateForTest(CategoryDefinition category)
{ {
var so = CreateInstance<CategoryCondition>(); var so = CreateInstance<CategoryCondition>();
so.requiredCategory = category; so.requiredCategory = category;
@@ -22,7 +22,7 @@ namespace YachtDice.Modifiers.Core
public int[] DiceValues; public int[] DiceValues;
/// <summary>Категория, в которую записывается результат.</summary> /// <summary>Категория, в которую записывается результат.</summary>
public CategoryDefinitionSO Category; public CategoryDefinition Category;
// Game state (read-only snapshot) // Game state (read-only snapshot)
public int CurrentRoll; public int CurrentRoll;
@@ -56,7 +56,7 @@ namespace YachtDice.Modifiers.Core
public static ModifierContext CreateForScoring( public static ModifierContext CreateForScoring(
int baseScore, int baseScore,
IReadOnlyList<IDie> dice, IReadOnlyList<IDie> dice,
CategoryDefinitionSO category, CategoryDefinition category,
int currentRoll, int currentRoll,
int currentTurn, int currentTurn,
int playerCurrency, int playerCurrency,
+2 -2
View File
@@ -13,11 +13,11 @@ namespace YachtDice.Scoring
public int FlatBonus; public int FlatBonus;
public float Multiplier; public float Multiplier;
public int[] DiceValues; public int[] DiceValues;
public CategoryDefinitionSO Category; public CategoryDefinition Category;
public int FinalScore => Mathf.FloorToInt((BaseScore + FlatBonus) * Multiplier); public int FinalScore => Mathf.FloorToInt((BaseScore + FlatBonus) * Multiplier);
public static ScoreResult Create(int baseScore, IReadOnlyList<IDie> dice, CategoryDefinitionSO category) public static ScoreResult Create(int baseScore, IReadOnlyList<IDie> dice, CategoryDefinition category)
{ {
return new ScoreResult return new ScoreResult
{ {
+12 -12
View File
@@ -13,30 +13,30 @@ namespace YachtDice.Scoring
{ {
public class ScoringSystem : MonoBehaviour public class ScoringSystem : MonoBehaviour
{ {
public event Action<CategoryDefinitionSO, int> OnCategoryScored; public event Action<CategoryDefinition, int> OnCategoryScored;
public event Action<int> OnAllCategoriesScored; public event Action<int> OnAllCategoriesScored;
public event Action<CategoryDefinitionSO, ScoreResult> OnCategoryConfirmed; public event Action<CategoryDefinition, ScoreResult> OnCategoryConfirmed;
private readonly Dictionary<CategoryDefinitionSO, int> scorecard = new(); private readonly Dictionary<CategoryDefinition, int> scorecard = new();
private readonly HashSet<CategoryDefinitionSO> usedCategories = new(); private readonly HashSet<CategoryDefinition> usedCategories = new();
private GameEventBus eventBus; private GameEventBus eventBus;
private ModifierRegistry modifierRegistry; private ModifierRegistry modifierRegistry;
private CategoryCatalogSO catalog; private CategoryCatalog catalog;
[Inject] [Inject]
public void Construct(GameEventBus eventBus, ModifierRegistry modifierRegistry, CategoryCatalogSO catalog) public void Construct(GameEventBus eventBus, ModifierRegistry modifierRegistry, CategoryCatalog catalog)
{ {
this.eventBus = eventBus; this.eventBus = eventBus;
this.modifierRegistry = modifierRegistry; this.modifierRegistry = modifierRegistry;
this.catalog = catalog; this.catalog = catalog;
} }
public CategoryCatalogSO Catalog => catalog; public CategoryCatalog Catalog => catalog;
public bool IsCategoryUsed(CategoryDefinitionSO category) => usedCategories.Contains(category); public bool IsCategoryUsed(CategoryDefinition category) => usedCategories.Contains(category);
public int GetCategoryScore(CategoryDefinitionSO category) public int GetCategoryScore(CategoryDefinition category)
{ {
return scorecard.TryGetValue(category, out int score) ? score : -1; return scorecard.TryGetValue(category, out int score) ? score : -1;
} }
@@ -57,7 +57,7 @@ namespace YachtDice.Scoring
public bool IsComplete => CategoriesFilledCount >= TotalCategoryCount; public bool IsComplete => CategoriesFilledCount >= TotalCategoryCount;
public ScoreResult PreviewScore(IReadOnlyList<IDie> dice, CategoryDefinitionSO category, public ScoreResult PreviewScore(IReadOnlyList<IDie> dice, CategoryDefinition category,
int currentRoll = 0, int currentTurn = 0, int playerCurrency = 0) int currentRoll = 0, int currentTurn = 0, int playerCurrency = 0)
{ {
int baseScore = category.Calculate(dice); int baseScore = category.Calculate(dice);
@@ -75,7 +75,7 @@ namespace YachtDice.Scoring
return context.ToScoreResult(); return context.ToScoreResult();
} }
public async UniTask<ScoreResult> ScoreCategoryAsync(IReadOnlyList<IDie> dice, CategoryDefinitionSO category, public async UniTask<ScoreResult> ScoreCategoryAsync(IReadOnlyList<IDie> dice, CategoryDefinition category,
int currentRoll, int currentTurn, int playerCurrency) int currentRoll, int currentTurn, int playerCurrency)
{ {
if (usedCategories.Contains(category)) if (usedCategories.Contains(category))
@@ -118,7 +118,7 @@ namespace YachtDice.Scoring
return result; return result;
} }
public ScoreResult ScoreCategory(IReadOnlyList<IDie> dice, CategoryDefinitionSO category) public ScoreResult ScoreCategory(IReadOnlyList<IDie> dice, CategoryDefinition category)
{ {
if (usedCategories.Contains(category)) if (usedCategories.Contains(category))
throw new InvalidOperationException($"Category {category.DisplayName} has already been scored."); throw new InvalidOperationException($"Category {category.DisplayName} has already been scored.");
@@ -11,12 +11,12 @@ namespace YachtDice.Tests
{ {
public class ModifierEffectTests public class ModifierEffectTests
{ {
private CategoryDefinitionSO testCategory; private CategoryDefinition testCategory;
[SetUp] [SetUp]
public void SetUp() public void SetUp()
{ {
testCategory = SumAllCategorySO.CreateForTest("chance", "Шанс"); testCategory = SumAllCategory.CreateForTest("chance", "Шанс");
} }
[TearDown] [TearDown]
@@ -18,12 +18,12 @@ namespace YachtDice.Tests
private ModifierPipeline pipeline; private ModifierPipeline pipeline;
// Тестовые категории // Тестовые категории
private CategoryDefinitionSO chanceCategory; private CategoryDefinition chanceCategory;
private CategoryDefinitionSO fullHouseCategory; private CategoryDefinition fullHouseCategory;
private CategoryDefinitionSO onesCategory; private CategoryDefinition onesCategory;
private CategoryDefinitionSO threesCategory; private CategoryDefinition threesCategory;
private CategoryDefinitionSO foursCategory; private CategoryDefinition foursCategory;
private CategoryDefinitionSO sixesCategory; private CategoryDefinition sixesCategory;
[SetUp] [SetUp]
public void SetUp() public void SetUp()
@@ -32,12 +32,12 @@ namespace YachtDice.Tests
pipeline = new ModifierPipeline(registry); pipeline = new ModifierPipeline(registry);
pipeline.TracingEnabled = false; pipeline.TracingEnabled = false;
chanceCategory = SumAllCategorySO.CreateForTest("chance", "Шанс"); chanceCategory = SumAllCategory.CreateForTest("chance", "Шанс");
fullHouseCategory = FullHouseCategorySO.CreateForTest("full_house", "Фулл-хаус"); fullHouseCategory = FullHouseCategory.CreateForTest("full_house", "Фулл-хаус");
onesCategory = SumOfValueCategorySO.CreateForTest("ones", "Единицы", 1); onesCategory = SumOfValueCategory.CreateForTest("ones", "Единицы", 1);
threesCategory = SumOfValueCategorySO.CreateForTest("threes", "Тройки", 3); threesCategory = SumOfValueCategory.CreateForTest("threes", "Тройки", 3);
foursCategory = SumOfValueCategorySO.CreateForTest("fours", "Четвёрки", 4); foursCategory = SumOfValueCategory.CreateForTest("fours", "Четвёрки", 4);
sixesCategory = SumOfValueCategorySO.CreateForTest("sixes", "Шестёрки", 6); sixesCategory = SumOfValueCategory.CreateForTest("sixes", "Шестёрки", 6);
} }
[TearDown] [TearDown]
@@ -67,7 +67,7 @@ namespace YachtDice.Tests
registry.TryActivate(inst); registry.TryActivate(inst);
} }
private ModifierContext CreateScoringContext(int baseScore, int[] dice, CategoryDefinitionSO category) private ModifierContext CreateScoringContext(int baseScore, int[] dice, CategoryDefinition category)
{ {
return new ModifierContext return new ModifierContext
{ {
@@ -9,11 +9,11 @@ namespace YachtDice.Tests
{ {
public class ScoringSystemTests public class ScoringSystemTests
{ {
private CategoryDefinitionSO yachtCategory; private CategoryDefinition yachtCategory;
private CategoryDefinitionSO onesCategory; private CategoryDefinition onesCategory;
private CategoryDefinitionSO twosCategory; private CategoryDefinition twosCategory;
private CategoryDefinitionSO chanceCategory; private CategoryDefinition chanceCategory;
private CategoryCatalogSO catalog; private CategoryCatalog catalog;
private DieDefinitionSO standardDie; private DieDefinitionSO standardDie;
[SetUp] [SetUp]
@@ -21,12 +21,12 @@ namespace YachtDice.Tests
{ {
standardDie = DieDefinitionSO.CreateForTest<StandardDieSO>("d6", "d6"); standardDie = DieDefinitionSO.CreateForTest<StandardDieSO>("d6", "d6");
yachtCategory = NOfAKindCategorySO.CreateForTest("yacht", "Яхта", 5, fixedScoreMode: true, score: 50); yachtCategory = NOfAKindCategory.CreateForTest("yacht", "Яхта", 5, fixedScoreMode: true, score: 50);
onesCategory = SumOfValueCategorySO.CreateForTest("ones", "Единицы", 1); onesCategory = SumOfValueCategory.CreateForTest("ones", "Единицы", 1);
twosCategory = SumOfValueCategorySO.CreateForTest("twos", "Двойки", 2); twosCategory = SumOfValueCategory.CreateForTest("twos", "Двойки", 2);
chanceCategory = SumAllCategorySO.CreateForTest("chance", "Шанс"); chanceCategory = SumAllCategory.CreateForTest("chance", "Шанс");
catalog = CategoryCatalogSO.CreateForTest(new List<CategoryDefinitionSO> catalog = CategoryCatalog.CreateForTest(new List<CategoryDefinition>
{ {
onesCategory, twosCategory, yachtCategory, chanceCategory onesCategory, twosCategory, yachtCategory, chanceCategory
}); });
@@ -77,7 +77,7 @@ namespace YachtDice.Tests
public void ScoreCategory_FiresOnCategoryConfirmed() public void ScoreCategory_FiresOnCategoryConfirmed()
{ {
var system = CreateScoringSystem(); var system = CreateScoringSystem();
CategoryDefinitionSO firedCategory = null; CategoryDefinition firedCategory = null;
ScoreResult firedResult = default; ScoreResult firedResult = default;
system.OnCategoryConfirmed += (cat, res) => system.OnCategoryConfirmed += (cat, res) =>
@@ -144,7 +144,7 @@ namespace YachtDice.Tests
public void SumOfValueCategory_SumsCorrectly() public void SumOfValueCategory_SumsCorrectly()
{ {
var dice = CreateDice(3, 3, 3, 1, 2); var dice = CreateDice(3, 3, 3, 1, 2);
var cat = SumOfValueCategorySO.CreateForTest("threes", "Тройки", 3); var cat = SumOfValueCategory.CreateForTest("threes", "Тройки", 3);
Assert.AreEqual(9, cat.Calculate(dice)); Assert.AreEqual(9, cat.Calculate(dice));
@@ -154,7 +154,7 @@ namespace YachtDice.Tests
[Test] [Test]
public void NOfAKindCategory_ThreeOfAKind_ReturnsSumOrZero() public void NOfAKindCategory_ThreeOfAKind_ReturnsSumOrZero()
{ {
var cat = NOfAKindCategorySO.CreateForTest("three_of_a_kind", "Тройка", 3); var cat = NOfAKindCategory.CreateForTest("three_of_a_kind", "Тройка", 3);
Assert.AreEqual(17, cat.Calculate(CreateDice(4, 4, 4, 3, 2))); // sum = 17 Assert.AreEqual(17, cat.Calculate(CreateDice(4, 4, 4, 3, 2))); // sum = 17
Assert.AreEqual(0, cat.Calculate(CreateDice(1, 2, 3, 4, 5))); // no 3-of-a-kind Assert.AreEqual(0, cat.Calculate(CreateDice(1, 2, 3, 4, 5))); // no 3-of-a-kind
@@ -172,7 +172,7 @@ namespace YachtDice.Tests
[Test] [Test]
public void FullHouseCategory_CalculatesCorrectly() public void FullHouseCategory_CalculatesCorrectly()
{ {
var cat = FullHouseCategorySO.CreateForTest("fh", "Фулл-хаус", 25); var cat = FullHouseCategory.CreateForTest("fh", "Фулл-хаус", 25);
Assert.AreEqual(25, cat.Calculate(CreateDice(3, 3, 3, 2, 2))); Assert.AreEqual(25, cat.Calculate(CreateDice(3, 3, 3, 2, 2)));
Assert.AreEqual(0, cat.Calculate(CreateDice(3, 3, 3, 3, 2))); Assert.AreEqual(0, cat.Calculate(CreateDice(3, 3, 3, 3, 2)));
@@ -183,7 +183,7 @@ namespace YachtDice.Tests
[Test] [Test]
public void StraightCategory_SmallStraight() public void StraightCategory_SmallStraight()
{ {
var cat = StraightCategorySO.CreateForTest("ss", "Малый стрит", 4, 30); var cat = StraightCategory.CreateForTest("ss", "Малый стрит", 4, 30);
Assert.AreEqual(30, cat.Calculate(CreateDice(1, 2, 3, 4, 6))); Assert.AreEqual(30, cat.Calculate(CreateDice(1, 2, 3, 4, 6)));
Assert.AreEqual(0, cat.Calculate(CreateDice(1, 2, 3, 5, 6))); Assert.AreEqual(0, cat.Calculate(CreateDice(1, 2, 3, 5, 6)));
@@ -194,7 +194,7 @@ namespace YachtDice.Tests
[Test] [Test]
public void StraightCategory_LargeStraight() public void StraightCategory_LargeStraight()
{ {
var cat = StraightCategorySO.CreateForTest("ls", "Большой стрит", 5, 40); var cat = StraightCategory.CreateForTest("ls", "Большой стрит", 5, 40);
Assert.AreEqual(40, cat.Calculate(CreateDice(1, 2, 3, 4, 5))); Assert.AreEqual(40, cat.Calculate(CreateDice(1, 2, 3, 4, 5)));
Assert.AreEqual(40, cat.Calculate(CreateDice(2, 3, 4, 5, 6))); Assert.AreEqual(40, cat.Calculate(CreateDice(2, 3, 4, 5, 6)));
+3 -3
View File
@@ -21,12 +21,12 @@ namespace YachtDice.UI
[SerializeField] private Color previewPositiveColor = new Color(0.85f, 1f, 0.85f, 1f); [SerializeField] private Color previewPositiveColor = new Color(0.85f, 1f, 0.85f, 1f);
[SerializeField] private Color previewZeroColor = new Color(1f, 0.88f, 0.88f, 1f); [SerializeField] private Color previewZeroColor = new Color(1f, 0.88f, 0.88f, 1f);
private CategoryDefinitionSO category; private CategoryDefinition category;
private bool isUsed; private bool isUsed;
public event Action<CategoryDefinitionSO> OnCategorySelected; public event Action<CategoryDefinition> OnCategorySelected;
public void Initialize(CategoryDefinitionSO categoryDef) public void Initialize(CategoryDefinition categoryDef)
{ {
category = categoryDef; category = categoryDef;
isUsed = false; isUsed = false;
+5 -5
View File
@@ -39,12 +39,12 @@ namespace YachtDice.UI
private const int UpperBonusValue = 35; private const int UpperBonusValue = 35;
private ModifierRegistry modifierRegistry; private ModifierRegistry modifierRegistry;
private CategoryCatalogSO categoryCatalog; private CategoryCatalog categoryCatalog;
private InventoryModel inventoryModel; private InventoryModel inventoryModel;
private ShopModel shopModel; private ShopModel shopModel;
[Inject] [Inject]
public void Construct(ModifierRegistry modifierRegistry, CategoryCatalogSO categoryCatalog) public void Construct(ModifierRegistry modifierRegistry, CategoryCatalog categoryCatalog)
{ {
this.modifierRegistry = modifierRegistry; this.modifierRegistry = modifierRegistry;
this.categoryCatalog = categoryCatalog; this.categoryCatalog = categoryCatalog;
@@ -217,7 +217,7 @@ namespace YachtDice.UI
dicePanelView.SetDieValue(index, value); dicePanelView.SetDieValue(index, value);
} }
private void HandleScored(CategoryDefinitionSO category, int finalScore) private void HandleScored(CategoryDefinition category, int finalScore)
{ {
scoreCardView.SetCategoryScored(category, finalScore); scoreCardView.SetCategoryScored(category, finalScore);
UpdateTotalDisplay(); UpdateTotalDisplay();
@@ -259,7 +259,7 @@ namespace YachtDice.UI
dicePanelView.SetDieLocked(index, isLocked); dicePanelView.SetDieLocked(index, isLocked);
} }
private void HandleCategorySelected(CategoryDefinitionSO category) private void HandleCategorySelected(CategoryDefinition category)
{ {
if (!gameManager.CanScore) return; if (!gameManager.CanScore) return;
if (scoringSystem.IsCategoryUsed(category)) return; if (scoringSystem.IsCategoryUsed(category)) return;
@@ -317,7 +317,7 @@ namespace YachtDice.UI
private void UpdatePreviewScores() private void UpdatePreviewScores()
{ {
var dice = diceManager.GetDice(); var dice = diceManager.GetDice();
var previews = new Dictionary<CategoryDefinitionSO, int>(); var previews = new Dictionary<CategoryDefinition, int>();
var allCategories = categoryCatalog.All; var allCategories = categoryCatalog.All;
for (int i = 0; i < allCategories.Count; i++) for (int i = 0; i < allCategories.Count; i++)
+8 -8
View File
@@ -16,19 +16,19 @@ namespace YachtDice.UI
[SerializeField] private TMP_Text upperBonusText; [SerializeField] private TMP_Text upperBonusText;
[SerializeField] private TMP_Text totalScoreText; [SerializeField] private TMP_Text totalScoreText;
public event Action<CategoryDefinitionSO> OnCategorySelected; public event Action<CategoryDefinition> OnCategorySelected;
private CategoryCatalogSO catalog; private CategoryCatalog catalog;
private Dictionary<CategoryDefinitionSO, int> categoryToRowIndex; private Dictionary<CategoryDefinition, int> categoryToRowIndex;
/// <summary> /// <summary>
/// Инициализирует скоркарту из каталога категорий. /// Инициализирует скоркарту из каталога категорий.
/// Вызывается из GameController после DI. /// Вызывается из GameController после DI.
/// </summary> /// </summary>
public void Initialize(CategoryCatalogSO categoryCatalog) public void Initialize(CategoryCatalog categoryCatalog)
{ {
catalog = categoryCatalog; catalog = categoryCatalog;
categoryToRowIndex = new Dictionary<CategoryDefinitionSO, int>(); categoryToRowIndex = new Dictionary<CategoryDefinition, int>();
var all = catalog.All; var all = catalog.All;
int count = Mathf.Min(categoryRows.Count, all.Count); int count = Mathf.Min(categoryRows.Count, all.Count);
@@ -43,7 +43,7 @@ namespace YachtDice.UI
UpdateTotalDisplay(0, 0, false); UpdateTotalDisplay(0, 0, false);
} }
public void UpdatePreviews(Dictionary<CategoryDefinitionSO, int> previews) public void UpdatePreviews(Dictionary<CategoryDefinition, int> previews)
{ {
foreach (var kvp in previews) foreach (var kvp in previews)
{ {
@@ -64,7 +64,7 @@ namespace YachtDice.UI
} }
} }
public void SetCategoryScored(CategoryDefinitionSO category, int score) public void SetCategoryScored(CategoryDefinition category, int score)
{ {
if (categoryToRowIndex.TryGetValue(category, out int index)) if (categoryToRowIndex.TryGetValue(category, out int index))
categoryRows[index].SetRecordedScore(score); categoryRows[index].SetRecordedScore(score);
@@ -91,7 +91,7 @@ namespace YachtDice.UI
UpdateTotalDisplay(0, 0, false); UpdateTotalDisplay(0, 0, false);
} }
private void HandleCategorySelected(CategoryDefinitionSO category) private void HandleCategorySelected(CategoryDefinition category)
{ {
OnCategorySelected?.Invoke(category); OnCategorySelected?.Invoke(category);
} }