Commit Graph

345 Commits

Author SHA1 Message Date
JiWoong Sul
96fd5e43d9 style(format): dart format 자동 포맷 적용
Some checks are pending
CI / analyze-and-test (push) Waiting to run
- combat_tick_service, error_logger, save_integrity: 줄바꿈/정렬
- monetization_state_test, save_integrity_test: 포맷 정리
- macos/Podfile.lock: flutter pub get 반영
2026-03-31 14:22:20 +09:00
JiWoong Sul
68a5848510 style(lint): flutter analyze 경고 91건 → 0건 전체 정리
- analysis_options.yaml: freezed/g.dart 생성 파일 분석 제외
- game_text_l10n.dart: if문 중괄호 추가, 불필요한 ${} 제거
- iap_service.dart: 불필요한 dart:typed_data import 제거
- pq_logic.dart, combat_text_frames.dart: dangling library doc → library; 추가
- save_picker_dialog.dart: __ → _ (unnecessary_underscores)
- desktop_equipment_panel.dart: 불필요한 import 제거
- test 파일: _localVar → localVar 네이밍, ignore_for_file 추가
2026-03-31 14:22:09 +09:00
JiWoong Sul
068d9da4bd docs(README): 오프라인 문구 수정 — 광고/결제 네트워크 필요 명시
Some checks failed
CI / analyze-and-test (push) Has been cancelled
2026-03-31 00:39:46 +09:00
JiWoong Sul
0116db1056 docs: Progress Quest 언급 제거 + README 전면 재작성
Some checks failed
CI / analyze-and-test (push) Has been cancelled
- README: 프로젝트 설명, 게임 시스템, 스탯 표 포함 재작성
- CLAUDE.md, ARCHITECTURE.md: PQ 참조 제거
- skill_data, pq_logic, game_state, game_mutations: 주석에서 PQ 언급 제거
- analysis/market-analysis: PQ 언급 제거
2026-03-31 00:22:28 +09:00
JiWoong Sul
b346fdebe8 feat(balance): 스킬 버프 모디파이어 3종 전투 적용
Some checks failed
CI / analyze-and-test (push) Has been cancelled
- defModifier: 몬스터 반격 시 방어력 배율 적용 (DEF × (1+defMod))
- criRateModifier: 플레이어 공격 시 크리티컬 확률 추가
- evasionModifier: 몬스터 반격 시 회피율 추가
- 기존 atkModifier 패턴과 동일하게 임시 적용 + HP/MP만 반영
2026-03-31 00:13:01 +09:00
JiWoong Sul
69e7695cb7 feat(balance): CHA(매력) 스탯 활성화 — 상점 할인 + 드롭률 보정
- shop_service: CHA 기반 구매 할인 (CHA-10)×1%, 최대 15%
- item_service: CHA 기반 희귀 아이템 드롭률 보정 (CHA-10)×0.5%
- 호출부(game_mutations, market_service, resurrection_service)에 CHA 전달
- 기존 데드 스탯이었던 CHA가 게임 로직에 반영됨
2026-03-31 00:12:52 +09:00
JiWoong Sul
ea54b4c501 fix(audio): 백그라운드 시 SFX 미정지 + GameAudioController 메모리 누수 수정
Some checks failed
CI / analyze-and-test (push) Has been cancelled
- SfxChannelPool.stopAll() 추가: 모든 SFX 즉시 정지 + 대기열 비우기
- pauseAll()에서 SFX 풀도 정지하도록 변경
- game_play_screen dispose에서 _audioController.dispose() 호출 추가
2026-03-30 23:28:29 +09:00
JiWoong Sul
e2a9032009 fix(buff): 앱 재시작 시 배속/자동부활 버프 초기화
Some checks failed
CI / analyze-and-test (push) Has been cancelled
- loadAndStart에서 speedBoostEndMs, autoReviveEndMs를 null로 클리어
- 임시 버프는 세션 한정, 앱 재시작 시 깨끗한 상태로 시작
- 불필요한 restoreFromMonetization 메서드 제거
2026-03-30 23:19:05 +09:00
JiWoong Sul
b240cd2626 fix(buff): 앱 재시작 후 배속 부스트가 복원되지 않는 버그 수정
Some checks failed
CI / analyze-and-test (push) Has been cancelled
- speed_boost_manager: restoreFromMonetization() 추가
- game_session_controller: loadAndStart에서 배속 상태 복원 호출
- speedBoostEndMs가 세이브에 남아있어도 _isSpeedBoostActive가
  false로 리셋되어 배속이 적용 안 되던 문제 해결
2026-03-30 23:17:59 +09:00
JiWoong Sul
017f2fdb91 fix(buff): UI 남은 시간 표시가 elapsedMs 기반이던 누락 수정
Some checks failed
CI / analyze-and-test (push) Has been cancelled
- enhanced_animation_panel: 버프 남은 시간 계산을 DateTime.now() 기준으로 변경
- game_session_controller: autoRevive 만료 체크도 실제 시간 기준으로 변경
- 좌상단/우상단에 타임스탬프 원시값이 표시되던 문제 해결
2026-03-30 23:12:12 +09:00
JiWoong Sul
eee32c94b8 fix(buff): 배속 상태에서 버프 시간이 배속을 따라가는 버그 수정
Some checks failed
CI / analyze-and-test (push) Has been cancelled
- speedBoostEndMs: elapsedMs(게임 시간) → DateTime.now()(실제 시간)
- autoReviveEndMs: elapsedMs → DateTime.now()
- MonetizationState: isAutoReviveActive/isSpeedBoostActive 실제 시간 기준
- 5배속에서 5분 버프가 1분에 만료되던 문제 해결
- bossLevelingEndTime은 이미 DateTime.now() 기준 (변경 불필요)
2026-03-30 22:55:24 +09:00
JiWoong Sul
b1de31fc12 chore: freezed 코드 생성 파일 업데이트
Some checks failed
CI / analyze-and-test (push) Has been cancelled
2026-03-30 22:06:11 +09:00
JiWoong Sul
4515f470c8 docs(analysis): 피벗 후 시장 재분석 (Claude+Gemini 합의)
- TAM/SAM/SOM, 경쟁작 4개, 차별화, 수익 예측, 성장 전략
2026-03-30 22:03:21 +09:00
JiWoong Sul
b0568480f6 docs: README 전면 재작성 + ARCHITECTURE.md 신규 생성
- README: 프로젝트 설명, 기능, 기술 스택, 빌드, 구조, 라이선스
- ARCHITECTURE: 계층 다이어그램, 데이터 흐름, DI, 수익화, 저장, 테스트
2026-03-30 22:03:15 +09:00
JiWoong Sul
4c502df573 feat(logging): 로컬 에러 로거 구현 (오프라인 크래시 리포팅)
- ErrorLogger: 파일 기반 JSONL 로깅, 1MB 로테이션, 내보내기
- error_logger_zone: FlutterError.onError + runZonedGuarded
- main.dart: setupErrorHandling()으로 앱 래핑
- GetIt에 ErrorLogger 등록
2026-03-30 22:03:08 +09:00
JiWoong Sul
6156eef90d refactor(engine): progress_service 832줄 → 543줄 분할
- kill_task_handler.dart (133줄): 킬 태스크 완료, 전리품, 보스
- quest_completion_handler.dart (177줄): 퀘스트/플롯 진행
- exp_handler.dart (92줄): 경험치 획득, 레벨업
- 콜백 기반 의존성 주입으로 순환 참조 방지
2026-03-30 20:45:36 +09:00
JiWoong Sul
a2496d219e perf(game): setState 전체 리빌드 → ValueNotifier 국소 리빌드
- GameState를 ValueNotifier로 감싸 50ms마다 전체 트리 리빌드 방지
- build()에서 ValueListenableBuilder 사용
- _specialAnimation 등 UI 전용 상태만 setState 유지
- SchedulerBinding 의존성 제거
2026-03-30 20:43:28 +09:00
JiWoong Sul
9be0dd3e4f refactor(arena): arena_battle_screen 759줄 → 155줄 분할
- arena_battle_controller.dart: 전투 로직 (스트림, 턴, 로그)
- arena_battle_area.dart: 전투 영역 위젯
- arena_turn_indicator.dart: 경과 시간 위젯
- arena_combat_event_icons.dart: 전투 이벤트 아이콘 위젯
2026-03-30 20:40:55 +09:00
JiWoong Sul
5d38bac79e refactor(arch): ad_service, iap_service를 core/infrastructure/로 이동
- core/engine/ → core/infrastructure/ (프레임워크 오염 제거)
- 18개 파일 import 경로 업데이트
- CLAUDE.md 디렉토리 구조 반영
2026-03-30 20:39:05 +09:00
JiWoong Sul
9d5bb46856 docs(CLAUDE.md): 3자 교차 토론 프로토콜 업데이트 (Claude+Gemini+Codex) 2026-03-30 19:41:27 +09:00
JiWoong Sul
45d2544437 test: 저장 무결성 + Model 직렬화 라운드트립 테스트 추가
- save_integrity_test: 13개 (sign/verify 라운드트립, 변조 감지, 레거시 호환)
- save_data_roundtrip_test: 16개 (toJson/fromJson, v2→v4 마이그레이션, 기본값)
2026-03-30 19:41:21 +09:00
JiWoong Sul
e051bd451a feat(arch): GetIt DI + IIAPService/IAdService 인터페이스 도입
- core/di/: service_locator, IIAPService, IAdService 생성
- IAPService/AdService: implements 인터페이스 + GetIt 위임
- main.dart: setupServiceLocator() 호출
- 기존 .instance getter 호환성 100% 유지
- test/helpers/test_setup.dart: 테스트용 서비스 로케이터 초기화
2026-03-30 19:41:13 +09:00
JiWoong Sul
c382d6d770 feat: Phase 2 — google_mobile_ads 7.x, flutter_lints 6, CHANGELOG v1.1.0
- google_mobile_ads 5.3→7.x (iOS Privacy Manifest 대응)
- flutter_lints 5→6 (최신 lint 규칙)
- CHANGELOG.md 전면 재작성 (v1.0.1, v1.1.0 릴리즈 이력)
- 버전 1.0.1+2 → 1.1.0+3
- freezed 3.x 마이그레이션 보류 (호환성 문제, 2.x 유지)
2026-03-30 18:29:38 +09:00
JiWoong Sul
019879bf9e chore: 플랫폼 플러그인 등록 업데이트 (secure_storage) 2026-03-27 17:15:40 +09:00
JiWoong Sul
fd93ad4f90 chore: Phase 1 잔여 — 폰트 라이선스, 중복 파일 제거, CI 파이프라인
- assets/fonts/: JetBrainsMono + PressStart2P 라이선스 파일 추가
- arena/widgets/ascii_disintegrate_widget.dart 삭제 (shared/ 중복)
- .github/workflows/ci.yml: format+analyze+test 자동화
2026-03-27 17:15:35 +09:00
JiWoong Sul
8c10ca760b feat(security): Phase 1 보안 강화 — IAP RSA 검증, HMAC 체크섬, Secure Storage
- iap_service: Google Play RSA 서명 검증 (pointycastle)
- iap_service: SharedPreferences → flutter_secure_storage 전환
- save_integrity: 세이브 파일 HMAC-SHA256 무결성 검증 추가
- save_service: HMAC sign/verify 적용 (레거시 포맷 호환)
- pubspec: pointycastle, crypto, flutter_secure_storage 의존성 추가
- pubspec: 미사용 cupertino_icons 제거
2026-03-27 17:15:27 +09:00
JiWoong Sul
916a50992c docs: CLAUDE.md 작업 프로토콜 추가 및 수정 계획 작성
- CLAUDE.md: Claude-Gemini 교차 토론 프로토콜 추가
- CLAUDE.md: 존재하지 않는 디렉토리 3개 제거
- analysis/fix-plan: 4 Phase 수정 계획 (Claude-Gemini 합의)
- .claude/agents/: dev 리뷰 에이전트 9개 복사
- .claude/skills/: 프로젝트 스킬 4개 복사
2026-03-27 16:52:52 +09:00
JiWoong Sul
6f5b3ba8f4 feat(ios): ATT 추적 동의 문구 다국어화 (한/영/일)
- en/ko/ja.lproj/InfoPlist.strings 생성
- NSUserTrackingUsageDescription 3개 언어 지원
- project.pbxproj knownRegions에 ko, ja 추가
2026-03-24 18:34:14 +09:00
JiWoong Sul
863c52600f fix: 출시 전 검수 이슈 4건 수정
- save_data: JSON 캐스팅 시 null 안전 처리 (손상된 세이브 크래시 방지)
- settings_repository: _prefs! 강제 언래핑 제거, _getPrefs() 패턴 적용
- game_session_controller: IAP 구매 상태를 MonetizationState에 동기화
- iap_service: InAppPurchase.instance를 lazy 초기화로 변경
2026-03-24 17:40:39 +09:00
JiWoong Sul
c54681df8c fix(security): 릴리즈 빌드에서 치트 메뉴 완전 차단
- cheatsEnabled getter에 kDebugMode 가드 추가
- 세이브 파일에 cheatsEnabled=true가 저장되어도 릴리즈에서 무조건 false
- tree-shaking으로 릴리즈 바이너리에서 치트 코드 완전 제거
2026-03-19 17:38:05 +09:00
JiWoong Sul
0033e35665 test: shop_service, arena_service, potion_service 테스트 추가
- shop_service 17개 (가격 계산, 장비 생성, 자동 구매)
- arena_service 12개 (매칭, 장비 교환, 점수 계산)
- potion_service 29개 (사용, 구매, 드랍, 긴급 선택)
2026-03-19 16:56:30 +09:00
JiWoong Sul
13b698712e refactor(game): HelpDialog 4개 탭 뷰를 개별 파일로 분리
- help_dialog.dart 496줄 → 106줄
- help/ 디렉토리에 5개 파일 생성
  (help_section, basics, combat, skills, ui)
2026-03-19 16:56:20 +09:00
JiWoong Sul
d9132a72ea refactor(game): VictoryOverlay에서 크레딧 콘텐츠 분리
- victory_overlay.dart 734줄 → 265줄
- victory_credit_content.dart 475줄 신규 생성
2026-03-19 16:56:12 +09:00
JiWoong Sul
3d5e0af84d chore: 미사용 StoryService 인스턴스 제거 및 iOS 최소 버전 명시
- game_play_screen: 미사용 _storyService 인스턴스 및 import 제거
- iOS Podfile: platform :ios, '13.0' 명시
2026-03-19 16:52:17 +09:00
JiWoong Sul
a45eafa8fc refactor(game): 데스크톱 레이아웃을 DesktopGameLayout 위젯으로 분리
- game_play_screen.dart 873줄 → 745줄 (128줄 감소)
- desktop_game_layout.dart 193줄 신규 생성
- 앱바, 3패널 레이아웃, 키보드 단축키를 독립 위젯으로 추출
- MobileCarouselLayout과 동일한 패턴 적용
2026-03-19 15:00:54 +09:00
JiWoong Sul
7fcae4893e refactor: 타입 안전성 개선 및 하드코딩 문자열 l10n 적용
- return_rewards_dialog: _getRarityColor(dynamic) → ItemRarity? 타입 명시
- stats_section: 하드코딩된 Undo/Rolls 문자열을 l10n으로 교체
- game_text_l10n: uiUndoAndRolls, uiRollsOnly 추가 (한/영/일)
- skill_data: 주석 스킬 개수 70→68 수정
2026-03-19 14:56:58 +09:00
JiWoong Sul
2e66562ea2 fix(model): copyWith currentCombat null 초기화 버그 수정 및 테스트 추가
- ProgressState.copyWith에 clearCurrentCombat 파라미터 추가
- death_handler, resurrection_service에서 clearCurrentCombat 사용
- death_handler 테스트 14개 추가
- item_service 테스트 33개 추가
- skill_data 주석 스킬 개수 70→68 수정
2026-03-19 14:53:04 +09:00
JiWoong Sul
c4280c929d fix: Critical 버그 3건 수정
- death_handler: print() → debugPrint()로 변경 (프로덕션 성능)
- arena_combat_simulator: DOT 스킬 INT/WIS 실제 스탯 사용
- ad_service: iOS 광고 ID 플레이스홀더를 테스트 ID로 대체
2026-03-19 14:48:14 +09:00
JiWoong Sul
45b2c336cd fix(iap): 앱 재설치 시 구매 자동 복원 추가
- 초기화 시 로컬 구매 기록이 없으면 스토어에서 자동 복원 시도
- fire-and-forget 방식으로 초기화 블로킹 없음
- 이미 구매된 상태면 불필요한 스토어 호출 차단
2026-03-09 15:45:58 +09:00
JiWoong Sul
b98451919a style: dart format 적용 2026-03-09 15:34:35 +09:00
JiWoong Sul
4791bda669 test(monetization): MonetizationState 및 복귀 보상 테스트 추가
- MonetizationState 23개 테스트 (버프 활성/만료, 유료/무료 분기)
- ReturnRewardsService 14개 테스트 (보상 계산, 2배 시간, 포맷팅)
2026-03-09 15:34:27 +09:00
JiWoong Sul
f6799e0243 fix(monetization): 광고/보상 로직 버그 수정 및 오프라인 2배 구현
- 인터스티셜 광고 실패 시 onComplete 콜백 미호출 수정
- AdType.rewardReturn 추가, 복귀 보상에 올바른 타입 적용
- SpeedBoostButton 기본 배율 10→5로 수정
- 유료 유저 오프라인 시간 2배 인정 로직 구현
- IAP 상품 ID remove_ads → remove_ads_and 변경
2026-03-09 15:34:21 +09:00
JiWoong Sul
fc15198c57 chore(android): Play Core ProGuard 경고 억제 규칙 추가
- deferred components 관련 dontwarn 규칙 추가
2026-02-23 16:47:51 +09:00
JiWoong Sul
c56e76b176 test: 스킬 서비스 테스트 업데이트
- import 경로 변경 반영
2026-02-23 15:49:50 +09:00
JiWoong Sul
dadd25837d docs: CLAUDE.md 및 감사 보고서 업데이트
- CLAUDE.md 아키텍처 문서 최신화
- 감사 보고서 수정 사항 반영
2026-02-23 15:49:46 +09:00
JiWoong Sul
e13e8032d9 chore(build): 빌드 설정 업데이트
- Android: proguard 규칙 추가, build.gradle 업데이트
- iOS: 권한 설정 및 프로젝트 구성 업데이트
- macOS: 앱 정보 및 entitlements 업데이트
2026-02-23 15:49:43 +09:00
JiWoong Sul
864a866039 refactor(ui): 위젯 분리 및 화면 개선
- game_play_screen에서 desktop 패널 위젯 분리
- death_overlay에서 death_buttons, death_combat_log 분리
- mobile_carousel_layout에서 mobile_options_menu 분리
- 아레나 위젯 개선 (arena_hp_bar, result_panel 등)
- settings_screen에서 retro_settings_widgets 분리
- 기타 위젯 리팩토링 및 import 경로 업데이트
2026-02-23 15:49:38 +09:00
JiWoong Sul
6ddbf23816 feat(app): 테마 시스템 및 스플래시 화면 추가
- AppTheme 클래스 분리 (app_theme.dart)
- 스플래시 화면 추가 (splash_screen.dart)
- app.dart 경량화
2026-02-23 15:49:32 +09:00
JiWoong Sul
1a8858a3b1 feat(l10n): 다국어 리소스 확장
- 아레나, 통계, 설정 등 신규 번역 키 추가
- 한국어, 영어, 일본어 리소스 업데이트
- 생성된 localizations 파일 반영
2026-02-23 15:49:28 +09:00
JiWoong Sul
faaa5af54e refactor(model): 통계 모델 분리
- game_statistics에서 cumulative_statistics, session_statistics 분리
- task_info import 경로 업데이트
2026-02-23 15:49:23 +09:00