using UnityEngine; // Random.Range 같은 유니티 기능을 쓰기 위해 불러올거에요 -> UnityEngine를 public class RandomStatCardInstance // 클래스를 선언할거에요 -> 랜덤 스탯 카드 1장의 동작/상태를 담당하는 RandomStatCardInstance를 { // 코드 블록을 시작할거에요 -> RandomStatCardInstance 범위를 private RandomStatCardData data; // 변수를 선언할거에요 -> 카드 데이터(가능 스탯/범위)를 담을 data를 private StatType statType; // 변수를 선언할거에요 -> 이번에 뽑힌 스탯 종류를 담을 statType을 private int value; // 변수를 선언할거에요 -> 이번에 뽑힌 수치를 담을 value를 private bool isConfirmed = false; // 변수를 선언할거에요 -> 이미 적용 확정했는지 여부를 isConfirmed에(기본 false) private Stats stats; // 변수를 선언할거에요 -> 실제 스탯을 적용할 대상(Stats)을 stats에 public RandomStatCardInstance(RandomStatCardData data, Stats stats) // 생성자를 선언할거에요 -> 데이터와 적용 대상을 받아 초기화하는 생성자를 { // 코드 블록을 시작할거에요 -> 생성자 범위를 this.data = data; // 값을 넣을거에요 -> 전달받은 data를 멤버 data에 저장 this.stats = stats; // 값을 넣을거에요 -> 전달받은 stats를 멤버 stats에 저장 } // 코드 블록을 끝낼거에요 -> 생성자를 public void RollPreview() // 함수를 선언할거에요 -> 카드 미리보기(랜덤 결과) 뽑는 RollPreview를 { // 코드 블록을 시작할거에요 -> RollPreview 범위를 statType = data.possibleStats[Random.Range(0, data.possibleStats.Length)]; // 값을 뽑을거에요 -> 가능한 스탯 중 하나를 랜덤으로 value = Random.Range(data.minValue, data.maxValue + 1); // 값을 뽑을거에요 -> min~max 범위에서 랜덤 수치를(+1은 int 상한 포함) isConfirmed = false; // 상태를 바꿀거에요 -> 아직 확정 전(false)로 } // 코드 블록을 끝낼거에요 -> RollPreview를 public string GetText() // 함수를 선언할거에요 -> UI에 보여줄 텍스트를 만드는 GetText를 { // 코드 블록을 시작할거에요 -> GetText 범위를 string sign = value >= 0 ? "+" : ""; // 값을 정할거에요 -> 양수면 + 표시, 음수면 빈 문자열로 return $"{statType} {sign}{value}"; // 문자열을 반환할거에요 -> "스탯 +값" 형태로 } // 코드 블록을 끝낼거에요 -> GetText를 public void Confirm() // 함수를 선언할거에요 -> 선택 확정 시 실제 적용하는 Confirm을 { // 코드 블록을 시작할거에요 -> Confirm 범위를 if (isConfirmed) return; // 조건이 맞으면 종료할거에요 -> 이미 확정했으면 중복 적용 방지 ApplyStat(); // 함수를 실행할거에요 -> 뽑힌 스탯을 실제로 적용 isConfirmed = true; // 상태를 바꿀거에요 -> 이제 확정 완료(true)로 } // 코드 블록을 끝낼거에요 -> Confirm을 private void ApplyStat() // 함수를 선언할거에요 -> 스탯 적용 로직을 처리하는 ApplyStat을 { // 코드 블록을 시작할거에요 -> ApplyStat 범위를 if (stats == null) return; // 조건이 맞으면 종료할거에요 -> 적용 대상이 없으면 아무것도 안 함 switch (statType) // 분기할거에요 -> 어떤 스탯인지에 따라 { // 코드 블록을 시작할거에요 -> switch 범위를 case StatType.Health: // 조건을 처리할거에요 -> 체력 스탯이면 stats.AddMaxHealth(value); // 함수를 실행할거에요 -> 최대 체력에 value만큼 더하기 break; // 분기를 끝낼거에요 -> switch 탈출 case StatType.Speed: // 조건을 처리할거에요 -> 이동속도 스탯이면 stats.AddMoveSpeed(value); // 함수를 실행할거에요 -> 이동속도에 value만큼 더하기 break; // 분기를 끝낼거에요 -> switch 탈출 // ✨ [제거] case StatType.Strength 삭제됨 // 설명을 적을거에요 -> 힘 스탯은 더 이상 처리하지 않음 case StatType.Damage: // 조건을 처리할거에요 -> 공격력 스탯이면 stats.AddAttackDamage(value); // 함수를 실행할거에요 -> 공격 데미지에 value만큼 더하기 break; // 분기를 끝낼거에요 -> switch 탈출 } // 코드 블록을 끝낼거에요 -> switch를 } // 코드 블록을 끝낼거에요 -> ApplyStat을 } // 코드 블록을 끝낼거에요 -> RandomStatCardInstance를