2026-02-12 15:23:25 +00:00
|
|
|
|
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를
|