refactor(game): 테스트 캐릭터 서비스 및 세션 컨트롤러 정리

This commit is contained in:
JiWoong Sul
2026-01-13 15:11:01 +09:00
parent a48f4886d7
commit c420331300
2 changed files with 12 additions and 15 deletions

View File

@@ -1,3 +1,4 @@
import 'package:asciineverdie/data/skill_data.dart';
import 'package:asciineverdie/src/core/engine/item_service.dart'; import 'package:asciineverdie/src/core/engine/item_service.dart';
import 'package:asciineverdie/src/core/model/combat_stats.dart'; import 'package:asciineverdie/src/core/model/combat_stats.dart';
import 'package:asciineverdie/src/core/model/equipment_item.dart'; import 'package:asciineverdie/src/core/model/equipment_item.dart';
@@ -5,7 +6,6 @@ import 'package:asciineverdie/src/core/model/equipment_slot.dart';
import 'package:asciineverdie/src/core/model/game_state.dart'; import 'package:asciineverdie/src/core/model/game_state.dart';
import 'package:asciineverdie/src/core/model/hall_of_fame.dart'; import 'package:asciineverdie/src/core/model/hall_of_fame.dart';
import 'package:asciineverdie/src/core/model/item_stats.dart'; import 'package:asciineverdie/src/core/model/item_stats.dart';
import 'package:asciineverdie/src/core/model/pq_config.dart';
import 'package:asciineverdie/src/core/util/deterministic_random.dart'; import 'package:asciineverdie/src/core/util/deterministic_random.dart';
import 'package:asciineverdie/src/core/util/roman.dart'; import 'package:asciineverdie/src/core/util/roman.dart';
@@ -14,12 +14,8 @@ import 'package:asciineverdie/src/core/util/roman.dart';
/// 현재 캐릭터를 레벨 100, 고급 장비, 다수의 스킬을 가진 /// 현재 캐릭터를 레벨 100, 고급 장비, 다수의 스킬을 가진
/// 캐릭터로 변환하여 명예의 전당에 등록할 수 있게 함. /// 캐릭터로 변환하여 명예의 전당에 등록할 수 있게 함.
class TestCharacterService { class TestCharacterService {
TestCharacterService({ TestCharacterService({required this.rng});
required this.config,
required this.rng,
});
final PqConfig config;
final DeterministicRandom rng; final DeterministicRandom rng;
/// 테스트 캐릭터 데이터 생성 /// 테스트 캐릭터 데이터 생성
@@ -200,18 +196,22 @@ class TestCharacterService {
} }
/// 테스트용 스킬 생성 (20~30개) /// 테스트용 스킬 생성 (20~30개)
///
/// SkillData.spellNameToSkill에 정의된 전투 스킬만 선택
List<Map<String, String>> _generateTestSkills() { List<Map<String, String>> _generateTestSkills() {
final spells = config.spells; // 전투에서 실제로 사용 가능한 스킬 목록
final validSpells = SkillData.spellNameToSkill.keys.toList();
final skillCount = 20 + rng.nextInt(11); // 20~30개 final skillCount = 20 + rng.nextInt(11); // 20~30개
final selectedSpells = <String>{}; final selectedSpells = <String>{};
final skills = <Map<String, String>>[]; final skills = <Map<String, String>>[];
// 중복 없이 스킬 선택 // 중복 없이 스킬 선택
while (selectedSpells.length < skillCount && selectedSpells.length < spells.length) { while (selectedSpells.length < skillCount &&
final index = rng.nextInt(spells.length); selectedSpells.length < validSpells.length) {
final spell = spells[index].split('|')[0]; final index = rng.nextInt(validSpells.length);
final spell = validSpells[index];
if (selectedSpells.add(spell)) { if (selectedSpells.add(spell)) {
// 랭크: I~X 랜덤 (레벨 100 기준 높은 랭크 선호) // 랭크: V~X 랜덤 (레벨 100 기준 높은 랭크)
final rank = _randomHighRank(); final rank = _randomHighRank();
skills.add({'name': spell, 'rank': rank}); skills.add({'name': spell, 'rank': rank});
} }

View File

@@ -385,10 +385,7 @@ class GameSessionController extends ChangeNotifier {
await _stopLoop(saveOnStop: false); await _stopLoop(saveOnStop: false);
// TestCharacterService로 테스트 캐릭터 생성 // TestCharacterService로 테스트 캐릭터 생성
final testService = TestCharacterService( final testService = TestCharacterService(rng: _state!.rng);
config: progressService.config,
rng: _state!.rng,
);
final entry = testService.createTestCharacter(_state!); final entry = testService.createTestCharacter(_state!);