개요

GGemCoTcgPhaseShuffleSettings는 **“최대 마나 도달 전까지 뽑힐 카드 구간(FrontLoadedCount)”**을 대상으로,

해당 구간을 **초반(Early) / 중반(Mid) / 후반(Late)**으로 나눈 뒤 각 구간별 코스트 가중치를 적용하는 셔플 설정 ScriptableObject입니다.

FrontLoadedCount 이후 구간은 가중치 적용 없이 1차 랜덤 셔플 결과를 그대로 유지하여 “순수 랜덤”을 보존합니다.


1) 적용 범위 개념

용어 의미
FrontLoadedCount “최대 마나 도달 전까지” 플레이어가 보게 될(드로우될) 카드 수로 계산되는 덱 앞 구간 카드 수
Phase Split FrontLoadedCount 구간을 Early/Mid/Late로 분할
Weight 적용 각 Phase 구간에서 코스트별 가중치로 “선택 확률”을 조정
FrontLoadedCount 이후 가중치 적용 없이 1차 셔플 결과 유지(랜덤성 유지)

2) 항목(Inspector) 설명 표

2.1 Phase Split (within FrontLoadedCount)

항목 타입 기본값 범위/제약 설명
earlyPhaseRatio float 0.3 [0..1] ([Range]) + OnValidate()에서 Clamp01 FrontLoadedCount 중 초반(Early) 구간에 할당할 비율
midPhaseRatio float 0.4 [0..1] ([Range]) + OnValidate()에서 Clamp01 FrontLoadedCount 중 중반(Mid) 구간에 할당할 비율
latePhaseRatio (직접 항목 없음) - - **후반(Late)**은 1 - (Early + Mid)가 아니라, 내부 계산에서 “나머지”로 처리됨(아래 참고)

중요: 비율 계산 보정 규칙(코드 기준)

ShuffleConfig.CalculatePhaseCounts()에서 다음 보정을 수행합니다.

규칙 내용
0 미만 FrontLoadedCount 0으로 보정
Early/Mid 각각 0~1로 Clamp
Early+Mid 합 최대 0.95로 Clamp (과도한 비율 합 방지)
합이 거의 0 Early=0, Mid=0, Late=FrontLoadedCount (전부 후반 처리)
반올림 오버플로우 Mid부터 우선 감소시켜 총합을 맞춤

2.2 Cost Weights Per Phase

early / mid / late각 Phase에서 사용할 코스트 가중치 테이블입니다.

항목 타입 기본값 설명
early PhaseCostWeightTable defaultWeight=1 초반(Early) 구간 코스트 가중치 테이블
mid PhaseCostWeightTable defaultWeight=1 중반(Mid) 구간 코스트 가중치 테이블
late PhaseCostWeightTable defaultWeight=1 후반(Late) 구간 코스트 가중치 테이블

3) PhaseCostWeightTable 구조 설명 표

GGemCoTcgPhaseShuffleSettings.cs 내부에 정의된 직렬화 지원 타입입니다.

항목 타입 기본값 제약 설명
defaultWeight float 1.0 [Min(0f)] + BuildShuffleConfig()에서 Mathf.Max(0f, defaultWeight) 해당 Phase에서 엔트리가 없는 코스트에 적용되는 기본 가중치
entries List<CostWeightEntry> 빈 리스트 Normalize()로 정리 코스트별 개별 가중치 목록(동일 cost 중복 가능)
Entries IReadOnlyList<CostWeightEntry> - 읽기 전용 직렬화 리스트의 읽기 전용 뷰