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