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,
};
}
}
}