using UnityEngine; using Colosseum.Passives; namespace Colosseum.Combat.Simulation { /// /// 전수 점검용 조합 생성 조건입니다. /// [System.Serializable] public class SimulationCombinationSpec { [Header("Label")] [SerializeField] private string batchName = "전체 조합"; [Header("Dimensions")] [SerializeField] private bool combineSkills = true; [SerializeField] private bool combineGems = true; [SerializeField] private bool combinePassives = true; [Header("Slots")] [Tooltip("조합 생성 대상 슬롯 인덱스입니다. 0 기반입니다.")] [SerializeField] private int[] activeSlotIndices = new[] { 0, 1, 2, 3, 4, 5 }; [SerializeField] private bool allowDuplicateSkills; [SerializeField] private bool includeEmptyGemSet = true; [Header("Passive")] [SerializeField] private PassiveTreeData passiveTree; [SerializeField] private bool includeEmptyPassiveSelection = true; [Tooltip("0이면 포인트 허용 범위 안에서 제한 없이 생성합니다.")] [Min(0)] [SerializeField] private int maxPassiveNodeCount = 0; [Header("Safety")] [Tooltip("생성할 최대 빌드 수입니다. 조합 폭발을 막기 위한 안전장치입니다.")] [Min(1)] [SerializeField] private int maxBuildCount = 500; public string BatchName => string.IsNullOrWhiteSpace(batchName) ? "전체 조합" : batchName.Trim(); public bool CombineSkills => combineSkills; public bool CombineGems => combineGems; public bool CombinePassives => combinePassives; public int[] ActiveSlotIndices => activeSlotIndices ?? System.Array.Empty(); public bool AllowDuplicateSkills => allowDuplicateSkills; public bool IncludeEmptyGemSet => includeEmptyGemSet; public PassiveTreeData PassiveTree => passiveTree; public bool IncludeEmptyPassiveSelection => includeEmptyPassiveSelection; public int MaxPassiveNodeCount => Mathf.Max(0, maxPassiveNodeCount); public int MaxBuildCount => Mathf.Max(1, maxBuildCount); /// /// 조합 생성 조건을 한 번에 설정합니다. /// public void Configure( string batchName, bool combineSkills, bool combineGems, bool combinePassives, int[] activeSlotIndices, bool allowDuplicateSkills, bool includeEmptyGemSet, PassiveTreeData passiveTree, bool includeEmptyPassiveSelection, int maxPassiveNodeCount, int maxBuildCount) { this.batchName = batchName ?? string.Empty; this.combineSkills = combineSkills; this.combineGems = combineGems; this.combinePassives = combinePassives; this.activeSlotIndices = activeSlotIndices ?? System.Array.Empty(); this.allowDuplicateSkills = allowDuplicateSkills; this.includeEmptyGemSet = includeEmptyGemSet; this.passiveTree = passiveTree; this.includeEmptyPassiveSelection = includeEmptyPassiveSelection; this.maxPassiveNodeCount = Mathf.Max(0, maxPassiveNodeCount); this.maxBuildCount = Mathf.Max(1, maxBuildCount); } } }