using System; using System.Collections.Generic; using UnityEngine; namespace Colosseum.Skills { /// /// 젬의 주 역할 분류입니다. /// public enum SkillGemCategory { Common, Attack, Threat, Defense, Support, Control, Efficiency, } /// /// 젬 효과가 발동될 애니메이션 이벤트 인덱스와 효과 목록입니다. /// [Serializable] public class SkillGemTriggeredEffectEntry { [Tooltip("OnEffect(index)와 매칭되는 애니메이션 이벤트 인덱스")] [Min(0)] [SerializeField] private int triggerIndex = 0; [Tooltip("해당 인덱스에서 함께 실행할 추가 효과")] [SerializeField] private List effects = new(); public int TriggerIndex => triggerIndex; public IReadOnlyList Effects => effects; } /// /// 스킬의 기반 효과 위에 추가 동작을 덧붙이는 젬 데이터입니다. /// [CreateAssetMenu(fileName = "NewSkillGem", menuName = "Colosseum/Skill Gem")] public class SkillGemData : ScriptableObject { [Header("기본 정보")] [SerializeField] private string gemName; [TextArea(2, 4)] [SerializeField] private string description; [SerializeField] private Sprite icon; [Tooltip("젬의 주 역할 분류")] [SerializeField] private SkillGemCategory category = SkillGemCategory.Common; [Header("기본 수치 보정")] [Tooltip("장착 시 마나 비용 배율")] [Min(0f)] [SerializeField] private float manaCostMultiplier = 1f; [Tooltip("장착 시 쿨타임 배율")] [Min(0f)] [SerializeField] private float cooldownMultiplier = 1f; [Tooltip("장착 시 스킬 애니메이션 재생 속도 배율")] [Min(0.1f)] [SerializeField] private float castSpeedMultiplier = 1f; [Tooltip("기반 스킬 시전을 몇 회 더 반복할지 정의합니다. 현재는 계산/표시용으로만 사용됩니다.")] [Min(0)] [SerializeField] private int additionalRepeatCount = 0; [Header("추가 효과")] [Tooltip("시전 시작 시 즉시 발동하는 추가 효과")] [SerializeField] private List castStartEffects = new(); [Tooltip("애니메이션 이벤트 인덱스별로 발동하는 추가 효과")] [SerializeField] private List triggeredEffects = new(); public string GemName => gemName; public string Description => description; public Sprite Icon => icon; public SkillGemCategory Category => category; public float ManaCostMultiplier => manaCostMultiplier; public float CooldownMultiplier => cooldownMultiplier; public float CastSpeedMultiplier => castSpeedMultiplier; public int AdditionalRepeatCount => additionalRepeatCount; public IReadOnlyList CastStartEffects => castStartEffects; public IReadOnlyList TriggeredEffects => triggeredEffects; } }