This commit is contained in:
2025-12-05 16:48:00 +09:00
parent d3fd9680c2
commit d7cd938403
17 changed files with 1137 additions and 411 deletions
+19 -4
View File
@@ -39,6 +39,10 @@
- **Floating Text:** 데미지 발생 시 캐릭터 위에 데미지 수치가 떠오름 (일반: 빨강, 출혈: 보라, 취약: 주황).
- **Action Feedback:** 공격 빗나감(MISS - 적 위치/회색) 및 방어 실패(FAILED - 내 위치/빨강) 텍스트 오버레이.
- **Effect Icons:** 공격/방어 및 리스크 레벨에 따른 아이콘 애니메이션 출력.
- **Advanced Animations:**
- **Risk-Based:** Safe(Wobble), Normal(Dash), Risky(Scale Up + Heavy Dash + Shake + Explosion).
- **Icon-Only:** 공격 시 캐릭터 아이콘만 이동하며, 스탯 정보(HP/Armor)는 일시적으로 숨김 처리.
- **Impact Sync:** 타격 이펙트와 데미지 텍스트가 애니메이션 타격 시점에 정확히 동기화됨.
- **상태이상:** `Stun`, `Bleed`, `Vulnerable`, `DefenseForbidden`.
- **행운 시스템 (Luck System):**
- 아이템 옵션으로 `luck` 스탯 제공.
@@ -80,7 +84,9 @@
- **Streams:** `damageStream`, `effectStream`을 통해 UI(`BattleScreen`)에 비동기 이벤트 전달.
- **`lib/game/enums.dart`:** 프로젝트 전반의 Enum 통합 관리 (`ActionType`, `RiskLevel`, `StageType` 등).
- **`lib/utils/item_utils.dart`:** 아이템 타입별 아이콘 및 색상 로직 중앙화.
- **`lib/widgets/battle/`:** `BattleScreen`에서 분리된 재사용 가능한 위젯들 (`CharacterStatusCard`, `BattleLogOverlay`, `FloatingBattleTexts`, `StageUI`).
- **`lib/widgets/battle/`:** `BattleScreen`에서 분리된 재사용 가능한 위젯들.
- **UI Components:** `CharacterStatusCard`, `BattleLogOverlay`, `FloatingBattleTexts`, `StageUI`.
- **Effects:** `BattleAnimationWidget` (공격 애니메이션), `ExplosionWidget` (파티클), `ShakeWidget` (화면 흔들림).
- **`lib/widgets/responsive_container.dart`:** 반응형 레이아웃 컨테이너.
- **`lib/game/model/`:**
- `damage_event.dart`, `effect_event.dart`: 이벤트 모델.
@@ -107,9 +113,9 @@
- [ ] **출혈 상태 이상 조건 변경:** 공격 시 상대방의 방어도에 의해 공격이 완전히 막힐 경우, 출혈 상태 이상이 적용되지 않도록 로직 변경.
- [ ] **장비 분해 시스템 (적 장비):** 플레이어 장비의 옵션으로 상대방의 장비를 분해하여 '언암드' 상태로 만들 수 있는 시스템 구현.
- [ ] **플레이어 공격 데미지 분산(Variance) 적용 여부 검토:** 현재 적에게만 적용된 +/- 20% 데미지 분산을 플레이어에게도 적용할지 결정.
- [ ] **애니메이션 및 타격감 고도화:**
- 캐릭터별 이미지 추가 및 하스스톤 스타일의 공격 모션(대상에게 돌진 후 타격) 구현.
- **Risky 공격:** 하스스톤의 7데미지 이상 타격감(화면 흔들림, 강렬한 파티클 및 임팩트) 재현.
- [x] **애니메이션 및 타격감 고도화:**
- 캐릭터별 이미지 추가 및 하스스톤 스타일의 공격 모션(대상에게 돌진 후 타격) 구현 완료 (Icon-Only Animation).
- **Risky 공격:** 하스스톤의 7데미지 이상 타격감(화면 흔들림, 강렬한 파티클 및 임팩트) 구현 완료.
- [ ] **체력 조건부 특수 능력:** 캐릭터의 체력이 30% 미만일 때 발동 가능한 특수 능력 시스템 구현.
- [ ] **영구 스탯 수정자 로직 적용 (필수):**
- 현재 `Character` 클래스에 `permanentModifiers` 필드만 선언되어 있음.
@@ -118,7 +124,16 @@
- Firebase Auth 등을 활용한 구글 로그인 구현.
- Firestore 또는 Realtime Database에 유저 계정 정보(진행 상황, 재화 등) 저장 및 불러오기 기능 추가.
- _Note: 이 기능은 게임의 핵심 로직이 안정화된 후, 완전 나중에 진행할 예정입니다._
- [ ] **설정 페이지 (Settings Page) 구현 (Priority: Very Low):**
- **이펙트 강도 조절 (Effect Intensity):** 1 ~ 999 범위로 설정 가능.
- **Easter Egg:** 강도를 999로 설정하고 Risky 공격 성공 시, "심각한 오류로 프로세스가 종료되었습니다" 같은 페이크 시스템 팝업 출력.
---
**이 프롬프트를 읽은 AI 에이전트는 위 내용을 바탕으로 즉시 개발을 이어가십시오.**
## 7. 프롬프트 히스토리 (Prompt History)
- [x] 39_luck_system.md
- [x] 40_ui_update_summary.md
- [x] 41_refactoring_presets.md
+50
View File
@@ -0,0 +1,50 @@
# 40. UI Update Summary (Risky Attack Visual Effects)
39번 (Luck System) 이후 작업된 UI 및 시각 효과 관련 변경 사항 정리입니다.
## 1. Attack Animation & Visual Effects
공격 유형(Risk Level)에 따라 차별화된 애니메이션과 시각 효과를 구현했습니다.
### BattleAnimationWidget (`lib/widgets/battle/battle_animation_widget.dart`)
`animateAttack` 메서드가 `RiskLevel`을 인자로 받아 각기 다른 동작을 수행합니다.
- **Safe Attack**:
- **동작**: 제자리에서 좌우로 살짝 흔들리는(Wobble) 애니메이션.
- **느낌**: 신중함, 머뭇거림.
- **구현**: `Curves.elasticIn`을 사용한 짧은 X축 이동 (200ms).
- **Normal Attack**:
- **동작**: 적에게 다가가서 가볍게 부딪히는(Dash) 애니메이션.
- **느낌**: 일반적인 타격.
- **구현**: 확대(Scale Up) 없이 `Curves.easeOutQuad`로 이동 후 복귀 (400ms).
- **Risky Attack**:
- **동작**: 몸을 크게 부풀린 후(Scale Up) 강하게 돌진(Heavy Dash).
- **느낌**: 강력한 한 방, 높은 리스크.
- **구현**: 1.2배 확대(600ms) -> `Curves.easeInExpo` 가속 돌진(500ms) -> 타격 -> 복귀.
### ExplosionWidget (`lib/widgets/battle/explosion_widget.dart`) [NEW]
- **기능**: 타격 지점에서 파편(Particle)이 사방으로 튀는 효과.
- **구현**: `CustomPainter`를 사용하여 다수의 파티클을 효율적으로 렌더링.
- **트리거**: **Risky Attack** 적중 시에만 발동.
### ShakeWidget (`lib/widgets/battle/shake_widget.dart`)
- **기능**: 화면(또는 위젯)을 흔드는 효과.
- **적용**: **Risky Attack** 타격 시에만 발동.
## 2. BattleScreen Integration (`lib/screens/battle_screen.dart`)
- `BattleAnimationWidget`, `ExplosionWidget`, `ShakeWidget`을 조합하여 전투 연출 구성.
- `_addFloatingEffect`에서 공격 이벤트 수신 시 `RiskLevel`에 따라 적절한 애니메이션 메서드 호출.
- **Risky Attack**의 경우: `Scale Up` -> `Dash` -> `Impact` (Shake + Explosion) -> `Return`의 시퀀스로 동작.
- **Timing Sync**: 데미지 텍스트 표시 타이밍을 애니메이션 타격 시점(Safe: 200ms, Normal: 400ms, Risky: 1100ms)에 맞게 조정.
- **Icon-Only Animation**: 공격 시 전체 카드가 아닌 **캐릭터 아이콘만** 적에게 날아가도록 변경.
- **Hide Stats**: 공격 애니메이션 진행 중에는 HP, Armor 등 스탯 정보를 숨겨 시각적 혼란 방지.
## 3. 기타 UI 개선
- **Floating Effects**: 데미지 텍스트 및 이펙트 아이콘 위치 조정.
- **Risk Level Selection**: 다이얼로그 UI 개선.
- **CharacterStatusCard**: 애니메이션 키(`animationKey`)와 스탯 숨김(`hideStats`) 속성 추가.
+40
View File
@@ -0,0 +1,40 @@
# 41. Refactoring: Presets & Configs (리팩토링: 설정 중앙화)
## 개요 (Overview)
프로젝트 전반에 산재되어 있던 하드코딩된 값들(색상, 아이콘, 애니메이션 시간 등)을 중앙 집중식 설정 파일(`Config`)로 분리하여 유지보수성과 일관성을 향상시켰습니다.
## 변경 사항 (Changes)
### 1. 설정 파일 생성 (New Config Files)
`lib/game/config/` 디렉토리에 다음 파일들을 생성했습니다.
- **`battle_config.dart`**: 전투 관련 아이콘, 색상, 크기 정의 (공격/방어, 리스크 레벨별).
- **`theme_config.dart`**: UI 전반의 색상 테마 정의.
- **Stat Colors**: HP(Player/Enemy), ATK, DEF, LUCK, Gold 등.
- **UI Colors**: 카드 배경, 텍스트(White/Grey), 등급별 색상 등.
- **Feedback Colors**: 데미지, 회복, 미스 텍스트 색상 및 그림자.
- **Effect Colors**: 상태이상 배지 배경 및 텍스트.
- **`animation_config.dart`**: 애니메이션 관련 상수 정의.
- **Durations**: Floating Text(1000ms), Fade(200ms), Attack(Risk Level별 상이).
- **Curves**: `easeOut`, `elasticOut`, `elasticIn` 등 애니메이션 커브.
### 2. 코드 리팩토링 (Refactoring)
기존 하드코딩된 값을 `Config` 클래스의 상수로 대체했습니다.
- **`lib/screens/battle_screen.dart`**:
- `BattleConfig`를 사용하여 공격/방어 아이콘 및 이펙트 색상 결정.
- **`lib/widgets/battle/character_status_card.dart`**:
- `ThemeConfig`를 사용하여 HP/Armor/Stat 텍스트 및 게이지 색상 적용.
- `AnimationConfig`를 사용하여 스탯 숨김/표시 Fade 애니메이션 시간 적용.
- **`lib/widgets/battle/floating_battle_texts.dart`**:
- `ThemeConfig`를 사용하여 데미지 텍스트 그림자 색상 적용.
- `AnimationConfig`를 사용하여 텍스트 부양 및 아이콘 스케일 애니메이션의 시간과 커브 적용.
## 기대 효과 (Benefits)
- **유지보수 용이성**: 색상이나 애니메이션 속도를 변경할 때 단일 파일만 수정하면 프로젝트 전체에 일괄 적용됩니다.
- **일관성 유지**: UI 요소 간의 색상 및 동작 통일성을 보장합니다.
- **확장성**: 추후 '다크 모드'나 '테마 변경', '게임 속도 조절' 등의 기능을 구현하기 위한 기반이 마련되었습니다.