using UnityEngine; [CreateAssetMenu(fileName = "NewModifier", menuName = "YachtDice/Modifier Data")] public sealed class ModifierData : ScriptableObject { [SerializeField] private string id; [SerializeField] private string displayName; [SerializeField] [TextArea] private string description; [SerializeField] private ModifierRarity rarity; [SerializeField] private int shopPrice; [SerializeField] private int sellPrice; [SerializeField] private Sprite icon; [Header("Effect")] [SerializeField] private ModifierScope scope; [SerializeField] private ModifierEffectType effectType; [SerializeField] private ModifierTarget target; [SerializeField] private float effectValue; [Header("Durability")] [SerializeField] private ModifierDurability durability; [SerializeField] private int maxUses; public string Id => id; public string DisplayName => displayName; public string Description => description; public ModifierRarity Rarity => rarity; public int ShopPrice => shopPrice; public int SellPrice => sellPrice; public Sprite Icon => icon; public ModifierScope Scope => scope; public ModifierEffectType EffectType => effectType; public ModifierTarget Target => target; public float EffectValue => effectValue; public ModifierDurability Durability => durability; public int MaxUses => maxUses; public bool IsAdditive => effectType == ModifierEffectType.AddPerDieValue || effectType == ModifierEffectType.AddFlatToFinalScore; public bool IsMultiplicative => effectType == ModifierEffectType.MultiplyPerDieValue || effectType == ModifierEffectType.MultiplyFinalScore; public bool IsCategoryLevel => effectType == ModifierEffectType.AddPerDieValue || effectType == ModifierEffectType.MultiplyPerDieValue; public bool IsFinalScoreLevel => effectType == ModifierEffectType.AddFlatToFinalScore || effectType == ModifierEffectType.MultiplyFinalScore; #if UNITY_EDITOR public static ModifierData CreateForTest( string id, ModifierScope scope, ModifierEffectType effectType, float effectValue, int dieValue = 0, YachtCategory targetCategory = YachtCategory.Ones, bool hasCategoryFilter = false, ModifierDurability durability = ModifierDurability.Permanent, int maxUses = 0, int shopPrice = 100, int sellPrice = 50) { var data = CreateInstance(); data.id = id; data.displayName = id; data.description = id; data.scope = scope; data.effectType = effectType; data.effectValue = effectValue; data.target = new ModifierTarget { DieValue = dieValue, TargetCategory = targetCategory, HasCategoryFilter = hasCategoryFilter }; data.durability = durability; data.maxUses = maxUses; data.shopPrice = shopPrice; data.sellPrice = sellPrice; return data; } #endif }