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

@@ -18,6 +18,7 @@ class HallOfFameEntry {
required this.clearedAt,
this.finalStats,
this.finalEquipment,
this.finalSpells,
});
/// 고유 ID (UUID)
@@ -56,6 +57,9 @@ class HallOfFameEntry {
/// 최종 장비 목록 (향후 아스키 아레나용)
final Map<String, String>? finalEquipment;
/// 최종 스펠북 (스펠 이름 + 랭크)
final List<Map<String, String>>? finalSpells;
/// 플레이 시간을 Duration으로 변환
Duration get totalPlayTime => Duration(milliseconds: totalPlayTimeMs);
@@ -107,6 +111,9 @@ class HallOfFameEntry {
'greaves': state.equipment.greaves,
'sollerets': state.equipment.sollerets,
},
finalSpells: state.spellBook.spells
.map((s) => {'name': s.name, 'rank': s.rank})
.toList(),
);
}
@@ -124,6 +131,7 @@ class HallOfFameEntry {
'questsCompleted': questsCompleted,
'clearedAt': clearedAt.toIso8601String(),
'finalEquipment': finalEquipment,
'finalSpells': finalSpells,
};
}
@@ -143,6 +151,11 @@ class HallOfFameEntry {
finalEquipment: json['finalEquipment'] != null
? Map<String, String>.from(json['finalEquipment'] as Map)
: null,
finalSpells: json['finalSpells'] != null
? (json['finalSpells'] as List<dynamic>)
.map((s) => Map<String, String>.from(s as Map))
.toList()
: null,
);
}
}