feat(hall-of-fame): 명예의 전당 상세 보기 및 스펠북 기록 추가

- HallOfFameEntry에 finalSpells 필드 추가 (스펠 이름 + 랭크)
- 명예의 전당 카드 클릭 시 상세 정보 다이얼로그 표시
- 디버그 모드에서 샘플 엔트리 자동 생성 (테스트용)
- pq_logic 및 progress 관련 minor 수정
This commit is contained in:
JiWoong Sul
2025-12-24 16:33:13 +09:00
parent 7219f58853
commit c1db1fd5d3
6 changed files with 333 additions and 19 deletions

View File

@@ -70,9 +70,10 @@ class ItemResult {
}
int levelUpTimeSeconds(int level) {
// ~20 minutes for level 1, then exponential growth (same as LevelUpTime in Main.pas).
final seconds = (20.0 + math.pow(1.15, level)) * 60.0;
return seconds.round();
// 10시간 내 레벨 100 도달 목표 (선형 성장)
// 레벨 1: ~2분, 레벨 100: ~7분
final seconds = 120 + (level * 3);
return seconds;
}
/// 초 단위 시간을 사람이 읽기 쉬운 형태로 변환 (원본 Main.pas:1265-1271)
@@ -736,10 +737,22 @@ class ActResult {
final List<RewardKind> rewards;
}
/// Act별 Plot Bar 최대값 (초) - 10시간 완주 목표
const _actPlotBarSeconds = [
300, // Prologue: 5분
7200, // Act I: 2시간
10800, // Act II: 3시간
10800, // Act III: 3시간
5400, // Act IV: 1.5시간
1800, // Act V: 30분
];
ActResult completeAct(int existingActCount) {
final nextActIndex = existingActCount;
final title = l10n.actTitle(intToRoman(nextActIndex));
final plotBarMax = 60 * 60 * (1 + 5 * existingActCount);
final plotBarMax = existingActCount < _actPlotBarSeconds.length
? _actPlotBarSeconds[existingActCount]
: 3600;
final rewards = <RewardKind>[];
if (existingActCount > 1) {