using System.Collections.Generic; using UnityEngine; 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; public int[] DiceValues; public YachtCategory 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, int[] diceValues, YachtCategory category, int currentRoll, int currentTurn, int playerCurrency, IReadOnlyList activeModifiers) { return new ModifierContext { BaseScore = baseScore, DiceValues = diceValues, Category = category, CurrentRoll = currentRoll, CurrentTurn = currentTurn, PlayerCurrency = playerCurrency, AllActiveModifiers = activeModifiers, }; } } }