using System.Collections.Generic; using UnityEngine; using YachtDice.Categories; using YachtDice.Dice; using YachtDice.Modifiers.Runtime; using YachtDice.Scoring; namespace YachtDice.Modifiers.Core { public class ModifierContext { // Scoring data public int BaseScore; public int FlatBonus; public float Multiplier = 1f; public float PostMultiplier = 1f; /// Абстрактные дайсы (основной API). public IReadOnlyList Dice; /// Значения дайсов (обратная совместимость с существующими модификаторами). public int[] DiceValues; /// Категория, в которую записывается результат. public CategoryDefinition Category; // Game state (read-only snapshot) public int CurrentRoll; public int CurrentTurn; public int PlayerCurrency; public IReadOnlyList AllActiveModifiers; // Trigger info public TriggerType Trigger; // Side-effect accumulators public int CurrencyDelta; // Debug trace (populated when tracing is enabled) public List DebugLog; public int FinalScore => Mathf.FloorToInt((BaseScore + FlatBonus) * Multiplier * PostMultiplier); public ScoreResult ToScoreResult() { return new ScoreResult { baseScore = BaseScore, flatBonus = FlatBonus, multiplier = Multiplier * PostMultiplier, diceValues = DiceValues, category = Category, }; } public static ModifierContext CreateForScoring( int baseScore, IReadOnlyList dice, CategoryDefinition category, int currentRoll, int currentTurn, int playerCurrency, IReadOnlyList activeModifiers) { return new ModifierContext { BaseScore = baseScore, Dice = dice, DiceValues = DiceCheckUtility.ExtractValues(dice), Category = category, CurrentRoll = currentRoll, CurrentTurn = currentTurn, PlayerCurrency = playerCurrency, AllActiveModifiers = activeModifiers, }; } } }