using System.Collections.Generic; using UnityEngine; namespace Colosseum.Passives { /// /// 패시브 트리의 단일 노드 데이터입니다. /// [CreateAssetMenu(fileName = "PassiveNode", menuName = "Colosseum/Passives/Passive Node")] public class PassiveNodeData : ScriptableObject { [Header("기본 정보")] [SerializeField] private string nodeId; [SerializeField] private string displayName; [TextArea(2, 4)] [SerializeField] private string description; [SerializeField] private PassiveNodeBranch branch = PassiveNodeBranch.Common; [SerializeField] private PassiveNodeKind nodeKind = PassiveNodeKind.Axis; [SerializeField] private PassiveAxisMask axisMask = PassiveAxisMask.None; [Min(0)] [SerializeField] private int tier = 0; [Min(0)] [SerializeField] private int cost = 1; [Header("트리 레이아웃")] [Tooltip("트리 그래프 안에서 사용할 정규화 좌표 (-1 ~ 1 권장)")] [SerializeField] private Vector2 layoutPosition = Vector2.zero; [Header("연결 정보")] [SerializeField] private List prerequisiteNodes = new(); [SerializeField] private List connectedNodes = new(); [Header("효과")] [SerializeField] private List effects = new(); public string NodeId => nodeId; public string DisplayName => displayName; public string Description => description; public PassiveNodeBranch Branch => branch; public PassiveNodeKind NodeKind => nodeKind; public PassiveAxisMask AxisMask => axisMask; public int Tier => tier; public int Cost => cost; public Vector2 LayoutPosition => layoutPosition; public IReadOnlyList PrerequisiteNodes => prerequisiteNodes; public IReadOnlyList ConnectedNodes => connectedNodes; public IReadOnlyList Effects => effects; private void OnValidate() { if (string.IsNullOrWhiteSpace(nodeId)) { nodeId = name; } if (axisMask == PassiveAxisMask.None) { axisMask = branch switch { PassiveNodeBranch.Attack => PassiveAxisMask.Attack, PassiveNodeBranch.Defense => PassiveAxisMask.Defense, PassiveNodeBranch.Support => PassiveAxisMask.Support, _ => PassiveAxisMask.None, }; } } } }